Commit a15167446259805dcd7e639261b2413e07654040
1 parent
577d5e7f
target-alpha: fix bug: integer conditional branch offset is 21 bits wide.
Signed-off-by: Tristan Gingold <gingold@adacore.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6924 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
10 additions
and
10 deletions
target-alpha/translate.c
| @@ -290,7 +290,7 @@ static always_inline void gen_store_mem (DisasContext *ctx, | @@ -290,7 +290,7 @@ static always_inline void gen_store_mem (DisasContext *ctx, | ||
| 290 | 290 | ||
| 291 | static always_inline void gen_bcond (DisasContext *ctx, | 291 | static always_inline void gen_bcond (DisasContext *ctx, |
| 292 | TCGCond cond, | 292 | TCGCond cond, |
| 293 | - int ra, int32_t disp16, int mask) | 293 | + int ra, int32_t disp, int mask) |
| 294 | { | 294 | { |
| 295 | int l1, l2; | 295 | int l1, l2; |
| 296 | 296 | ||
| @@ -313,7 +313,7 @@ static always_inline void gen_bcond (DisasContext *ctx, | @@ -313,7 +313,7 @@ static always_inline void gen_bcond (DisasContext *ctx, | ||
| 313 | tcg_gen_movi_i64(cpu_pc, ctx->pc); | 313 | tcg_gen_movi_i64(cpu_pc, ctx->pc); |
| 314 | tcg_gen_br(l2); | 314 | tcg_gen_br(l2); |
| 315 | gen_set_label(l1); | 315 | gen_set_label(l1); |
| 316 | - tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp16 << 2)); | 316 | + tcg_gen_movi_i64(cpu_pc, ctx->pc + (int64_t)(disp << 2)); |
| 317 | gen_set_label(l2); | 317 | gen_set_label(l2); |
| 318 | } | 318 | } |
| 319 | 319 | ||
| @@ -2285,42 +2285,42 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) | @@ -2285,42 +2285,42 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn) | ||
| 2285 | break; | 2285 | break; |
| 2286 | case 0x38: | 2286 | case 0x38: |
| 2287 | /* BLBC */ | 2287 | /* BLBC */ |
| 2288 | - gen_bcond(ctx, TCG_COND_EQ, ra, disp16, 1); | 2288 | + gen_bcond(ctx, TCG_COND_EQ, ra, disp21, 1); |
| 2289 | ret = 1; | 2289 | ret = 1; |
| 2290 | break; | 2290 | break; |
| 2291 | case 0x39: | 2291 | case 0x39: |
| 2292 | /* BEQ */ | 2292 | /* BEQ */ |
| 2293 | - gen_bcond(ctx, TCG_COND_EQ, ra, disp16, 0); | 2293 | + gen_bcond(ctx, TCG_COND_EQ, ra, disp21, 0); |
| 2294 | ret = 1; | 2294 | ret = 1; |
| 2295 | break; | 2295 | break; |
| 2296 | case 0x3A: | 2296 | case 0x3A: |
| 2297 | /* BLT */ | 2297 | /* BLT */ |
| 2298 | - gen_bcond(ctx, TCG_COND_LT, ra, disp16, 0); | 2298 | + gen_bcond(ctx, TCG_COND_LT, ra, disp21, 0); |
| 2299 | ret = 1; | 2299 | ret = 1; |
| 2300 | break; | 2300 | break; |
| 2301 | case 0x3B: | 2301 | case 0x3B: |
| 2302 | /* BLE */ | 2302 | /* BLE */ |
| 2303 | - gen_bcond(ctx, TCG_COND_LE, ra, disp16, 0); | 2303 | + gen_bcond(ctx, TCG_COND_LE, ra, disp21, 0); |
| 2304 | ret = 1; | 2304 | ret = 1; |
| 2305 | break; | 2305 | break; |
| 2306 | case 0x3C: | 2306 | case 0x3C: |
| 2307 | /* BLBS */ | 2307 | /* BLBS */ |
| 2308 | - gen_bcond(ctx, TCG_COND_NE, ra, disp16, 1); | 2308 | + gen_bcond(ctx, TCG_COND_NE, ra, disp21, 1); |
| 2309 | ret = 1; | 2309 | ret = 1; |
| 2310 | break; | 2310 | break; |
| 2311 | case 0x3D: | 2311 | case 0x3D: |
| 2312 | /* BNE */ | 2312 | /* BNE */ |
| 2313 | - gen_bcond(ctx, TCG_COND_NE, ra, disp16, 0); | 2313 | + gen_bcond(ctx, TCG_COND_NE, ra, disp21, 0); |
| 2314 | ret = 1; | 2314 | ret = 1; |
| 2315 | break; | 2315 | break; |
| 2316 | case 0x3E: | 2316 | case 0x3E: |
| 2317 | /* BGE */ | 2317 | /* BGE */ |
| 2318 | - gen_bcond(ctx, TCG_COND_GE, ra, disp16, 0); | 2318 | + gen_bcond(ctx, TCG_COND_GE, ra, disp21, 0); |
| 2319 | ret = 1; | 2319 | ret = 1; |
| 2320 | break; | 2320 | break; |
| 2321 | case 0x3F: | 2321 | case 0x3F: |
| 2322 | /* BGT */ | 2322 | /* BGT */ |
| 2323 | - gen_bcond(ctx, TCG_COND_GT, ra, disp16, 0); | 2323 | + gen_bcond(ctx, TCG_COND_GT, ra, disp21, 0); |
| 2324 | ret = 1; | 2324 | ret = 1; |
| 2325 | break; | 2325 | break; |
| 2326 | invalid_opc: | 2326 | invalid_opc: |