Mercurial > hg-old > index.cgi
comparison lwasm/insn_gen.c @ 362:4867f18c872f
Added logic memory operands
author | lost@starbug |
---|---|
date | Thu, 01 Apr 2010 20:56:19 -0600 |
parents | 105393e31f20 |
children | eacdae8a1575 |
comparison
equal
deleted
inserted
replaced
361:105393e31f20 | 362:4867f18c872f |
---|---|
175 l -> len = OPLEN(instab[l -> insn].ops[1]) + l -> lint + 1; | 175 l -> len = OPLEN(instab[l -> insn].ops[1]) + l -> lint + 1; |
176 } | 176 } |
177 } | 177 } |
178 } | 178 } |
179 | 179 |
180 void insn_emit_gen_aux(asmstate_t *as, line_t *l) | 180 void insn_emit_gen_aux(asmstate_t *as, line_t *l, int extra) |
181 { | 181 { |
182 lw_expr_t e; | 182 lw_expr_t e; |
183 | 183 |
184 e = lwasm_fetch_expr(l, 0); | 184 e = lwasm_fetch_expr(l, 0); |
185 lwasm_emitop(l, instab[l -> insn].ops[l -> lint2]); | 185 lwasm_emitop(l, instab[l -> insn].ops[l -> lint2]); |
186 | |
187 if (extra != -1) | |
188 lwasm_emit(l, extra); | |
189 | |
186 if (l, l -> lint2 == 1) | 190 if (l, l -> lint2 == 1) |
187 { | 191 { |
188 lwasm_emit(l, l -> pb); | 192 lwasm_emit(l, l -> pb); |
189 lwasm_emitexpr(l, e, l -> lint); | 193 lwasm_emitexpr(l, e, l -> lint); |
190 return; | 194 return; |
218 insn_resolve_gen_aux(as, l, force); | 222 insn_resolve_gen_aux(as, l, force); |
219 } | 223 } |
220 | 224 |
221 EMITFUNC(insn_emit_gen0) | 225 EMITFUNC(insn_emit_gen0) |
222 { | 226 { |
223 insn_emit_gen_aux(as, l); | 227 insn_emit_gen_aux(as, l, -1); |
224 } | 228 } |
225 | 229 |
226 PARSEFUNC(insn_parse_gen8) | 230 PARSEFUNC(insn_parse_gen8) |
227 { | 231 { |
228 if (**p == '#') | 232 if (**p == '#') |
279 lwasm_emitop(l, instab[l -> insn].ops[3]); | 283 lwasm_emitop(l, instab[l -> insn].ops[3]); |
280 lwasm_emitexpr(l, e, 1); | 284 lwasm_emitexpr(l, e, 1); |
281 return; | 285 return; |
282 } | 286 } |
283 | 287 |
284 insn_emit_gen_aux(as, l); | 288 insn_emit_gen_aux(as, l, -1); |
285 } | 289 } |
286 | 290 |
287 PARSEFUNC(insn_parse_gen16) | 291 PARSEFUNC(insn_parse_gen16) |
288 { | 292 { |
289 if (**p == '#') | 293 if (**p == '#') |
340 lwasm_emitop(l, instab[l -> insn].ops[3]); | 344 lwasm_emitop(l, instab[l -> insn].ops[3]); |
341 lwasm_emitexpr(l, e, 2); | 345 lwasm_emitexpr(l, e, 2); |
342 return; | 346 return; |
343 } | 347 } |
344 | 348 |
345 insn_emit_gen_aux(as, l); | 349 insn_emit_gen_aux(as, l, -1); |
346 } | 350 } |
347 | 351 |
348 PARSEFUNC(insn_parse_gen32) | 352 PARSEFUNC(insn_parse_gen32) |
349 { | 353 { |
350 if (**p == '#') | 354 if (**p == '#') |
401 lwasm_emitop(l, instab[l -> insn].ops[3]); | 405 lwasm_emitop(l, instab[l -> insn].ops[3]); |
402 lwasm_emitexpr(l, e, 4); | 406 lwasm_emitexpr(l, e, 4); |
403 return; | 407 return; |
404 } | 408 } |
405 | 409 |
406 insn_emit_gen_aux(as, l); | 410 insn_emit_gen_aux(as, l, -1); |
407 } | 411 } |
408 | 412 |
409 PARSEFUNC(insn_parse_imm8) | 413 PARSEFUNC(insn_parse_imm8) |
410 { | 414 { |
411 lw_expr_t e; | 415 lw_expr_t e; |