arm64eb: add support for ARM64 big endian.

This commit is contained in:
zhangwm
2017-04-24 23:25:30 +08:00
parent 513075e061
commit 2e973a13f0
15 changed files with 3331 additions and 11 deletions

View File

@@ -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

File diff suppressed because it is too large Load Diff

7
qemu/configure vendored
View File

@@ -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)

View 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

View File

@@ -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))

View File

@@ -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

View File

@@ -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);