aboutsummaryrefslogtreecommitdiff
path: root/target-ppc
diff options
context:
space:
mode:
authoraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>2008-09-05 14:19:51 +0000
committeraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>2008-09-05 14:19:51 +0000
commit7c417963f7346cf4fdc2a0cc08bdeb0ee7165f8d (patch)
tree7dc0db7286e57f8f3ddf914bb5fdcc4f6a4c311e /target-ppc
parent39dd32eed2d56fd8f5f5cbdc16ec7fe2faae447a (diff)
ppc: Convert op_subf to TCG
Replace op_subf with tcg_gen_sub_tl. Signed-off-by: Andreas Faerber <andreas.faerber@web.de> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5168 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc')
-rw-r--r--target-ppc/op.c7
-rw-r--r--target-ppc/translate.c16
2 files changed, 10 insertions, 13 deletions
diff --git a/target-ppc/op.c b/target-ppc/op.c
index 4ee411b81a..01b944bc7b 100644
--- a/target-ppc/op.c
+++ b/target-ppc/op.c
@@ -881,13 +881,6 @@ void OPPROTO op_nego_64 (void)
}
#endif
-/* subtract from */
-void OPPROTO op_subf (void)
-{
- T0 = T1 - T0;
- RETURN();
-}
-
/* subtract from carrying */
void OPPROTO op_check_subfc (void)
{
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index f505be18c3..6561304bba 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -950,10 +950,14 @@ GEN_INT_ARITH2 (mullw, 0x1F, 0x0B, 0x07, PPC_INTEGER);
/* neg neg. nego nego. */
GEN_INT_ARITH1_64 (neg, 0x1F, 0x08, 0x03, PPC_INTEGER);
/* subf subf. subfo subfo. */
+static always_inline void gen_op_subf (void)
+{
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
+}
static always_inline void gen_op_subfo (void)
{
tcg_gen_not_tl(cpu_T[2], cpu_T[0]);
- gen_op_subf();
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
gen_op_check_addo();
}
#if defined(TARGET_PPC64)
@@ -961,7 +965,7 @@ static always_inline void gen_op_subfo (void)
static always_inline void gen_op_subfo_64 (void)
{
tcg_gen_not_i64(cpu_T[2], cpu_T[0]);
- gen_op_subf();
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
gen_op_check_addo_64();
}
#endif
@@ -969,26 +973,26 @@ GEN_INT_ARITH2_64 (subf, 0x1F, 0x08, 0x01, PPC_INTEGER);
/* subfc subfc. subfco subfco. */
static always_inline void gen_op_subfc (void)
{
- gen_op_subf();
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
gen_op_check_subfc();
}
static always_inline void gen_op_subfco (void)
{
tcg_gen_not_tl(cpu_T[2], cpu_T[0]);
- gen_op_subf();
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
gen_op_check_subfc();
gen_op_check_addo();
}
#if defined(TARGET_PPC64)
static always_inline void gen_op_subfc_64 (void)
{
- gen_op_subf();
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
gen_op_check_subfc_64();
}
static always_inline void gen_op_subfco_64 (void)
{
tcg_gen_not_i64(cpu_T[2], cpu_T[0]);
- gen_op_subf();
+ tcg_gen_sub_tl(cpu_T[0], cpu_T[1], cpu_T[0]);
gen_op_check_subfc_64();
gen_op_check_addo_64();
}