]> git.proxmox.com Git - mirror_qemu.git/commitdiff
sparc branch fix (Blue Swirl)
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 21 Jun 2006 18:26:15 +0000 (18:26 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 21 Jun 2006 18:26:15 +0000 (18:26 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1999 c046a42c-6fe2-441c-8c8c-71466251a162

target-sparc/translate.c

index 22d3ebcb2de4c4180c71b2178e35ce96239a8d6f..c19797e3bda4132228a685ea60f6b1a42ffe0ba6 100644 (file)
@@ -956,8 +956,8 @@ static void disas_sparc_insn(DisasContext * dc)
                    int cc;
 
                    target = GET_FIELD_SP(insn, 0, 18);
-                   target <<= 2;
                    target = sign_extend(target, 18);
+                   target <<= 2;
                    cc = GET_FIELD_SP(insn, 20, 21);
                    if (cc == 0)
                        do_branch(dc, target, insn, 0);
@@ -971,8 +971,8 @@ static void disas_sparc_insn(DisasContext * dc)
                {
                    target = GET_FIELD_SP(insn, 0, 13) | 
                        (GET_FIELD_SP(insn, 20, 21) >> 7);
-                   target <<= 2;
                    target = sign_extend(target, 16);
+                   target <<= 2;
                    rs1 = GET_FIELD(insn, 13, 17);
                    gen_movl_reg_T0(rs1);
                    do_branch_reg(dc, target, insn);
@@ -986,8 +986,8 @@ static void disas_sparc_insn(DisasContext * dc)
                    gen_op_trap_ifnofpu();
 #endif
                    target = GET_FIELD_SP(insn, 0, 18);
-                   target <<= 2;
                    target = sign_extend(target, 19);
+                   target <<= 2;
                    do_fbranch(dc, target, insn, cc);
                    goto jmp_insn;
                }
@@ -995,8 +995,8 @@ static void disas_sparc_insn(DisasContext * dc)
            case 0x2:           /* BN+x */
                {
                    target = GET_FIELD(insn, 10, 31);
-                   target <<= 2;
                    target = sign_extend(target, 22);
+                   target <<= 2;
                    do_branch(dc, target, insn, 0);
                    goto jmp_insn;
                }
@@ -1007,8 +1007,8 @@ static void disas_sparc_insn(DisasContext * dc)
                    gen_op_trap_ifnofpu();
 #endif
                    target = GET_FIELD(insn, 10, 31);
-                   target <<= 2;
                    target = sign_extend(target, 22);
+                   target <<= 2;
                    do_fbranch(dc, target, insn, 0);
                    goto jmp_insn;
                }