Revision b0109805 target-arm/op_helper.c

b/target-arm/op_helper.c
459 459
{
460 460
    cpsr_write(env, val, mask);
461 461
}
462

  
463
/* Access to user mode registers from privileged modes.  */
464
uint32_t HELPER(get_user_reg)(uint32_t regno)
465
{
466
    uint32_t val;
467

  
468
    if (regno == 13) {
469
        val = env->banked_r13[0];
470
    } else if (regno == 14) {
471
        val = env->banked_r14[0];
472
    } else if (regno >= 8
473
               && (env->uncached_cpsr & 0x1f) == ARM_CPU_MODE_FIQ) {
474
        val = env->usr_regs[regno - 8];
475
    } else {
476
        val = env->regs[regno];
477
    }
478
    return val;
479
}
480

  
481
void HELPER(set_user_reg)(uint32_t regno, uint32_t val)
482
{
483
    if (regno == 13) {
484
        env->banked_r13[0] = val;
485
    } else if (regno == 14) {
486
        env->banked_r14[0] = val;
487
    } else if (regno >= 8
488
               && (env->uncached_cpsr & 0x1f) == ARM_CPU_MODE_FIQ) {
489
        env->usr_regs[regno - 8] = val;
490
    } else {
491
        env->regs[regno] = val;
492
    }
493
}
494

  

Also available in: Unified diff