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:
		
							parent
							
								
									724c689357
								
							
						
					
					
						commit
						c5883be235
					
				@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user