Update of /cvsroot/hppaqemu/hppaqemu/target-hppa
In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv28906/target-hppa
Modified Files:
op.c translate.c
Log Message:
Eliminate condition tests for f = 1. Instead, add 'f' parameter to
gen_branch_cond() to negate the condition.
Index: translate.c
===================================================================
RCS file: /cvsroot/hppaqemu/hppaqemu/target-hppa/translate.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** translate.c 12 Mar 2007 20:00:46 -0000 1.22
--- translate.c 13 Mar 2007 00:57:45 -0000 1.23
***************
*** 639,666 ****
}
! static GenOpFunc * const gen_cond[2][8] = {
! {
! gen_op_eval_cmp_never,
! gen_op_eval_cmp_eq,
! gen_op_eval_cmp_slt,
! gen_op_eval_cmp_slteq,
! gen_op_eval_cmp_ult,
! gen_op_eval_cmp_ulteq,
! gen_op_eval_cmp_sv,
! gen_op_eval_cmp_od,
! },
! {
! gen_op_eval_cmp_tr,
! gen_op_eval_cmp_neq,
! gen_op_eval_cmp_sgteq,
! gen_op_eval_cmp_sgt,
! gen_op_eval_cmp_ugteq,
! gen_op_eval_cmp_ugt,
! gen_op_eval_cmp_nsv,
! gen_op_eval_cmp_ev,
! },
};
! static void gen_branch_cond(DisasContext *dc, long tb, target_ulong disp, int n)
{
int l1;
--- 639,654 ----
}
! static GenOpFunc * const gen_cond_cmp[8] = {
! gen_op_eval_never,
! gen_op_eval_cmp_eq,
! gen_op_eval_cmp_slt,
! gen_op_eval_cmp_slteq,
! gen_op_eval_cmp_ult,
! gen_op_eval_cmp_ulteq,
! gen_op_eval_cmp_sv,
! gen_op_eval_cmp_od,
};
! static void gen_branch_cond(DisasContext *dc, long tb, target_ulong disp, int n, int f)
{
int l1;
***************
*** 670,674 ****
l1 = gen_new_label();
! gen_op_jnz_T2_label(l1);
/* taken branch */
--- 658,665 ----
l1 = gen_new_label();
! if (f)
! gen_op_jz_T2_label(l1);
! else
! gen_op_jnz_T2_label(l1);
/* taken branch */
***************
*** 1612,1617 ****
disp = (((w1 << 1) | w) << 2);
! gen_cond[0][c]();
! gen_branch_cond(dc, (long)dc->tb, disp, n);
/* FIXME */
--- 1603,1608 ----
disp = (((w1 << 1) | w) << 2);
! gen_cond_cmp[c]();
! gen_branch_cond(dc, (long)dc->tb, disp, n, 0);
/* FIXME */
Index: op.c
===================================================================
RCS file: /cvsroot/hppaqemu/hppaqemu/target-hppa/op.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** op.c 12 Mar 2007 20:00:46 -0000 1.18
--- op.c 13 Mar 2007 00:57:45 -0000 1.19
***************
*** 778,792 ****
}
! /* Compare/subtract conditions:
! * See table 5-3 in PA1.1 Specification
! */
!
! /* f = 0 */
! void OPPROTO op_eval_cmp_never(void)
{
T2 = 0;
}
void OPPROTO op_eval_cmp_eq(void)
{
--- 778,793 ----
}
! /* Compare operations */
! void OPPROTO op_eval_never(void)
{
T2 = 0;
}
+ /* Compare/subtract conditions:
+ * See table 5-3 in PA1.1 Specification
+ */
+
+ /* = */
void OPPROTO op_eval_cmp_eq(void)
{
***************
*** 794,797 ****
--- 795,799 ----
}
+ /* < */
void OPPROTO op_eval_cmp_slt(void)
{
***************
*** 799,802 ****
--- 801,805 ----
}
+ /* <= */
void OPPROTO op_eval_cmp_slteq(void)
{
***************
*** 804,807 ****
--- 807,811 ----
}
+ /* << */
void OPPROTO op_eval_cmp_ult(void)
{
***************
*** 809,812 ****
--- 813,817 ----
}
+ /* <<= */
void OPPROTO op_eval_cmp_ulteq(void)
{
***************
*** 814,821 ****
}
void OPPROTO op_eval_cmp_sv(void)
{
if ((((int32_t)T0 < 0) != ((int32_t)T1 < 0)) &&
! (((int32_t)T1 < 0) == ((int32_t)(T0 - T1) < 0)))
T2 = 1;
else
--- 819,827 ----
}
+ /* sv */
void OPPROTO op_eval_cmp_sv(void)
{
if ((((int32_t)T0 < 0) != ((int32_t)T1 < 0)) &&
! (((int32_t)T0 < 0) != ((int32_t)(T0 - T1) < 0)))
T2 = 1;
else
***************
*** 825,828 ****
--- 831,835 ----
}
+ /* od */
void OPPROTO op_eval_cmp_od(void)
{
***************
*** 830,878 ****
}
- /* f = 1 */
-
- void OPPROTO op_eval_cmp_tr(void)
- {
- T2 = 1;
- }
-
- void OPPROTO op_eval_cmp_neq(void)
- {
- T2 = (T0 != T1);
- }
-
- void OPPROTO op_eval_cmp_sgteq(void)
- {
- T2 = ((int32_t)T0 >= (int32_t)T1);
- }
! void OPPROTO op_eval_cmp_sgt(void)
! {
! T2 = ((int32_t)T0 > (int32_t)T1);
! }
!
! void OPPROTO op_eval_cmp_ugteq(void)
! {
! T2 = (T0 > T1);
! }
!
! void OPPROTO op_eval_cmp_ugt(void)
! {
! T2 = (T0 >= T1);
! }
!
! void OPPROTO op_eval_cmp_nsv(void)
! {
! if ((((int32_t)T0 < 0) != ((int32_t)T1 < 0)) &&
! (((int32_t)T1 < 0) == ((int32_t)(T0 - T1) < 0)))
! T2 = 0;
! else
! T2 = 1;
! }
!
! void OPPROTO op_eval_cmp_ev(void)
! {
! T2 = !((T0 - T1) & 1);
! }
void OPPROTO op_jmp_im(void)
--- 837,842 ----
}
! /* ------ */
void OPPROTO op_jmp_im(void)
***************
*** 888,889 ****
--- 852,860 ----
FORCE_RET();
}
+
+ void OPPROTO op_jz_T2_label(void)
+ {
+ if (!T2)
+ GOTO_LABEL_PARAM(1);
+ FORCE_RET();
+ }
|