arm64eb: add support for ARM64 big endian.
This commit is contained in:
@@ -3017,4 +3017,40 @@
|
||||
#define xpsr_write xpsr_write_aarch64
|
||||
#define xscale_cpar_write xscale_cpar_write_aarch64
|
||||
#define xscale_cp_reginfo xscale_cp_reginfo_aarch64
|
||||
#define ARM64_REGS_STORAGE_SIZE ARM64_REGS_STORAGE_SIZE_aarch64
|
||||
#define arm64_release arm64_release_aarch64
|
||||
#define arm64_reg_reset arm64_reg_reset_aarch64
|
||||
#define arm64_reg_read arm64_reg_read_aarch64
|
||||
#define arm64_reg_write arm64_reg_write_aarch64
|
||||
#define gen_a64_set_pc_im gen_a64_set_pc_im_aarch64
|
||||
#define aarch64_cpu_register_types aarch64_cpu_register_types_aarch64
|
||||
#define helper_udiv64 helper_udiv64_aarch64
|
||||
#define helper_sdiv64 helper_sdiv64_aarch64
|
||||
#define helper_cls64 helper_cls64_aarch64
|
||||
#define helper_cls32 helper_cls32_aarch64
|
||||
#define helper_rbit64 helper_rbit64_aarch64
|
||||
#define helper_vfp_cmps_a64 helper_vfp_cmps_a64_aarch64
|
||||
#define helper_vfp_cmpes_a64 helper_vfp_cmpes_a64_aarch64
|
||||
#define helper_vfp_cmpd_a64 helper_vfp_cmpd_a64_aarch64
|
||||
#define helper_vfp_cmped_a64 helper_vfp_cmped_a64_aarch64
|
||||
#define helper_vfp_mulxs helper_vfp_mulxs_aarch64
|
||||
#define helper_vfp_mulxd helper_vfp_mulxd_aarch64
|
||||
#define helper_simd_tbl helper_simd_tbl_aarch64
|
||||
#define helper_neon_ceq_f64 helper_neon_ceq_f64_aarch64
|
||||
#define helper_neon_cge_f64 helper_neon_cge_f64_aarch64
|
||||
#define helper_neon_cgt_f64 helper_neon_cgt_f64_aarch64
|
||||
#define helper_recpsf_f32 helper_recpsf_f32_aarch64
|
||||
#define helper_recpsf_f64 helper_recpsf_f64_aarch64
|
||||
#define helper_rsqrtsf_f32 helper_rsqrtsf_f32_aarch64
|
||||
#define helper_rsqrtsf_f64 helper_rsqrtsf_f64_aarch64
|
||||
#define helper_neon_addlp_s8 helper_neon_addlp_s8_aarch64
|
||||
#define helper_neon_addlp_u8 helper_neon_addlp_u8_aarch64
|
||||
#define helper_neon_addlp_s16 helper_neon_addlp_s16_aarch64
|
||||
#define helper_neon_addlp_u16 helper_neon_addlp_u16_aarch64
|
||||
#define helper_frecpx_f32 helper_frecpx_f32_aarch64
|
||||
#define helper_frecpx_f64 helper_frecpx_f64_aarch64
|
||||
#define helper_fcvtx_f64_to_f32 helper_fcvtx_f64_to_f32_aarch64
|
||||
#define helper_crc32_64 helper_crc32_64_aarch64
|
||||
#define helper_crc32c_64 helper_crc32c_64_aarch64
|
||||
#define aarch64_cpu_do_interrupt aarch64_cpu_do_interrupt_aarch64
|
||||
#endif
|
||||
|
||||
3056
qemu/aarch64eb.h
Normal file
3056
qemu/aarch64eb.h
Normal file
File diff suppressed because it is too large
Load Diff
7
qemu/configure
vendored
7
qemu/configure
vendored
@@ -351,7 +351,7 @@ case "$cpu" in
|
||||
armv*b|armv*l|arm)
|
||||
cpu="arm"
|
||||
;;
|
||||
aarch64)
|
||||
aarch64|aarch64eb)
|
||||
cpu="aarch64"
|
||||
;;
|
||||
mips*)
|
||||
@@ -1237,7 +1237,7 @@ target_name=`echo $target | cut -d '-' -f 1`
|
||||
target_bigendian="no"
|
||||
|
||||
case "$target_name" in
|
||||
armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
|
||||
aarch64eb|armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
|
||||
target_bigendian=yes
|
||||
;;
|
||||
esac
|
||||
@@ -1272,8 +1272,9 @@ case "$target_name" in
|
||||
TARGET_ARCH=arm
|
||||
bflt="yes"
|
||||
;;
|
||||
aarch64)
|
||||
aarch64|aarch64eb)
|
||||
TARGET_BASE_ARCH=arm
|
||||
TARGET_ARCH=aarch64
|
||||
bflt="yes"
|
||||
;;
|
||||
cris)
|
||||
|
||||
0
qemu/default-configs/aarch64eb-softmmu.mak
Normal file
0
qemu/default-configs/aarch64eb-softmmu.mak
Normal file
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
for d in x86_64 arm armeb m68k aarch64 mips mipsel mips64 mips64el sparc sparc64; do
|
||||
for d in x86_64 arm armeb m68k aarch64 aarch64eb mips mipsel mips64 mips64el sparc sparc64; do
|
||||
python header_gen.py $d > $d.h
|
||||
done
|
||||
|
||||
@@ -3029,6 +3029,46 @@ arm_symbols = (
|
||||
'ARM_REGS_STORAGE_SIZE',
|
||||
)
|
||||
|
||||
aarch64_symbols = (
|
||||
'ARM64_REGS_STORAGE_SIZE',
|
||||
'arm64_release',
|
||||
'arm64_reg_reset',
|
||||
'arm64_reg_read',
|
||||
'arm64_reg_write',
|
||||
'gen_a64_set_pc_im',
|
||||
'aarch64_cpu_register_types',
|
||||
'helper_udiv64',
|
||||
'helper_sdiv64',
|
||||
'helper_cls64',
|
||||
'helper_cls32',
|
||||
'helper_rbit64',
|
||||
'helper_vfp_cmps_a64',
|
||||
'helper_vfp_cmpes_a64',
|
||||
'helper_vfp_cmpd_a64',
|
||||
'helper_vfp_cmped_a64',
|
||||
'helper_vfp_mulxs',
|
||||
'helper_vfp_mulxd',
|
||||
'helper_simd_tbl',
|
||||
'helper_neon_ceq_f64',
|
||||
'helper_neon_cge_f64',
|
||||
'helper_neon_cgt_f64',
|
||||
'helper_recpsf_f32',
|
||||
'helper_recpsf_f64',
|
||||
'helper_rsqrtsf_f32',
|
||||
'helper_rsqrtsf_f64',
|
||||
'helper_neon_addlp_s8',
|
||||
'helper_neon_addlp_u8',
|
||||
'helper_neon_addlp_s16',
|
||||
'helper_neon_addlp_u16',
|
||||
'helper_frecpx_f32',
|
||||
'helper_frecpx_f64',
|
||||
'helper_fcvtx_f64_to_f32',
|
||||
'helper_crc32_64',
|
||||
'helper_crc32c_64',
|
||||
'aarch64_cpu_do_interrupt',
|
||||
|
||||
)
|
||||
|
||||
mips_symbols = (
|
||||
'cpu_mips_exec',
|
||||
'cpu_mips_get_random',
|
||||
@@ -4029,6 +4069,10 @@ if __name__ == '__main__':
|
||||
for s in arm_symbols:
|
||||
print("#define %s %s_%s" %(s, s, arch))
|
||||
|
||||
if 'aarch64' in arch:
|
||||
for s in aarch64_symbols:
|
||||
print("#define %s %s_%s" %(s, s, arch))
|
||||
|
||||
if 'mips' in arch:
|
||||
for s in mips_symbols:
|
||||
print("#define %s %s_%s" %(s, s, arch))
|
||||
|
||||
@@ -19,9 +19,11 @@ void armeb_uc_init(struct uc_struct* uc);
|
||||
|
||||
DEFAULT_VISIBILITY
|
||||
void arm64_uc_init(struct uc_struct* uc);
|
||||
void arm64eb_uc_init(struct uc_struct* uc);
|
||||
|
||||
extern const int ARM_REGS_STORAGE_SIZE_arm;
|
||||
extern const int ARM_REGS_STORAGE_SIZE_armeb;
|
||||
extern const int ARM64_REGS_STORAGE_SIZE;
|
||||
extern const int ARM64_REGS_STORAGE_SIZE_aarch64;
|
||||
extern const int ARM64_REGS_STORAGE_SIZE_aarch64eb;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -155,7 +155,11 @@ int arm64_reg_write(struct uc_struct *uc, unsigned int *regs, void* const* vals,
|
||||
}
|
||||
|
||||
DEFAULT_VISIBILITY
|
||||
#ifdef TARGET_WORDS_BIGENDIAN
|
||||
void arm64eb_uc_init(struct uc_struct* uc)
|
||||
#else
|
||||
void arm64_uc_init(struct uc_struct* uc)
|
||||
#endif
|
||||
{
|
||||
register_accel_types(uc);
|
||||
arm_cpu_register_types(uc);
|
||||
|
||||
Reference in New Issue
Block a user