Revision 351326a6
b/target-m68k/translate.c | ||
---|---|---|
171 | 171 |
static void disas_##name (DisasContext *s, uint16_t insn) |
172 | 172 |
#endif |
173 | 173 |
|
174 |
/* FIXME: Remove this. */ |
|
175 |
#define gen_im32(val) tcg_const_i32(val) |
|
176 |
|
|
177 | 174 |
/* Generate a load from the specified address. Narrow values are |
178 | 175 |
sign extended to full register width. */ |
179 | 176 |
static inline TCGv gen_load(DisasContext * s, int opsize, TCGv addr, int sign) |
... | ... | |
339 | 336 |
if ((ext & 0x80) == 0) { |
340 | 337 |
/* base not suppressed */ |
341 | 338 |
if (IS_NULL_QREG(base)) { |
342 |
base = gen_im32(offset + bd);
|
|
339 |
base = tcg_const_i32(offset + bd);
|
|
343 | 340 |
bd = 0; |
344 | 341 |
} |
345 | 342 |
if (!IS_NULL_QREG(add)) { |
... | ... | |
355 | 352 |
add = tmp; |
356 | 353 |
} |
357 | 354 |
} else { |
358 |
add = gen_im32(bd);
|
|
355 |
add = tcg_const_i32(bd);
|
|
359 | 356 |
} |
360 | 357 |
if ((ext & 3) != 0) { |
361 | 358 |
/* memory indirect */ |
... | ... | |
536 | 533 |
case 0: /* Absolute short. */ |
537 | 534 |
offset = ldsw_code(s->pc); |
538 | 535 |
s->pc += 2; |
539 |
return gen_im32(offset);
|
|
536 |
return tcg_const_i32(offset);
|
|
540 | 537 |
case 1: /* Absolute long. */ |
541 | 538 |
offset = read_im32(s); |
542 |
return gen_im32(offset);
|
|
539 |
return tcg_const_i32(offset);
|
|
543 | 540 |
case 2: /* pc displacement */ |
544 | 541 |
offset = s->pc; |
545 | 542 |
offset += ldsw_code(s->pc); |
546 | 543 |
s->pc += 2; |
547 |
return gen_im32(offset);
|
|
544 |
return tcg_const_i32(offset);
|
|
548 | 545 |
case 3: /* pc index+displacement. */ |
549 | 546 |
return gen_lea_indexed(s, opsize, NULL_QREG); |
550 | 547 |
case 4: /* Immediate. */ |
... | ... | |
1209 | 1206 |
break; |
1210 | 1207 |
case 2: /* subi */ |
1211 | 1208 |
tcg_gen_mov_i32(dest, src1); |
1212 |
gen_helper_xflag_lt(QREG_CC_X, dest, gen_im32(im));
|
|
1209 |
gen_helper_xflag_lt(QREG_CC_X, dest, tcg_const_i32(im));
|
|
1213 | 1210 |
tcg_gen_subi_i32(dest, dest, im); |
1214 |
gen_update_cc_add(dest, gen_im32(im));
|
|
1211 |
gen_update_cc_add(dest, tcg_const_i32(im));
|
|
1215 | 1212 |
s->cc_op = CC_OP_SUB; |
1216 | 1213 |
break; |
1217 | 1214 |
case 3: /* addi */ |
1218 | 1215 |
tcg_gen_mov_i32(dest, src1); |
1219 | 1216 |
tcg_gen_addi_i32(dest, dest, im); |
1220 |
gen_update_cc_add(dest, gen_im32(im));
|
|
1221 |
gen_helper_xflag_lt(QREG_CC_X, dest, gen_im32(im));
|
|
1217 |
gen_update_cc_add(dest, tcg_const_i32(im));
|
|
1218 |
gen_helper_xflag_lt(QREG_CC_X, dest, tcg_const_i32(im));
|
|
1222 | 1219 |
s->cc_op = CC_OP_ADD; |
1223 | 1220 |
break; |
1224 | 1221 |
case 5: /* eori */ |
... | ... | |
1228 | 1225 |
case 6: /* cmpi */ |
1229 | 1226 |
tcg_gen_mov_i32(dest, src1); |
1230 | 1227 |
tcg_gen_subi_i32(dest, dest, im); |
1231 |
gen_update_cc_add(dest, gen_im32(im));
|
|
1228 |
gen_update_cc_add(dest, tcg_const_i32(im));
|
|
1232 | 1229 |
s->cc_op = CC_OP_SUB; |
1233 | 1230 |
break; |
1234 | 1231 |
default: |
... | ... | |
1324 | 1321 |
default: |
1325 | 1322 |
abort(); |
1326 | 1323 |
} |
1327 |
DEST_EA(insn, opsize, gen_im32(0), NULL);
|
|
1328 |
gen_logic_cc(s, gen_im32(0));
|
|
1324 |
DEST_EA(insn, opsize, tcg_const_i32(0), NULL);
|
|
1325 |
gen_logic_cc(s, tcg_const_i32(0));
|
|
1329 | 1326 |
} |
1330 | 1327 |
|
1331 | 1328 |
static TCGv gen_get_ccr(DisasContext *s) |
... | ... | |
1589 | 1586 |
} |
1590 | 1587 |
if ((insn & 0x40) == 0) { |
1591 | 1588 |
/* jsr */ |
1592 |
gen_push(s, gen_im32(s->pc));
|
|
1589 |
gen_push(s, tcg_const_i32(s->pc));
|
|
1593 | 1590 |
} |
1594 | 1591 |
gen_jmp(s, tmp); |
1595 | 1592 |
} |
... | ... | |
1617 | 1614 |
tcg_gen_addi_i32(dest, dest, val); |
1618 | 1615 |
} |
1619 | 1616 |
} else { |
1620 |
src2 = gen_im32(val);
|
|
1617 |
src2 = tcg_const_i32(val);
|
|
1621 | 1618 |
if (insn & 0x0100) { |
1622 | 1619 |
gen_helper_xflag_lt(QREG_CC_X, dest, src2); |
1623 | 1620 |
tcg_gen_subi_i32(dest, dest, val); |
... | ... | |
1666 | 1663 |
} |
1667 | 1664 |
if (op == 1) { |
1668 | 1665 |
/* bsr */ |
1669 |
gen_push(s, gen_im32(s->pc));
|
|
1666 |
gen_push(s, tcg_const_i32(s->pc));
|
|
1670 | 1667 |
} |
1671 | 1668 |
gen_flush_cc_op(s); |
1672 | 1669 |
if (op > 1) { |
... | ... | |
1757 | 1754 |
val = (insn >> 9) & 7; |
1758 | 1755 |
if (val == 0) |
1759 | 1756 |
val = -1; |
1760 |
src = gen_im32(val);
|
|
1757 |
src = tcg_const_i32(val);
|
|
1761 | 1758 |
gen_logic_cc(s, src); |
1762 | 1759 |
DEST_EA(insn, OS_LONG, src, NULL); |
1763 | 1760 |
} |
... | ... | |
1883 | 1880 |
tmp = (insn >> 9) & 7; |
1884 | 1881 |
if (tmp == 0) |
1885 | 1882 |
tmp = 8; |
1886 |
shift = gen_im32(tmp);
|
|
1883 |
shift = tcg_const_i32(tmp);
|
|
1887 | 1884 |
/* No need to flush flags becuse we know we will set C flag. */ |
1888 | 1885 |
if (insn & 0x100) { |
1889 | 1886 |
gen_helper_shl_cc(reg, cpu_env, reg, shift); |
... | ... | |
2191 | 2188 |
switch ((ext >> 10) & 7) { |
2192 | 2189 |
case 4: /* FPCR */ |
2193 | 2190 |
/* Not implemented. Always return zero. */ |
2194 |
tmp32 = gen_im32(0);
|
|
2191 |
tmp32 = tcg_const_i32(0);
|
|
2195 | 2192 |
break; |
2196 | 2193 |
case 1: /* FPIAR */ |
2197 | 2194 |
case 2: /* FPSR */ |
... | ... | |
2592 | 2589 |
/* Skip the accumulate if the value is already saturated. */ |
2593 | 2590 |
l1 = gen_new_label(); |
2594 | 2591 |
tmp = tcg_temp_new(); |
2595 |
gen_op_and32(tmp, QREG_MACSR, gen_im32(MACSR_PAV0 << acc));
|
|
2592 |
gen_op_and32(tmp, QREG_MACSR, tcg_const_i32(MACSR_PAV0 << acc));
|
|
2596 | 2593 |
gen_op_jmp_nz32(tmp, l1); |
2597 | 2594 |
} |
2598 | 2595 |
#endif |
... | ... | |
2626 | 2623 |
/* Skip the accumulate if the value is already saturated. */ |
2627 | 2624 |
l1 = gen_new_label(); |
2628 | 2625 |
tmp = tcg_temp_new(); |
2629 |
gen_op_and32(tmp, QREG_MACSR, gen_im32(MACSR_PAV0 << acc));
|
|
2626 |
gen_op_and32(tmp, QREG_MACSR, tcg_const_i32(MACSR_PAV0 << acc));
|
|
2630 | 2627 |
gen_op_jmp_nz32(tmp, l1); |
2631 | 2628 |
} |
2632 | 2629 |
#endif |
Also available in: Unified diff