diff options
author | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-12-05 07:21:44 +0000 |
---|---|---|
committer | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-12-05 07:21:44 +0000 |
commit | 7487953d704369c7acc7486f09eaf87faa5d3693 (patch) | |
tree | 87abd4ffd1a6bd46adc29139ca4381ea35c66b8e /target-ppc/op.c | |
parent | 54cdcae646bdc4b87b2355ba7d9aab85c39b2c31 (diff) |
target-ppc: convert POWER shift instructions to TCG
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5882 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc/op.c')
-rw-r--r-- | target-ppc/op.c | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/target-ppc/op.c b/target-ppc/op.c index 82750c6ef3..9d9661a8ec 100644 --- a/target-ppc/op.c +++ b/target-ppc/op.c @@ -476,133 +476,6 @@ void OPPROTO op_POWER_nabso (void) RETURN(); } -/* XXX: factorise POWER rotates... */ -void OPPROTO op_POWER_rlmi (void) -{ - T0 = rotl32(T0, T2) & PARAM1; - T0 |= T1 & (uint32_t)PARAM2; - RETURN(); -} - -void OPPROTO op_POWER_rrib (void) -{ - T2 &= 0x1FUL; - T0 = rotl32(T0 & INT32_MIN, T2); - T0 |= T1 & ~rotl32(INT32_MIN, T2); - RETURN(); -} - -void OPPROTO op_POWER_sle (void) -{ - T1 &= 0x1FUL; - env->spr[SPR_MQ] = rotl32(T0, T1); - T0 = T0 << T1; - RETURN(); -} - -void OPPROTO op_POWER_sleq (void) -{ - uint32_t tmp = env->spr[SPR_MQ]; - - T1 &= 0x1FUL; - env->spr[SPR_MQ] = rotl32(T0, T1); - T0 = T0 << T1; - T0 |= tmp >> (32 - T1); - RETURN(); -} - -void OPPROTO op_POWER_sllq (void) -{ - uint32_t msk = UINT32_MAX; - - msk = msk << (T1 & 0x1FUL); - if (T1 & 0x20UL) - msk = ~msk; - T1 &= 0x1FUL; - T0 = (T0 << T1) & msk; - T0 |= env->spr[SPR_MQ] & ~msk; - RETURN(); -} - -void OPPROTO op_POWER_slq (void) -{ - uint32_t msk = UINT32_MAX, tmp; - - msk = msk << (T1 & 0x1FUL); - if (T1 & 0x20UL) - msk = ~msk; - T1 &= 0x1FUL; - tmp = rotl32(T0, T1); - T0 = tmp & msk; - env->spr[SPR_MQ] = tmp; - RETURN(); -} - -void OPPROTO op_POWER_sraq (void) -{ - env->spr[SPR_MQ] = rotl32(T0, 32 - (T1 & 0x1FUL)); - if (T1 & 0x20UL) - T0 = UINT32_MAX; - else - T0 = (int32_t)T0 >> T1; - RETURN(); -} - -void OPPROTO op_POWER_sre (void) -{ - T1 &= 0x1FUL; - env->spr[SPR_MQ] = rotl32(T0, 32 - T1); - T0 = (int32_t)T0 >> T1; - RETURN(); -} - -void OPPROTO op_POWER_srea (void) -{ - T1 &= 0x1FUL; - env->spr[SPR_MQ] = T0 >> T1; - T0 = (int32_t)T0 >> T1; - RETURN(); -} - -void OPPROTO op_POWER_sreq (void) -{ - uint32_t tmp; - int32_t msk; - - T1 &= 0x1FUL; - msk = INT32_MIN >> T1; - tmp = env->spr[SPR_MQ]; - env->spr[SPR_MQ] = rotl32(T0, 32 - T1); - T0 = T0 >> T1; - T0 |= tmp & msk; - RETURN(); -} - -void OPPROTO op_POWER_srlq (void) -{ - uint32_t tmp; - int32_t msk; - - msk = INT32_MIN >> (T1 & 0x1FUL); - if (T1 & 0x20UL) - msk = ~msk; - T1 &= 0x1FUL; - tmp = env->spr[SPR_MQ]; - env->spr[SPR_MQ] = rotl32(T0, 32 - T1); - T0 = T0 >> T1; - T0 &= msk; - T0 |= tmp & ~msk; - RETURN(); -} - -void OPPROTO op_POWER_srq (void) -{ - T1 &= 0x1FUL; - env->spr[SPR_MQ] = rotl32(T0, 32 - T1); - T0 = T0 >> T1; - RETURN(); -} - /* POWER instructions not implemented in PowerPC 601 */ #if !defined(CONFIG_USER_ONLY) void OPPROTO op_POWER_mfsri (void) |