Commit ee6c0b51e97c8bcad32181f42e63765b18c30354
1 parent
48dc41eb
sparc branch fix (Blue Swirl)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1999 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
5 additions
and
5 deletions
target-sparc/translate.c
| ... | ... | @@ -956,8 +956,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 956 | 956 | int cc; |
| 957 | 957 | |
| 958 | 958 | target = GET_FIELD_SP(insn, 0, 18); |
| 959 | - target <<= 2; | |
| 960 | 959 | target = sign_extend(target, 18); |
| 960 | + target <<= 2; | |
| 961 | 961 | cc = GET_FIELD_SP(insn, 20, 21); |
| 962 | 962 | if (cc == 0) |
| 963 | 963 | do_branch(dc, target, insn, 0); |
| ... | ... | @@ -971,8 +971,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 971 | 971 | { |
| 972 | 972 | target = GET_FIELD_SP(insn, 0, 13) | |
| 973 | 973 | (GET_FIELD_SP(insn, 20, 21) >> 7); |
| 974 | - target <<= 2; | |
| 975 | 974 | target = sign_extend(target, 16); |
| 975 | + target <<= 2; | |
| 976 | 976 | rs1 = GET_FIELD(insn, 13, 17); |
| 977 | 977 | gen_movl_reg_T0(rs1); |
| 978 | 978 | do_branch_reg(dc, target, insn); |
| ... | ... | @@ -986,8 +986,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 986 | 986 | gen_op_trap_ifnofpu(); |
| 987 | 987 | #endif |
| 988 | 988 | target = GET_FIELD_SP(insn, 0, 18); |
| 989 | - target <<= 2; | |
| 990 | 989 | target = sign_extend(target, 19); |
| 990 | + target <<= 2; | |
| 991 | 991 | do_fbranch(dc, target, insn, cc); |
| 992 | 992 | goto jmp_insn; |
| 993 | 993 | } |
| ... | ... | @@ -995,8 +995,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 995 | 995 | case 0x2: /* BN+x */ |
| 996 | 996 | { |
| 997 | 997 | target = GET_FIELD(insn, 10, 31); |
| 998 | - target <<= 2; | |
| 999 | 998 | target = sign_extend(target, 22); |
| 999 | + target <<= 2; | |
| 1000 | 1000 | do_branch(dc, target, insn, 0); |
| 1001 | 1001 | goto jmp_insn; |
| 1002 | 1002 | } |
| ... | ... | @@ -1007,8 +1007,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 1007 | 1007 | gen_op_trap_ifnofpu(); |
| 1008 | 1008 | #endif |
| 1009 | 1009 | target = GET_FIELD(insn, 10, 31); |
| 1010 | - target <<= 2; | |
| 1011 | 1010 | target = sign_extend(target, 22); |
| 1011 | + target <<= 2; | |
| 1012 | 1012 | do_fbranch(dc, target, insn, 0); |
| 1013 | 1013 | goto jmp_insn; |
| 1014 | 1014 | } | ... | ... |