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___ */