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
This commit is contained in:
aurel32 2008-09-05 14:19:51 +00:00
parent 39dd32eed2
commit 7c417963f7
2 changed files with 10 additions and 13 deletions

View File

@ -881,13 +881,6 @@ void OPPROTO op_nego_64 (void)
} }
#endif #endif
/* subtract from */
void OPPROTO op_subf (void)
{
T0 = T1 - T0;
RETURN();
}
/* subtract from carrying */ /* subtract from carrying */
void OPPROTO op_check_subfc (void) void OPPROTO op_check_subfc (void)
{ {

View File

@ -950,10 +950,14 @@ GEN_INT_ARITH2 (mullw, 0x1F, 0x0B, 0x07, PPC_INTEGER);
/* neg neg. nego nego. */ /* neg neg. nego nego. */
GEN_INT_ARITH1_64 (neg, 0x1F, 0x08, 0x03, PPC_INTEGER); GEN_INT_ARITH1_64 (neg, 0x1F, 0x08, 0x03, PPC_INTEGER);
/* subf subf. subfo subfo. */ /* 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) static always_inline void gen_op_subfo (void)
{ {
tcg_gen_not_tl(cpu_T[2], cpu_T[0]); 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(); gen_op_check_addo();
} }
#if defined(TARGET_PPC64) #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) static always_inline void gen_op_subfo_64 (void)
{ {
tcg_gen_not_i64(cpu_T[2], cpu_T[0]); 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(); gen_op_check_addo_64();
} }
#endif #endif
@ -969,26 +973,26 @@ GEN_INT_ARITH2_64 (subf, 0x1F, 0x08, 0x01, PPC_INTEGER);
/* subfc subfc. subfco subfco. */ /* subfc subfc. subfco subfco. */
static always_inline void gen_op_subfc (void) 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(); gen_op_check_subfc();
} }
static always_inline void gen_op_subfco (void) static always_inline void gen_op_subfco (void)
{ {
tcg_gen_not_tl(cpu_T[2], cpu_T[0]); 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_subfc();
gen_op_check_addo(); gen_op_check_addo();
} }
#if defined(TARGET_PPC64) #if defined(TARGET_PPC64)
static always_inline void gen_op_subfc_64 (void) 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(); gen_op_check_subfc_64();
} }
static always_inline void gen_op_subfco_64 (void) static always_inline void gen_op_subfco_64 (void)
{ {
tcg_gen_not_i64(cpu_T[2], cpu_T[0]); 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_subfc_64();
gen_op_check_addo_64(); gen_op_check_addo_64();
} }