Revision d8fd2954 target-arm/cpu.h

b/target-arm/cpu.h
216 216
        uint32_t cregs[16];
217 217
    } iwmmxt;
218 218

  
219
    /* For mixed endian mode.  */
220
    bool bswap_code;
221

  
219 222
#if defined(CONFIG_USER_ONLY)
220 223
    /* For usermode syscall translation.  */
221 224
    int eabi;
......
491 494
#define ARM_TBFLAG_VFPEN_MASK       (1 << ARM_TBFLAG_VFPEN_SHIFT)
492 495
#define ARM_TBFLAG_CONDEXEC_SHIFT   8
493 496
#define ARM_TBFLAG_CONDEXEC_MASK    (0xff << ARM_TBFLAG_CONDEXEC_SHIFT)
494
/* Bits 31..16 are currently unused. */
497
#define ARM_TBFLAG_BSWAP_CODE_SHIFT 16
498
#define ARM_TBFLAG_BSWAP_CODE_MASK  (1 << ARM_TBFLAG_BSWAP_CODE_SHIFT)
499
/* Bits 31..17 are currently unused. */
495 500

  
496 501
/* some convenience accessor macros */
497 502
#define ARM_TBFLAG_THUMB(F) \
......
506 511
    (((F) & ARM_TBFLAG_VFPEN_MASK) >> ARM_TBFLAG_VFPEN_SHIFT)
507 512
#define ARM_TBFLAG_CONDEXEC(F) \
508 513
    (((F) & ARM_TBFLAG_CONDEXEC_MASK) >> ARM_TBFLAG_CONDEXEC_SHIFT)
514
#define ARM_TBFLAG_BSWAP_CODE(F) \
515
    (((F) & ARM_TBFLAG_BSWAP_CODE_MASK) >> ARM_TBFLAG_BSWAP_CODE_SHIFT)
509 516

  
510 517
static inline void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
511 518
                                        target_ulong *cs_base, int *flags)
......
516 523
    *flags = (env->thumb << ARM_TBFLAG_THUMB_SHIFT)
517 524
        | (env->vfp.vec_len << ARM_TBFLAG_VECLEN_SHIFT)
518 525
        | (env->vfp.vec_stride << ARM_TBFLAG_VECSTRIDE_SHIFT)
519
        | (env->condexec_bits << ARM_TBFLAG_CONDEXEC_SHIFT);
526
        | (env->condexec_bits << ARM_TBFLAG_CONDEXEC_SHIFT)
527
        | (env->bswap_code << ARM_TBFLAG_BSWAP_CODE_SHIFT);
520 528
    if (arm_feature(env, ARM_FEATURE_M)) {
521 529
        privmode = !((env->v7m.exception == 0) && (env->v7m.control & 1));
522 530
    } else {
......
543 551
    env->regs[15] = tb->pc;
544 552
}
545 553

  
554
/* Load an instruction and return it in the standard little-endian order */
555
static inline uint32_t arm_ldl_code(uint32_t addr, bool do_swap)
556
{
557
    uint32_t insn = ldl_code(addr);
558
    if (do_swap) {
559
        return bswap32(insn);
560
    }
561
    return insn;
562
}
563

  
564
/* Ditto, for a halfword (Thumb) instruction */
565
static inline uint16_t arm_lduw_code(uint32_t addr, bool do_swap)
566
{
567
    uint16_t insn = lduw_code(addr);
568
    if (do_swap) {
569
        return bswap16(insn);
570
    }
571
    return insn;
572
}
573

  
546 574
#endif

Also available in: Unified diff