Update of /cvsroot/hppaqemu/hppaqemu/target-hppa
In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv32004
Modified Files:
translate.c
Log Message:
Fix branch displacement calculation for COMI?B[TF] and ADDI?B[TF].
Index: translate.c
===================================================================
RCS file: /cvsroot/hppaqemu/hppaqemu/target-hppa/translate.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- translate.c 21 Mar 2007 20:20:00 -0000 1.36
+++ translate.c 21 Mar 2007 23:07:45 -0000 1.37
@@ -96,6 +96,10 @@
return val;
}
+static uint32_t assemble_12(uint32_t x, uint32_t y) {
+ return (y << 11) | ((x & 1) << 10) | ((x >> 1) & ~(~0 << 9));
+}
+
static GenOpFunc *gen_op_movl_TN_reg[3][32] =
{
{
@@ -1783,10 +1787,10 @@
}
}
c = field(insn, 13, 3);
- w1 = field_signext(insn, 2, 11);
+ w1 = field(insn, 2, 11);
n = field(insn, 1, 1);
w = field(insn, 0, 1);
- disp = (((w1 << 1) | w) << 2);
+ disp = signext(assemble_12(w1, w), 12) << 2;
gen_cond_sub[c]();
gen_branch_cond(dc, (long)dc->tb, disp, n, 0);
@@ -1874,10 +1878,10 @@
}
}
c = field(insn, 13, 3);
- w1 = field_signext(insn, 2, 11);
+ w1 = field(insn, 2, 11);
n = field(insn, 1, 1);
w = field(insn, 0, 1);
- disp = (((w1 << 1) | w) << 2);
+ disp = signext(assemble_12(w1, w), 12) << 2;
gen_cond_add[c]();
gen_branch_cond(dc, (long)dc->tb, disp, n, 0);
@@ -1919,6 +1923,7 @@
case 0x31: /* BB */
case 0x32: /* MOVB */
case 0x33: /* MOVIB */
+ /* disp = signext(assemble_12(w1, w), 12) << 2; */
/* FIXME */
dc->is_br = 1;
break;
|