Commit 5b2808bfc06279db6a56942f3f6119c23ae07f42
1 parent
50cfa95c
Fix MIPS MT GPR accesses, thanks Stefan Weil.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4307 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
10 additions
and
10 deletions
target-mips/op.c
@@ -2300,7 +2300,7 @@ void op_mftgpr(void) | @@ -2300,7 +2300,7 @@ void op_mftgpr(void) | ||
2300 | { | 2300 | { |
2301 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2301 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2302 | 2302 | ||
2303 | - T0 = env->gpr[PARAM1][other_tc]; | 2303 | + T0 = env->gpr[other_tc][PARAM1]; |
2304 | FORCE_RET(); | 2304 | FORCE_RET(); |
2305 | } | 2305 | } |
2306 | 2306 | ||
@@ -2308,7 +2308,7 @@ void op_mftlo(void) | @@ -2308,7 +2308,7 @@ void op_mftlo(void) | ||
2308 | { | 2308 | { |
2309 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2309 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2310 | 2310 | ||
2311 | - T0 = env->LO[PARAM1][other_tc]; | 2311 | + T0 = env->LO[other_tc][PARAM1]; |
2312 | FORCE_RET(); | 2312 | FORCE_RET(); |
2313 | } | 2313 | } |
2314 | 2314 | ||
@@ -2316,7 +2316,7 @@ void op_mfthi(void) | @@ -2316,7 +2316,7 @@ void op_mfthi(void) | ||
2316 | { | 2316 | { |
2317 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2317 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2318 | 2318 | ||
2319 | - T0 = env->HI[PARAM1][other_tc]; | 2319 | + T0 = env->HI[other_tc][PARAM1]; |
2320 | FORCE_RET(); | 2320 | FORCE_RET(); |
2321 | } | 2321 | } |
2322 | 2322 | ||
@@ -2324,7 +2324,7 @@ void op_mftacx(void) | @@ -2324,7 +2324,7 @@ void op_mftacx(void) | ||
2324 | { | 2324 | { |
2325 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2325 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2326 | 2326 | ||
2327 | - T0 = env->ACX[PARAM1][other_tc]; | 2327 | + T0 = env->ACX[other_tc][PARAM1]; |
2328 | FORCE_RET(); | 2328 | FORCE_RET(); |
2329 | } | 2329 | } |
2330 | 2330 | ||
@@ -2340,7 +2340,7 @@ void op_mttgpr(void) | @@ -2340,7 +2340,7 @@ void op_mttgpr(void) | ||
2340 | { | 2340 | { |
2341 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2341 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2342 | 2342 | ||
2343 | - T0 = env->gpr[PARAM1][other_tc]; | 2343 | + T0 = env->gpr[other_tc][PARAM1]; |
2344 | FORCE_RET(); | 2344 | FORCE_RET(); |
2345 | } | 2345 | } |
2346 | 2346 | ||
@@ -2348,7 +2348,7 @@ void op_mttlo(void) | @@ -2348,7 +2348,7 @@ void op_mttlo(void) | ||
2348 | { | 2348 | { |
2349 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2349 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2350 | 2350 | ||
2351 | - T0 = env->LO[PARAM1][other_tc]; | 2351 | + T0 = env->LO[other_tc][PARAM1]; |
2352 | FORCE_RET(); | 2352 | FORCE_RET(); |
2353 | } | 2353 | } |
2354 | 2354 | ||
@@ -2356,7 +2356,7 @@ void op_mtthi(void) | @@ -2356,7 +2356,7 @@ void op_mtthi(void) | ||
2356 | { | 2356 | { |
2357 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2357 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2358 | 2358 | ||
2359 | - T0 = env->HI[PARAM1][other_tc]; | 2359 | + T0 = env->HI[other_tc][PARAM1]; |
2360 | FORCE_RET(); | 2360 | FORCE_RET(); |
2361 | } | 2361 | } |
2362 | 2362 | ||
@@ -2364,7 +2364,7 @@ void op_mttacx(void) | @@ -2364,7 +2364,7 @@ void op_mttacx(void) | ||
2364 | { | 2364 | { |
2365 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 2365 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
2366 | 2366 | ||
2367 | - T0 = env->ACX[PARAM1][other_tc]; | 2367 | + T0 = env->ACX[other_tc][PARAM1]; |
2368 | FORCE_RET(); | 2368 | FORCE_RET(); |
2369 | } | 2369 | } |
2370 | 2370 |
target-mips/op_template.c
@@ -52,13 +52,13 @@ void glue(op_load_gpr_T2_gpr, REG) (void) | @@ -52,13 +52,13 @@ void glue(op_load_gpr_T2_gpr, REG) (void) | ||
52 | 52 | ||
53 | void glue(op_load_srsgpr_T0_gpr, REG) (void) | 53 | void glue(op_load_srsgpr_T0_gpr, REG) (void) |
54 | { | 54 | { |
55 | - T0 = env->gpr[REG][(env->CP0_SRSCtl >> CP0SRSCtl_PSS) & 0xf]; | 55 | + T0 = env->gpr[(env->CP0_SRSCtl >> CP0SRSCtl_PSS) & 0xf][REG]; |
56 | FORCE_RET(); | 56 | FORCE_RET(); |
57 | } | 57 | } |
58 | 58 | ||
59 | void glue(op_store_T0_srsgpr_gpr, REG) (void) | 59 | void glue(op_store_T0_srsgpr_gpr, REG) (void) |
60 | { | 60 | { |
61 | - env->gpr[REG][(env->CP0_SRSCtl >> CP0SRSCtl_PSS) & 0xf] = T0; | 61 | + env->gpr[(env->CP0_SRSCtl >> CP0SRSCtl_PSS) & 0xf][REG] = T0; |
62 | FORCE_RET(); | 62 | FORCE_RET(); |
63 | } | 63 | } |
64 | #endif | 64 | #endif |