Commit d35527d9f9ca7b0c99de06eb720cb35ee56ac5f6
1 parent
1f5063fb
Convert CCR and CWP ops to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4086 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
29 additions
and
26 deletions
target-sparc/helper.h
... | ... | @@ -8,6 +8,10 @@ target_ulong TCG_HELPER_PROTO helper_rdpsr(void); |
8 | 8 | void TCG_HELPER_PROTO helper_wrpstate(target_ulong new_state); |
9 | 9 | void TCG_HELPER_PROTO helper_done(void); |
10 | 10 | void TCG_HELPER_PROTO helper_retry(void); |
11 | +target_ulong TCG_HELPER_PROTO helper_rdccr(void); | |
12 | +void TCG_HELPER_PROTO helper_wrccr(target_ulong new_ccr); | |
13 | +target_ulong TCG_HELPER_PROTO helper_rdcwp(void); | |
14 | +void TCG_HELPER_PROTO helper_wrcwp(target_ulong new_cwp); | |
11 | 15 | target_ulong TCG_HELPER_PROTO helper_array8(target_ulong pixel_addr, |
12 | 16 | target_ulong cubesize); |
13 | 17 | target_ulong TCG_HELPER_PROTO helper_alignaddr(target_ulong addr, | ... | ... |
target-sparc/op.c
... | ... | @@ -258,28 +258,6 @@ void OPPROTO op_restore(void) |
258 | 258 | FORCE_RET(); |
259 | 259 | } |
260 | 260 | #else |
261 | -void OPPROTO op_rdccr(void) | |
262 | -{ | |
263 | - T0 = GET_CCR(env); | |
264 | -} | |
265 | - | |
266 | -void OPPROTO op_wrccr(void) | |
267 | -{ | |
268 | - PUT_CCR(env, T0); | |
269 | -} | |
270 | - | |
271 | -// CWP handling is reversed in V9, but we still use the V8 register | |
272 | -// order. | |
273 | -void OPPROTO op_rdcwp(void) | |
274 | -{ | |
275 | - T0 = GET_CWP64(env); | |
276 | -} | |
277 | - | |
278 | -void OPPROTO op_wrcwp(void) | |
279 | -{ | |
280 | - PUT_CWP64(env, T0); | |
281 | -} | |
282 | - | |
283 | 261 | /* XXX: use another pointer for %iN registers to avoid slow wrapping |
284 | 262 | handling ? */ |
285 | 263 | void OPPROTO op_save(void) | ... | ... |
target-sparc/op_helper.c
... | ... | @@ -1636,6 +1636,27 @@ target_ulong helper_rdpsr(void) |
1636 | 1636 | } |
1637 | 1637 | |
1638 | 1638 | #else |
1639 | +target_ulong helper_rdccr(void) | |
1640 | +{ | |
1641 | + return GET_CCR(env); | |
1642 | +} | |
1643 | + | |
1644 | +void helper_wrccr(target_ulong new_ccr) | |
1645 | +{ | |
1646 | + PUT_CCR(env, new_ccr); | |
1647 | +} | |
1648 | + | |
1649 | +// CWP handling is reversed in V9, but we still use the V8 register | |
1650 | +// order. | |
1651 | +target_ulong helper_rdcwp(void) | |
1652 | +{ | |
1653 | + return GET_CWP64(env); | |
1654 | +} | |
1655 | + | |
1656 | +void helper_wrcwp(target_ulong new_cwp) | |
1657 | +{ | |
1658 | + PUT_CWP64(env, new_cwp); | |
1659 | +} | |
1639 | 1660 | |
1640 | 1661 | // This function uses non-native bit order |
1641 | 1662 | #define GET_FIELD(X, FROM, TO) \ | ... | ... |
target-sparc/translate.c
... | ... | @@ -2023,7 +2023,7 @@ static void disas_sparc_insn(DisasContext * dc) |
2023 | 2023 | break; |
2024 | 2024 | #ifdef TARGET_SPARC64 |
2025 | 2025 | case 0x2: /* V9 rdccr */ |
2026 | - gen_op_rdccr(); | |
2026 | + tcg_gen_helper_1_0(helper_rdccr, cpu_T[0]); | |
2027 | 2027 | gen_movl_T0_reg(rd); |
2028 | 2028 | break; |
2029 | 2029 | case 0x3: /* V9 rdasi */ |
... | ... | @@ -2205,7 +2205,7 @@ static void disas_sparc_insn(DisasContext * dc) |
2205 | 2205 | gen_op_movl_T0_env(offsetof(CPUSPARCState, psrpil)); |
2206 | 2206 | break; |
2207 | 2207 | case 9: // cwp |
2208 | - gen_op_rdcwp(); | |
2208 | + tcg_gen_helper_1_0(helper_rdcwp, cpu_T[0]); | |
2209 | 2209 | break; |
2210 | 2210 | case 10: // cansave |
2211 | 2211 | gen_op_movl_T0_env(offsetof(CPUSPARCState, cansave)); |
... | ... | @@ -3113,7 +3113,7 @@ static void disas_sparc_insn(DisasContext * dc) |
3113 | 3113 | #else |
3114 | 3114 | case 0x2: /* V9 wrccr */ |
3115 | 3115 | gen_op_xor_T1_T0(); |
3116 | - gen_op_wrccr(); | |
3116 | + tcg_gen_helper_0_1(helper_wrccr, cpu_T[0]); | |
3117 | 3117 | break; |
3118 | 3118 | case 0x3: /* V9 wrasi */ |
3119 | 3119 | gen_op_xor_T1_T0(); |
... | ... | @@ -3322,7 +3322,7 @@ static void disas_sparc_insn(DisasContext * dc) |
3322 | 3322 | gen_op_movl_env_T0(offsetof(CPUSPARCState, psrpil)); |
3323 | 3323 | break; |
3324 | 3324 | case 9: // cwp |
3325 | - gen_op_wrcwp(); | |
3325 | + tcg_gen_helper_0_1(helper_wrcwp, cpu_T[0]); | |
3326 | 3326 | break; |
3327 | 3327 | case 10: // cansave |
3328 | 3328 | gen_op_movl_env_T0(offsetof(CPUSPARCState, cansave)); | ... | ... |