From: Stuart B. <zu...@us...> - 2007-03-13 00:57:49
|
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(); + } |