Mercurial > hg-old > index.cgi
comparison lwasm/insn_indexed.c @ 371:9c24d9d485b9
Much bugfixing
author | lost@starbug |
---|---|
date | Wed, 21 Apr 2010 23:29:18 -0600 |
parents | 7d91ab7ac7d6 |
children | 8f9d72cfb897 |
comparison
equal
deleted
inserted
replaced
370:6b33faa21a0a | 371:9c24d9d485b9 |
---|---|
261 lw_expr_t e1, e2; | 261 lw_expr_t e1, e2; |
262 // external references are handled exactly the same as for | 262 // external references are handled exactly the same as for |
263 // relative addressing modes | 263 // relative addressing modes |
264 // on pass 1, adjust the expression for a subtraction of the | 264 // on pass 1, adjust the expression for a subtraction of the |
265 // current address | 265 // current address |
266 | 266 // e - (addr + linelen) => e - addr - linelen |
267 e1 = lw_expr_build(lw_expr_type_special, lwasm_expr_linelen, l); | 267 |
268 e2 = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, l -> addr, e1); | 268 e2 = lw_expr_build(lw_expr_type_special, lwasm_expr_linelen, l); |
269 e1 = lw_expr_build(lw_expr_type_oper, lw_expr_oper_minus, e, e2); | |
270 lw_expr_destroy(e2); | |
271 e2 = lw_expr_build(lw_expr_type_oper, lw_expr_oper_minus, e1, l -> addr); | |
269 lw_expr_destroy(e1); | 272 lw_expr_destroy(e1); |
270 e1 = lw_expr_build(lw_expr_type_oper, lw_expr_oper_minus, e, l -> addr); | 273 lwasm_save_expr(l, 0, e2); |
271 lwasm_save_expr(l, 0, e1); | |
272 lw_expr_destroy(e2); | |
273 } | 274 } |
274 | 275 |
275 l -> pb = (indir * 0x80) | rn | (f0 * 0x40); | 276 l -> pb = (indir * 0x80) | rn | (f0 * 0x40); |
276 } | 277 } |
277 | 278 |