Revision d0660ed4 tcg/arm/tcg-target.c
b/tcg/arm/tcg-target.c | ||
---|---|---|
109 | 109 |
break; |
110 | 110 |
|
111 | 111 |
#ifdef CONFIG_SOFTMMU |
112 |
/* qemu_ld/st inputs (unless 'X' or 'D') */ |
|
112 |
/* qemu_ld/st inputs (unless 'X', 'd' or 'D') */
|
|
113 | 113 |
case 'x': |
114 | 114 |
ct->ct |= TCG_CT_REG; |
115 | 115 |
tcg_regset_set32(ct->u.regs, 0, (1 << TCG_TARGET_NB_REGS) - 1); |
... | ... | |
117 | 117 |
tcg_regset_reset_reg(ct->u.regs, TCG_REG_R1); |
118 | 118 |
break; |
119 | 119 |
|
120 |
/* qemu_ld64 data_reg */ |
|
121 |
case 'd': |
|
122 |
ct->ct |= TCG_CT_REG; |
|
123 |
tcg_regset_set32(ct->u.regs, 0, (1 << TCG_TARGET_NB_REGS) - 1); |
|
124 |
/* r1 is still needed to load data_reg2, so don't use it. */ |
|
125 |
tcg_regset_reset_reg(ct->u.regs, TCG_REG_R1); |
|
126 |
break; |
|
127 |
|
|
120 | 128 |
/* qemu_ld/st64 data_reg2 */ |
121 | 129 |
case 'D': |
122 | 130 |
ct->ct |= TCG_CT_REG; |
... | ... | |
963 | 971 |
data_reg, 0, 0, SHIFT_IMM_LSL(0)); |
964 | 972 |
break; |
965 | 973 |
case 3: |
966 |
tcg_out_dat_reg(s, cond, ARITH_MOV, |
|
967 |
data_reg, 0, 0, SHIFT_IMM_LSL(0)); |
|
974 |
if (data_reg != 0) |
|
975 |
tcg_out_dat_reg(s, cond, ARITH_MOV, |
|
976 |
data_reg, 0, 0, SHIFT_IMM_LSL(0)); |
|
968 | 977 |
if (data_reg2 != 1) |
969 | 978 |
tcg_out_dat_reg(s, cond, ARITH_MOV, |
970 | 979 |
data_reg2, 0, 1, SHIFT_IMM_LSL(0)); |
... | ... | |
1497 | 1506 |
{ INDEX_op_qemu_ld16u, { "r", "x", "X" } }, |
1498 | 1507 |
{ INDEX_op_qemu_ld16s, { "r", "x", "X" } }, |
1499 | 1508 |
{ INDEX_op_qemu_ld32u, { "r", "x", "X" } }, |
1500 |
{ INDEX_op_qemu_ld64, { "x", "r", "x", "X" } },
|
|
1509 |
{ INDEX_op_qemu_ld64, { "d", "r", "x", "X" } },
|
|
1501 | 1510 |
|
1502 | 1511 |
{ INDEX_op_qemu_st8, { "x", "x", "X" } }, |
1503 | 1512 |
{ INDEX_op_qemu_st16, { "x", "x", "X" } }, |
Also available in: Unified diff