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;