Mercurial > hg > index.cgi
comparison lwlib/lw_expr.h @ 377:67373a053c49
Add ?rts target for branch instructions
Add a ?rts target for branch instructions, which brances to the nearest RTS
or inverts the branch logic to branch around a generated RTS. Activated by a
pragma "qrts".
Thanks to Erik G <erik@6809.org> for the patch.
author | William Astle <lost@l-w.ca> |
---|---|
date | Mon, 13 Jul 2015 20:50:02 -0600 |
parents | 8e25147c2aa8 |
children | 4c5d3b990a3f |
comparison
equal
deleted
inserted
replaced
376:35d4213e6657 | 377:67373a053c49 |
---|---|
53 lw_expr_oper_com, // unary 1's complement | 53 lw_expr_oper_com, // unary 1's complement |
54 lw_expr_oper_com8, // 8 bit complement | 54 lw_expr_oper_com8, // 8 bit complement |
55 lw_expr_oper_none = 0 | 55 lw_expr_oper_none = 0 |
56 }; | 56 }; |
57 | 57 |
58 #ifdef ___lw_expr_c_seen___ | |
59 | |
60 typedef struct lw_expr_priv * lw_expr_t; | 58 typedef struct lw_expr_priv * lw_expr_t; |
61 | 59 |
62 struct lw_expr_opers | 60 struct lw_expr_opers |
63 { | 61 { |
64 lw_expr_t p; | 62 lw_expr_t p; |
76 typedef lw_expr_t lw_expr_fn_t(int t, void *ptr, void *priv); | 74 typedef lw_expr_t lw_expr_fn_t(int t, void *ptr, void *priv); |
77 typedef lw_expr_t lw_expr_fn2_t(char *var, void *priv); | 75 typedef lw_expr_t lw_expr_fn2_t(char *var, void *priv); |
78 typedef lw_expr_t lw_expr_fn3_t(char **p, void *priv); | 76 typedef lw_expr_t lw_expr_fn3_t(char **p, void *priv); |
79 typedef int lw_expr_testfn_t(lw_expr_t e, void *priv); | 77 typedef int lw_expr_testfn_t(lw_expr_t e, void *priv); |
80 | 78 |
81 #else /* def ___lw_expr_c_seen___ */ | |
82 | |
83 typedef void * lw_expr_t; | |
84 | |
85 lw_expr_t lwexpr_create(void); | 79 lw_expr_t lwexpr_create(void); |
86 void lw_expr_destroy(lw_expr_t E); | 80 void lw_expr_destroy(lw_expr_t E); |
87 lw_expr_t lw_expr_copy(lw_expr_t E); | 81 lw_expr_t lw_expr_copy(lw_expr_t E); |
88 void lw_expr_add_operand(lw_expr_t E, lw_expr_t O); | 82 void lw_expr_add_operand(lw_expr_t E, lw_expr_t O); |
89 lw_expr_t lw_expr_build(int exprtype, ...); | 83 lw_expr_t lw_expr_build(int exprtype, ...); |
90 char *lw_expr_print(lw_expr_t E); | 84 char *lw_expr_print(lw_expr_t E); |
91 int lw_expr_compare(lw_expr_t E1, lw_expr_t E2); | 85 int lw_expr_compare(lw_expr_t E1, lw_expr_t E2); |
92 void lw_expr_simplify(lw_expr_t E, void *priv); | 86 void lw_expr_simplify(lw_expr_t E, void *priv); |
93 | |
94 typedef lw_expr_t lw_expr_fn_t(int t, void *ptr, void *priv); | |
95 typedef lw_expr_t lw_expr_fn2_t(char *var, void *priv); | |
96 typedef lw_expr_t lw_expr_fn3_t(char **p, void *priv); | |
97 | 87 |
98 void lw_expr_set_special_handler(lw_expr_fn_t *fn); | 88 void lw_expr_set_special_handler(lw_expr_fn_t *fn); |
99 void lw_expr_set_var_handler(lw_expr_fn2_t *fn); | 89 void lw_expr_set_var_handler(lw_expr_fn2_t *fn); |
100 void lw_expr_set_term_parser(lw_expr_fn3_t *fn); | 90 void lw_expr_set_term_parser(lw_expr_fn3_t *fn); |
101 | 91 |
119 // zero | 109 // zero |
120 int lw_expr_testterms(lw_expr_t e, lw_expr_testfn_t *fn, void *priv); | 110 int lw_expr_testterms(lw_expr_t e, lw_expr_testfn_t *fn, void *priv); |
121 | 111 |
122 void lw_expr_setdivzero(void (*fn)(void *priv)); | 112 void lw_expr_setdivzero(void (*fn)(void *priv)); |
123 | 113 |
124 #endif /* def ___lw_expr_c_seen___ */ | |
125 | |
126 #endif /* ___lw_expr_h_seen___ */ | 114 #endif /* ___lw_expr_h_seen___ */ |