ARM CP15 tls fix

Fix temporary handling in cp15 tls register load/store.

Signed-off-by: Paul Brook <paul@codesourcery.com>
This commit is contained in:
Paul Brook 2010-02-23 14:45:16 +00:00
parent 724c689357
commit c5883be235
1 changed files with 7 additions and 9 deletions

View File

@ -2469,19 +2469,17 @@ static int cp15_tls_load_store(CPUState *env, DisasContext *s, uint32_t insn, ui
return 0; return 0;
if (insn & ARM_CP_RW_BIT) { if (insn & ARM_CP_RW_BIT) {
tmp = new_tmp();
switch (op) { switch (op) {
case 2: case 2:
tcg_gen_ld_i32(tmp, cpu_env, offsetof(CPUARMState, cp15.c13_tls1)); tmp = load_cpu_field(cp15.c13_tls1);
break; break;
case 3: case 3:
tcg_gen_ld_i32(tmp, cpu_env, offsetof(CPUARMState, cp15.c13_tls2)); tmp = load_cpu_field(cp15.c13_tls2);
break; break;
case 4: case 4:
tcg_gen_ld_i32(tmp, cpu_env, offsetof(CPUARMState, cp15.c13_tls3)); tmp = load_cpu_field(cp15.c13_tls3);
break; break;
default: default:
dead_tmp(tmp);
return 0; return 0;
} }
store_reg(s, rd, tmp); store_reg(s, rd, tmp);
@ -2490,18 +2488,18 @@ static int cp15_tls_load_store(CPUState *env, DisasContext *s, uint32_t insn, ui
tmp = load_reg(s, rd); tmp = load_reg(s, rd);
switch (op) { switch (op) {
case 2: case 2:
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUARMState, cp15.c13_tls1)); store_cpu_field(tmp, cp15.c13_tls1);
break; break;
case 3: case 3:
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUARMState, cp15.c13_tls2)); store_cpu_field(tmp, cp15.c13_tls2);
break; break;
case 4: case 4:
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUARMState, cp15.c13_tls3)); store_cpu_field(tmp, cp15.c13_tls3);
break; break;
default: default:
dead_tmp(tmp);
return 0; return 0;
} }
dead_tmp(tmp);
} }
return 1; return 1;
} }