Revision c36bbb28 target-mips/op_helper.c

b/target-mips/op_helper.c
276 276
#endif
277 277

  
278 278
#ifndef CONFIG_USER_ONLY
279

  
280
static inline target_phys_addr_t do_translate_address(target_ulong address, int rw)
281
{
282
    target_phys_addr_t lladdr;
283

  
284
    lladdr = cpu_mips_translate_address(env, address, rw);
285

  
286
    if (lladdr == -1LL) {
287
        cpu_loop_exit();
288
    } else {
289
        return lladdr;
290
    }
291
}
292

  
279 293
#define HELPER_LD_ATOMIC(name, insn)                                          \
280 294
target_ulong helper_##name(target_ulong arg, int mem_idx)                     \
281 295
{                                                                             \
282
    env->lladdr = do_translate_address(env, arg, 0);                          \
296
    env->lladdr = do_translate_address(arg, 0);                               \
283 297
    env->llval = do_##insn(arg, mem_idx);                                     \
284 298
    return env->llval;                                                        \
285 299
}
......
298 312
        env->CP0_BadVAddr = arg2;                                             \
299 313
        helper_raise_exception(EXCP_AdES);                                    \
300 314
    }                                                                         \
301
    if (do_translate_address(env, arg2, 1) == env->lladdr) {                  \
315
    if (do_translate_address(arg2, 1) == env->lladdr) {                       \
302 316
        tmp = do_##ld_insn(arg2, mem_idx);                                    \
303 317
        if (tmp == env->llval) {                                              \
304 318
            do_##st_insn(arg2, arg1, mem_idx);                                \

Also available in: Unified diff