diff options
Diffstat (limited to 'target-ppc/op_template.h')
-rw-r--r-- | target-ppc/op_template.h | 68 |
1 files changed, 40 insertions, 28 deletions
diff --git a/target-ppc/op_template.h b/target-ppc/op_template.h index d45062592..e6d6afac5 100644 --- a/target-ppc/op_template.h +++ b/target-ppc/op_template.h @@ -57,23 +57,24 @@ void OPPROTO glue(op_store_T2_gpr_gpr, REG) (void) } #endif -#if defined(TARGET_PPCEMB) +/* General purpose registers containing vector operands moves */ +#if !defined(TARGET_PPC64) void OPPROTO glue(op_load_gpr64_T0_gpr, REG) (void) { - T0_64 = env->gpr[REG]; + T0_64 = (uint64_t)env->gpr[REG] | ((uint64_t)env->gprh[REG] << 32); RETURN(); } void OPPROTO glue(op_load_gpr64_T1_gpr, REG) (void) { - T1_64 = env->gpr[REG]; + T1_64 = (uint64_t)env->gpr[REG] | ((uint64_t)env->gprh[REG] << 32); RETURN(); } #if 0 // unused void OPPROTO glue(op_load_gpr64_T2_gpr, REG) (void) { - T2_64 = env->gpr[REG]; + T2_64 = (uint64_t)env->gpr[REG] | ((uint64_t)env->gprh[REG] << 32); RETURN(); } #endif @@ -81,12 +82,14 @@ void OPPROTO glue(op_load_gpr64_T2_gpr, REG) (void) void OPPROTO glue(op_store_T0_gpr64_gpr, REG) (void) { env->gpr[REG] = T0_64; + env->gprh[REG] = T0_64 >> 32; RETURN(); } void OPPROTO glue(op_store_T1_gpr64_gpr, REG) (void) { env->gpr[REG] = T1_64; + env->gprh[REG] = T1_64 >> 32; RETURN(); } @@ -94,66 +97,75 @@ void OPPROTO glue(op_store_T1_gpr64_gpr, REG) (void) void OPPROTO glue(op_store_T2_gpr64_gpr, REG) (void) { env->gpr[REG] = T2_64; + env->gprh[REG] = T2_64 >> 32; RETURN(); } #endif -#endif /* defined(TARGET_PPCEMB) */ +#endif /* !defined(TARGET_PPC64) */ -#if REG <= 7 -/* Condition register moves */ -void OPPROTO glue(op_load_crf_T0_crf, REG) (void) +/* Altivec registers moves */ +void OPPROTO glue(op_load_avr_A0_avr, REG) (void) { - T0 = env->crf[REG]; + AVR0 = env->avr[REG]; RETURN(); } -void OPPROTO glue(op_load_crf_T1_crf, REG) (void) +void OPPROTO glue(op_load_avr_A1_avr, REG) (void) { - T1 = env->crf[REG]; + AVR1 = env->avr[REG]; RETURN(); } -void OPPROTO glue(op_store_T0_crf_crf, REG) (void) +void OPPROTO glue(op_load_avr_A2_avr, REG) (void) { - env->crf[REG] = T0; + AVR2 = env->avr[REG]; RETURN(); } -void OPPROTO glue(op_store_T1_crf_crf, REG) (void) +void OPPROTO glue(op_store_A0_avr_avr, REG) (void) { - env->crf[REG] = T1; + env->avr[REG] = AVR0; RETURN(); } -/* Floating point condition and status register moves */ -void OPPROTO glue(op_load_fpscr_T0_fpscr, REG) (void) +void OPPROTO glue(op_store_A1_avr_avr, REG) (void) { - T0 = env->fpscr[REG]; + env->avr[REG] = AVR1; RETURN(); } -#if REG == 0 -void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void) +#if 0 // unused +void OPPROTO glue(op_store_A2_avr_avr, REG) (void) { - env->fpscr[REG] = (env->fpscr[REG] & 0x9) | (T0 & ~0x9); + env->avr[REG] = AVR2; RETURN(); } +#endif -void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void) +#if REG <= 7 +/* Condition register moves */ +void OPPROTO glue(op_load_crf_T0_crf, REG) (void) { - env->fpscr[REG] = (env->fpscr[REG] & 0x9); + T0 = env->crf[REG]; RETURN(); } -#else -void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void) + +void OPPROTO glue(op_load_crf_T1_crf, REG) (void) { - env->fpscr[REG] = T0; + T1 = env->crf[REG]; RETURN(); } -void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void) +void OPPROTO glue(op_store_T0_crf_crf, REG) (void) { - env->fpscr[REG] = 0x0; + env->crf[REG] = T0; + RETURN(); +} + +#if 0 // Unused +void OPPROTO glue(op_store_T1_crf_crf, REG) (void) +{ + env->crf[REG] = T1; RETURN(); } #endif |