aboutsummaryrefslogtreecommitdiff
path: root/target-ppc/op_template.h
diff options
context:
space:
mode:
Diffstat (limited to 'target-ppc/op_template.h')
-rw-r--r--target-ppc/op_template.h68
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