Mercurial > hg-old > index.cgi
comparison src/insn_rel.c @ 83:964d68cde469
Fixed problems with re8 and rel16 addressing
author | lost |
---|---|
date | Wed, 14 Jan 2009 06:33:13 +0000 |
parents | a338d496350e |
children | 81fc353d4d69 |
comparison
equal
deleted
inserted
replaced
82:03be43ae19cf | 83:964d68cde469 |
---|---|
36 lwasm_expr_term_t *t; | 36 lwasm_expr_term_t *t; |
37 int r; | 37 int r; |
38 | 38 |
39 lwasm_emitop(as, l, instab[opnum].ops[0]); | 39 lwasm_emitop(as, l, instab[opnum].ops[0]); |
40 | 40 |
41 if ((r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST | EXPR_NOINTERSECT, &v, 0)) != 0) | 41 if ((r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST | EXPR_NOINTERSECT, &v, 0)) < 0) |
42 v = 0; | 42 v = 0; |
43 else | 43 else |
44 { | 44 { |
45 if (as -> passnum == 1) | 45 if (as -> passnum == 1) |
46 { | 46 { |
47 // need to adjust the expression | 47 // need to adjust the expression |
48 v -= as -> addr + 1; | |
49 if (l -> exprs[0]) | 48 if (l -> exprs[0]) |
50 { | 49 { |
51 t = lwasm_expr_term_create_int(as -> addr + 1); | 50 t = lwasm_expr_term_create_int(as -> addr + 1); |
52 lwasm_expr_stack_push(l -> exprs[0], t); | 51 lwasm_expr_stack_push(l -> exprs[0], t); |
53 lwasm_expr_term_free(t); | 52 lwasm_expr_term_free(t); |
81 lwasm_expr_term_t *t; | 80 lwasm_expr_term_t *t; |
82 | 81 |
83 lwasm_emitop(as, l, instab[opnum].ops[0]); | 82 lwasm_emitop(as, l, instab[opnum].ops[0]); |
84 | 83 |
85 r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST, &v, 0); | 84 r = lwasm_expr_result2(as, l, p, EXPR_PASS2CONST, &v, 0); |
86 if (r != 0) | 85 if (r < 0) |
87 v = 0; | 86 v = 0; |
88 else | 87 else |
89 { | 88 { |
90 if (as -> passnum == 1) | 89 if (as -> passnum == 1) |
91 { | 90 { |
92 // need to adjust the expression | 91 // need to adjust the expression |
93 v -= as -> addr + 1; | |
94 if (l -> exprs[0]) | 92 if (l -> exprs[0]) |
95 { | 93 { |
96 t = lwasm_expr_term_create_int(as -> addr + 1); | 94 t = lwasm_expr_term_create_int(as -> addr + 2); |
97 lwasm_expr_stack_push(l -> exprs[0], t); | 95 lwasm_expr_stack_push(l -> exprs[0], t); |
98 lwasm_expr_term_free(t); | 96 lwasm_expr_term_free(t); |
99 t = lwasm_expr_term_create_oper(LWASM_OPER_MINUS); | 97 t = lwasm_expr_term_create_oper(LWASM_OPER_MINUS); |
100 lwasm_expr_stack_push(l -> exprs[0], t); | 98 lwasm_expr_stack_push(l -> exprs[0], t); |
101 lwasm_expr_term_free(t); | 99 lwasm_expr_term_free(t); |