Extend arm_feature_set struct to provide more bits
gas/ChangeLog: 2015-03-24 Terry Guo <terry.guo@arm.com> * config/tc-arm.c (no_cpu_selected): Use new macro to compare features. (parse_psr): Likewise. (do_t_mrs): Likewise. (do_t_msr): Likewise. (static const arm_feature_set arm_ext_*): Defined with new macros. (static const arm_feature_set arm_cext_*): Likewise. (static const arm_feature_set fpu_fpa_ext_*): Likewise. (static const arm_feature_set fpu_vfp_ext_*): Likewise. (deprecated_coproc_regs): Likewise. (UL_BARRIER): Likewise. (barrier_opt_names): Likewise. (arm_cpus): Likewise. (arm_extensions): Likewise. include/opcode/ChangeLog: 2015-03-24 Terry Guo <terry.guo@arm.com> * arm.h (arm_feature_set): Extended to provide more available * bits. (ARM_ANY): Updated to follow above new definition. (ARM_CPU_HAS_FEATURE): Likewise. (ARM_CPU_IS_ANY): Likewise. (ARM_MERGE_FEATURE_SETS): Likewise. (ARM_CLEAR_FEATURE): Likewise. (ARM_FEATURE): Likewise. (ARM_FEATURE_COPY): New macro. (ARM_FEATURE_EQUAL): Likewise. (ARM_FEATURE_ZERO): Likewise. (ARM_FEATURE_CORE_EQUAL): Likewise. (ARM_FEATURE_LOW): Likewise. (ARM_FEATURE_CORE_LOW): Likewise. (ARM_FEATURE_CORE_COPROC): Likewise. opcodes/ChangeLog: 2015-03-24 Terry Guo <terry.guo@arm.com> * arm-dis.c (opcode32): Updated to use new arm feature struct. (opcode16): Likewise. (coprocessor_opcodes): Replace bit with feature struct. (neon_opcodes): Likewise. (arm_opcodes): Likewise. (thumb_opcodes): Likewise. (thumb32_opcodes): Likewise. (print_insn_coprocessor): Likewise. (print_insn_arm): Likewise. (select_arm_features): Follow new feature struct.
This commit is contained in:
parent
596f88276c
commit
823d25713d
6 changed files with 2782 additions and 1451 deletions
|
@ -1,3 +1,20 @@
|
||||||
|
2015-03-24 Terry Guo <terry.guo@arm.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (no_cpu_selected): Use new macro to compare
|
||||||
|
features.
|
||||||
|
(parse_psr): Likewise.
|
||||||
|
(do_t_mrs): Likewise.
|
||||||
|
(do_t_msr): Likewise.
|
||||||
|
(static const arm_feature_set arm_ext_*): Defined with new macros.
|
||||||
|
(static const arm_feature_set arm_cext_*): Likewise.
|
||||||
|
(static const arm_feature_set fpu_fpa_ext_*): Likewise.
|
||||||
|
(static const arm_feature_set fpu_vfp_ext_*): Likewise.
|
||||||
|
(deprecated_coproc_regs): Likewise.
|
||||||
|
(UL_BARRIER): Likewise.
|
||||||
|
(barrier_opt_names): Likewise.
|
||||||
|
(arm_cpus): Likewise.
|
||||||
|
(arm_extensions): Likewise.
|
||||||
|
|
||||||
2015-03-20 H.J. Lu <hongjiu.lu@intel.com>
|
2015-03-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config/tc-i386.c (i386_align_code): Limit multi-byte nop
|
* config/tc-i386.c (i386_align_code): Limit multi-byte nop
|
||||||
|
|
|
@ -168,82 +168,96 @@ static const arm_feature_set fpu_endian_pure = FPU_ARCH_ENDIAN_PURE;
|
||||||
static const arm_feature_set cpu_default = CPU_DEFAULT;
|
static const arm_feature_set cpu_default = CPU_DEFAULT;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const arm_feature_set arm_ext_v1 = ARM_FEATURE (ARM_EXT_V1, 0);
|
static const arm_feature_set arm_ext_v1 = ARM_FEATURE_CORE_LOW (ARM_EXT_V1);
|
||||||
static const arm_feature_set arm_ext_v2 = ARM_FEATURE (ARM_EXT_V1, 0);
|
static const arm_feature_set arm_ext_v2 = ARM_FEATURE_CORE_LOW (ARM_EXT_V1);
|
||||||
static const arm_feature_set arm_ext_v2s = ARM_FEATURE (ARM_EXT_V2S, 0);
|
static const arm_feature_set arm_ext_v2s = ARM_FEATURE_CORE_LOW (ARM_EXT_V2S);
|
||||||
static const arm_feature_set arm_ext_v3 = ARM_FEATURE (ARM_EXT_V3, 0);
|
static const arm_feature_set arm_ext_v3 = ARM_FEATURE_CORE_LOW (ARM_EXT_V3);
|
||||||
static const arm_feature_set arm_ext_v3m = ARM_FEATURE (ARM_EXT_V3M, 0);
|
static const arm_feature_set arm_ext_v3m = ARM_FEATURE_CORE_LOW (ARM_EXT_V3M);
|
||||||
static const arm_feature_set arm_ext_v4 = ARM_FEATURE (ARM_EXT_V4, 0);
|
static const arm_feature_set arm_ext_v4 = ARM_FEATURE_CORE_LOW (ARM_EXT_V4);
|
||||||
static const arm_feature_set arm_ext_v4t = ARM_FEATURE (ARM_EXT_V4T, 0);
|
static const arm_feature_set arm_ext_v4t = ARM_FEATURE_CORE_LOW (ARM_EXT_V4T);
|
||||||
static const arm_feature_set arm_ext_v5 = ARM_FEATURE (ARM_EXT_V5, 0);
|
static const arm_feature_set arm_ext_v5 = ARM_FEATURE_CORE_LOW (ARM_EXT_V5);
|
||||||
static const arm_feature_set arm_ext_v4t_5 =
|
static const arm_feature_set arm_ext_v4t_5 =
|
||||||
ARM_FEATURE (ARM_EXT_V4T | ARM_EXT_V5, 0);
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V4T | ARM_EXT_V5);
|
||||||
static const arm_feature_set arm_ext_v5t = ARM_FEATURE (ARM_EXT_V5T, 0);
|
static const arm_feature_set arm_ext_v5t = ARM_FEATURE_CORE_LOW (ARM_EXT_V5T);
|
||||||
static const arm_feature_set arm_ext_v5e = ARM_FEATURE (ARM_EXT_V5E, 0);
|
static const arm_feature_set arm_ext_v5e = ARM_FEATURE_CORE_LOW (ARM_EXT_V5E);
|
||||||
static const arm_feature_set arm_ext_v5exp = ARM_FEATURE (ARM_EXT_V5ExP, 0);
|
static const arm_feature_set arm_ext_v5exp = ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP);
|
||||||
static const arm_feature_set arm_ext_v5j = ARM_FEATURE (ARM_EXT_V5J, 0);
|
static const arm_feature_set arm_ext_v5j = ARM_FEATURE_CORE_LOW (ARM_EXT_V5J);
|
||||||
static const arm_feature_set arm_ext_v6 = ARM_FEATURE (ARM_EXT_V6, 0);
|
static const arm_feature_set arm_ext_v6 = ARM_FEATURE_CORE_LOW (ARM_EXT_V6);
|
||||||
static const arm_feature_set arm_ext_v6k = ARM_FEATURE (ARM_EXT_V6K, 0);
|
static const arm_feature_set arm_ext_v6k = ARM_FEATURE_CORE_LOW (ARM_EXT_V6K);
|
||||||
static const arm_feature_set arm_ext_v6t2 = ARM_FEATURE (ARM_EXT_V6T2, 0);
|
static const arm_feature_set arm_ext_v6t2 = ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2);
|
||||||
static const arm_feature_set arm_ext_v6m = ARM_FEATURE (ARM_EXT_V6M, 0);
|
static const arm_feature_set arm_ext_v6m = ARM_FEATURE_CORE_LOW (ARM_EXT_V6M);
|
||||||
static const arm_feature_set arm_ext_v6_notm = ARM_FEATURE (ARM_EXT_V6_NOTM, 0);
|
static const arm_feature_set arm_ext_v6_notm =
|
||||||
static const arm_feature_set arm_ext_v6_dsp = ARM_FEATURE (ARM_EXT_V6_DSP, 0);
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6_NOTM);
|
||||||
static const arm_feature_set arm_ext_barrier = ARM_FEATURE (ARM_EXT_BARRIER, 0);
|
static const arm_feature_set arm_ext_v6_dsp =
|
||||||
static const arm_feature_set arm_ext_msr = ARM_FEATURE (ARM_EXT_THUMB_MSR, 0);
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6_DSP);
|
||||||
static const arm_feature_set arm_ext_div = ARM_FEATURE (ARM_EXT_DIV, 0);
|
static const arm_feature_set arm_ext_barrier =
|
||||||
static const arm_feature_set arm_ext_v7 = ARM_FEATURE (ARM_EXT_V7, 0);
|
ARM_FEATURE_CORE_LOW (ARM_EXT_BARRIER);
|
||||||
static const arm_feature_set arm_ext_v7a = ARM_FEATURE (ARM_EXT_V7A, 0);
|
static const arm_feature_set arm_ext_msr =
|
||||||
static const arm_feature_set arm_ext_v7r = ARM_FEATURE (ARM_EXT_V7R, 0);
|
ARM_FEATURE_CORE_LOW (ARM_EXT_THUMB_MSR);
|
||||||
static const arm_feature_set arm_ext_v7m = ARM_FEATURE (ARM_EXT_V7M, 0);
|
static const arm_feature_set arm_ext_div = ARM_FEATURE_CORE_LOW (ARM_EXT_DIV);
|
||||||
static const arm_feature_set arm_ext_v8 = ARM_FEATURE (ARM_EXT_V8, 0);
|
static const arm_feature_set arm_ext_v7 = ARM_FEATURE_CORE_LOW (ARM_EXT_V7);
|
||||||
|
static const arm_feature_set arm_ext_v7a = ARM_FEATURE_CORE_LOW (ARM_EXT_V7A);
|
||||||
|
static const arm_feature_set arm_ext_v7r = ARM_FEATURE_CORE_LOW (ARM_EXT_V7R);
|
||||||
|
static const arm_feature_set arm_ext_v7m = ARM_FEATURE_CORE_LOW (ARM_EXT_V7M);
|
||||||
|
static const arm_feature_set arm_ext_v8 = ARM_FEATURE_CORE_LOW (ARM_EXT_V8);
|
||||||
static const arm_feature_set arm_ext_m =
|
static const arm_feature_set arm_ext_m =
|
||||||
ARM_FEATURE (ARM_EXT_V6M | ARM_EXT_OS | ARM_EXT_V7M, 0);
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6M | ARM_EXT_OS | ARM_EXT_V7M);
|
||||||
static const arm_feature_set arm_ext_mp = ARM_FEATURE (ARM_EXT_MP, 0);
|
static const arm_feature_set arm_ext_mp = ARM_FEATURE_CORE_LOW (ARM_EXT_MP);
|
||||||
static const arm_feature_set arm_ext_sec = ARM_FEATURE (ARM_EXT_SEC, 0);
|
static const arm_feature_set arm_ext_sec = ARM_FEATURE_CORE_LOW (ARM_EXT_SEC);
|
||||||
static const arm_feature_set arm_ext_os = ARM_FEATURE (ARM_EXT_OS, 0);
|
static const arm_feature_set arm_ext_os = ARM_FEATURE_CORE_LOW (ARM_EXT_OS);
|
||||||
static const arm_feature_set arm_ext_adiv = ARM_FEATURE (ARM_EXT_ADIV, 0);
|
static const arm_feature_set arm_ext_adiv = ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV);
|
||||||
static const arm_feature_set arm_ext_virt = ARM_FEATURE (ARM_EXT_VIRT, 0);
|
static const arm_feature_set arm_ext_virt = ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT);
|
||||||
|
|
||||||
static const arm_feature_set arm_arch_any = ARM_ANY;
|
static const arm_feature_set arm_arch_any = ARM_ANY;
|
||||||
static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1);
|
static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1, -1);
|
||||||
static const arm_feature_set arm_arch_t2 = ARM_ARCH_THUMB2;
|
static const arm_feature_set arm_arch_t2 = ARM_ARCH_THUMB2;
|
||||||
static const arm_feature_set arm_arch_none = ARM_ARCH_NONE;
|
static const arm_feature_set arm_arch_none = ARM_ARCH_NONE;
|
||||||
static const arm_feature_set arm_arch_v6m_only = ARM_ARCH_V6M_ONLY;
|
static const arm_feature_set arm_arch_v6m_only = ARM_ARCH_V6M_ONLY;
|
||||||
|
|
||||||
static const arm_feature_set arm_cext_iwmmxt2 =
|
static const arm_feature_set arm_cext_iwmmxt2 =
|
||||||
ARM_FEATURE (0, ARM_CEXT_IWMMXT2);
|
ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT2);
|
||||||
static const arm_feature_set arm_cext_iwmmxt =
|
static const arm_feature_set arm_cext_iwmmxt =
|
||||||
ARM_FEATURE (0, ARM_CEXT_IWMMXT);
|
ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT);
|
||||||
static const arm_feature_set arm_cext_xscale =
|
static const arm_feature_set arm_cext_xscale =
|
||||||
ARM_FEATURE (0, ARM_CEXT_XSCALE);
|
ARM_FEATURE_COPROC (ARM_CEXT_XSCALE);
|
||||||
static const arm_feature_set arm_cext_maverick =
|
static const arm_feature_set arm_cext_maverick =
|
||||||
ARM_FEATURE (0, ARM_CEXT_MAVERICK);
|
ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK);
|
||||||
static const arm_feature_set fpu_fpa_ext_v1 = ARM_FEATURE (0, FPU_FPA_EXT_V1);
|
static const arm_feature_set fpu_fpa_ext_v1 =
|
||||||
static const arm_feature_set fpu_fpa_ext_v2 = ARM_FEATURE (0, FPU_FPA_EXT_V2);
|
ARM_FEATURE_COPROC (FPU_FPA_EXT_V1);
|
||||||
|
static const arm_feature_set fpu_fpa_ext_v2 =
|
||||||
|
ARM_FEATURE_COPROC (FPU_FPA_EXT_V2);
|
||||||
static const arm_feature_set fpu_vfp_ext_v1xd =
|
static const arm_feature_set fpu_vfp_ext_v1xd =
|
||||||
ARM_FEATURE (0, FPU_VFP_EXT_V1xD);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD);
|
||||||
static const arm_feature_set fpu_vfp_ext_v1 = ARM_FEATURE (0, FPU_VFP_EXT_V1);
|
static const arm_feature_set fpu_vfp_ext_v1 =
|
||||||
static const arm_feature_set fpu_vfp_ext_v2 = ARM_FEATURE (0, FPU_VFP_EXT_V2);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_V1);
|
||||||
static const arm_feature_set fpu_vfp_ext_v3xd = ARM_FEATURE (0, FPU_VFP_EXT_V3xD);
|
static const arm_feature_set fpu_vfp_ext_v2 =
|
||||||
static const arm_feature_set fpu_vfp_ext_v3 = ARM_FEATURE (0, FPU_VFP_EXT_V3);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_V2);
|
||||||
|
static const arm_feature_set fpu_vfp_ext_v3xd =
|
||||||
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_V3xD);
|
||||||
|
static const arm_feature_set fpu_vfp_ext_v3 =
|
||||||
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_V3);
|
||||||
static const arm_feature_set fpu_vfp_ext_d32 =
|
static const arm_feature_set fpu_vfp_ext_d32 =
|
||||||
ARM_FEATURE (0, FPU_VFP_EXT_D32);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_D32);
|
||||||
static const arm_feature_set fpu_neon_ext_v1 = ARM_FEATURE (0, FPU_NEON_EXT_V1);
|
static const arm_feature_set fpu_neon_ext_v1 =
|
||||||
|
ARM_FEATURE_COPROC (FPU_NEON_EXT_V1);
|
||||||
static const arm_feature_set fpu_vfp_v3_or_neon_ext =
|
static const arm_feature_set fpu_vfp_v3_or_neon_ext =
|
||||||
ARM_FEATURE (0, FPU_NEON_EXT_V1 | FPU_VFP_EXT_V3);
|
ARM_FEATURE_COPROC (FPU_NEON_EXT_V1 | FPU_VFP_EXT_V3);
|
||||||
static const arm_feature_set fpu_vfp_fp16 = ARM_FEATURE (0, FPU_VFP_EXT_FP16);
|
static const arm_feature_set fpu_vfp_fp16 =
|
||||||
static const arm_feature_set fpu_neon_ext_fma = ARM_FEATURE (0, FPU_NEON_EXT_FMA);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_FP16);
|
||||||
static const arm_feature_set fpu_vfp_ext_fma = ARM_FEATURE (0, FPU_VFP_EXT_FMA);
|
static const arm_feature_set fpu_neon_ext_fma =
|
||||||
|
ARM_FEATURE_COPROC (FPU_NEON_EXT_FMA);
|
||||||
|
static const arm_feature_set fpu_vfp_ext_fma =
|
||||||
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA);
|
||||||
static const arm_feature_set fpu_vfp_ext_armv8 =
|
static const arm_feature_set fpu_vfp_ext_armv8 =
|
||||||
ARM_FEATURE (0, FPU_VFP_EXT_ARMV8);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8);
|
||||||
static const arm_feature_set fpu_vfp_ext_armv8xd =
|
static const arm_feature_set fpu_vfp_ext_armv8xd =
|
||||||
ARM_FEATURE (0, FPU_VFP_EXT_ARMV8xD);
|
ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8xD);
|
||||||
static const arm_feature_set fpu_neon_ext_armv8 =
|
static const arm_feature_set fpu_neon_ext_armv8 =
|
||||||
ARM_FEATURE (0, FPU_NEON_EXT_ARMV8);
|
ARM_FEATURE_COPROC (FPU_NEON_EXT_ARMV8);
|
||||||
static const arm_feature_set fpu_crypto_ext_armv8 =
|
static const arm_feature_set fpu_crypto_ext_armv8 =
|
||||||
ARM_FEATURE (0, FPU_CRYPTO_EXT_ARMV8);
|
ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8);
|
||||||
static const arm_feature_set crc_ext_armv8 =
|
static const arm_feature_set crc_ext_armv8 =
|
||||||
ARM_FEATURE (0, CRC_EXT_ARMV8);
|
ARM_FEATURE_COPROC (CRC_EXT_ARMV8);
|
||||||
|
|
||||||
static int mfloat_abi_opt = -1;
|
static int mfloat_abi_opt = -1;
|
||||||
/* Record user cpu selection for object attributes. */
|
/* Record user cpu selection for object attributes. */
|
||||||
|
@ -257,8 +271,7 @@ extern FLONUM_TYPE generic_floating_point_number;
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
no_cpu_selected (void)
|
no_cpu_selected (void)
|
||||||
{
|
{
|
||||||
return selected_cpu.core == arm_arch_none.core
|
return ARM_FEATURE_EQUAL (selected_cpu, arm_arch_none);
|
||||||
&& selected_cpu.coproc == arm_arch_none.coproc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
#ifdef OBJ_ELF
|
||||||
|
@ -5769,7 +5782,7 @@ parse_psr (char **str, bfd_boolean lhs)
|
||||||
/* PR gas/12698: If the user has specified -march=all then m_profile will
|
/* PR gas/12698: If the user has specified -march=all then m_profile will
|
||||||
be TRUE, but we want to ignore it in this case as we are building for any
|
be TRUE, but we want to ignore it in this case as we are building for any
|
||||||
CPU type, including non-m variants. */
|
CPU type, including non-m variants. */
|
||||||
if (selected_cpu.core == arm_arch_any.core)
|
if (ARM_FEATURE_CORE_EQUAL (selected_cpu, arm_arch_any))
|
||||||
m_profile = FALSE;
|
m_profile = FALSE;
|
||||||
|
|
||||||
/* CPSR's and SPSR's can now be lowercase. This is just a convenience
|
/* CPSR's and SPSR's can now be lowercase. This is just a convenience
|
||||||
|
@ -8331,19 +8344,19 @@ struct deprecated_coproc_regs_s
|
||||||
static struct deprecated_coproc_regs_s deprecated_coproc_regs[] =
|
static struct deprecated_coproc_regs_s deprecated_coproc_regs[] =
|
||||||
{
|
{
|
||||||
{15, 0, 7, 10, 5, /* CP15DMB. */
|
{15, 0, 7, 10, 5, /* CP15DMB. */
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8), ARM_ARCH_NONE,
|
||||||
DEPR_ACCESS_V8, NULL},
|
DEPR_ACCESS_V8, NULL},
|
||||||
{15, 0, 7, 10, 4, /* CP15DSB. */
|
{15, 0, 7, 10, 4, /* CP15DSB. */
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8), ARM_ARCH_NONE,
|
||||||
DEPR_ACCESS_V8, NULL},
|
DEPR_ACCESS_V8, NULL},
|
||||||
{15, 0, 7, 5, 4, /* CP15ISB. */
|
{15, 0, 7, 5, 4, /* CP15ISB. */
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8), ARM_ARCH_NONE,
|
||||||
DEPR_ACCESS_V8, NULL},
|
DEPR_ACCESS_V8, NULL},
|
||||||
{14, 6, 1, 0, 0, /* TEEHBR. */
|
{14, 6, 1, 0, 0, /* TEEHBR. */
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8), ARM_ARCH_NONE,
|
||||||
DEPR_ACCESS_V8, NULL},
|
DEPR_ACCESS_V8, NULL},
|
||||||
{14, 6, 0, 0, 0, /* TEECR. */
|
{14, 6, 0, 0, 0, /* TEECR. */
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0), ARM_FEATURE (0, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8), ARM_ARCH_NONE,
|
||||||
DEPR_ACCESS_V8, NULL},
|
DEPR_ACCESS_V8, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11920,7 +11933,8 @@ do_t_mrs (void)
|
||||||
/* PR gas/12698: The constraint is only applied for m_profile.
|
/* PR gas/12698: The constraint is only applied for m_profile.
|
||||||
If the user has specified -march=all, we want to ignore it as
|
If the user has specified -march=all, we want to ignore it as
|
||||||
we are building for any CPU type, including non-m variants. */
|
we are building for any CPU type, including non-m variants. */
|
||||||
bfd_boolean m_profile = selected_cpu.core != arm_arch_any.core;
|
bfd_boolean m_profile =
|
||||||
|
!ARM_FEATURE_CORE_EQUAL (selected_cpu, arm_arch_any);
|
||||||
constraint ((flags != 0) && m_profile, _("selected processor does "
|
constraint ((flags != 0) && m_profile, _("selected processor does "
|
||||||
"not support requested special purpose register"));
|
"not support requested special purpose register"));
|
||||||
}
|
}
|
||||||
|
@ -11960,7 +11974,8 @@ do_t_msr (void)
|
||||||
/* PR gas/12698: The constraint is only applied for m_profile.
|
/* PR gas/12698: The constraint is only applied for m_profile.
|
||||||
If the user has specified -march=all, we want to ignore it as
|
If the user has specified -march=all, we want to ignore it as
|
||||||
we are building for any CPU type, including non-m variants. */
|
we are building for any CPU type, including non-m variants. */
|
||||||
bfd_boolean m_profile = selected_cpu.core != arm_arch_any.core;
|
bfd_boolean m_profile =
|
||||||
|
!ARM_FEATURE_CORE_EQUAL (selected_cpu, arm_arch_any);
|
||||||
constraint (((ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
|
constraint (((ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
|
||||||
&& (bits & ~(PSR_s | PSR_f)) != 0)
|
&& (bits & ~(PSR_s | PSR_f)) != 0)
|
||||||
|| (!ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
|
|| (!ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6_dsp)
|
||||||
|
@ -18207,8 +18222,8 @@ static const struct asm_cond conds[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
#define UL_BARRIER(L,U,CODE,FEAT) \
|
#define UL_BARRIER(L,U,CODE,FEAT) \
|
||||||
{ L, CODE, ARM_FEATURE (FEAT, 0) }, \
|
{ L, CODE, ARM_FEATURE_CORE_LOW (FEAT) }, \
|
||||||
{ U, CODE, ARM_FEATURE (FEAT, 0) }
|
{ U, CODE, ARM_FEATURE_CORE_LOW (FEAT) }
|
||||||
|
|
||||||
static struct asm_barrier_opt barrier_opt_names[] =
|
static struct asm_barrier_opt barrier_opt_names[] =
|
||||||
{
|
{
|
||||||
|
@ -24433,11 +24448,11 @@ static const struct arm_cpu_option_table arm_cpus[] =
|
||||||
ARM_CPU_OPT ("cortex-a7", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4,
|
ARM_CPU_OPT ("cortex-a7", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4,
|
||||||
"Cortex-A7"),
|
"Cortex-A7"),
|
||||||
ARM_CPU_OPT ("cortex-a8", ARM_ARCH_V7A_SEC,
|
ARM_CPU_OPT ("cortex-a8", ARM_ARCH_V7A_SEC,
|
||||||
ARM_FEATURE (0, FPU_VFP_V3
|
ARM_FEATURE_COPROC (FPU_VFP_V3
|
||||||
| FPU_NEON_EXT_V1),
|
| FPU_NEON_EXT_V1),
|
||||||
"Cortex-A8"),
|
"Cortex-A8"),
|
||||||
ARM_CPU_OPT ("cortex-a9", ARM_ARCH_V7A_MP_SEC,
|
ARM_CPU_OPT ("cortex-a9", ARM_ARCH_V7A_MP_SEC,
|
||||||
ARM_FEATURE (0, FPU_VFP_V3
|
ARM_FEATURE_COPROC (FPU_VFP_V3
|
||||||
| FPU_NEON_EXT_V1),
|
| FPU_NEON_EXT_V1),
|
||||||
"Cortex-A9"),
|
"Cortex-A9"),
|
||||||
ARM_CPU_OPT ("cortex-a12", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4,
|
ARM_CPU_OPT ("cortex-a12", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4,
|
||||||
|
@ -24473,13 +24488,14 @@ static const struct arm_cpu_option_table arm_cpus[] =
|
||||||
ARM_CPU_OPT ("iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP_V2, NULL),
|
ARM_CPU_OPT ("iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP_V2, NULL),
|
||||||
ARM_CPU_OPT ("i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL),
|
ARM_CPU_OPT ("i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL),
|
||||||
/* Maverick */
|
/* Maverick */
|
||||||
ARM_CPU_OPT ("ep9312", ARM_FEATURE (ARM_AEXT_V4T, ARM_CEXT_MAVERICK),
|
ARM_CPU_OPT ("ep9312", ARM_FEATURE_LOW (ARM_AEXT_V4T, ARM_CEXT_MAVERICK),
|
||||||
FPU_ARCH_MAVERICK, "ARM920T"),
|
FPU_ARCH_MAVERICK, "ARM920T"),
|
||||||
/* Marvell processors. */
|
/* Marvell processors. */
|
||||||
ARM_CPU_OPT ("marvell-pj4", ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC, 0),
|
ARM_CPU_OPT ("marvell-pj4", ARM_FEATURE_CORE_LOW (ARM_AEXT_V7A | ARM_EXT_MP
|
||||||
|
| ARM_EXT_SEC),
|
||||||
FPU_ARCH_VFP_V3D16, NULL),
|
FPU_ARCH_VFP_V3D16, NULL),
|
||||||
ARM_CPU_OPT ("marvell-whitney", ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_MP
|
ARM_CPU_OPT ("marvell-whitney", ARM_FEATURE_CORE_LOW (ARM_AEXT_V7A | ARM_EXT_MP
|
||||||
| ARM_EXT_SEC, 0),
|
| ARM_EXT_SEC),
|
||||||
FPU_ARCH_NEON_VFP_V4, NULL),
|
FPU_ARCH_NEON_VFP_V4, NULL),
|
||||||
/* APM X-Gene family. */
|
/* APM X-Gene family. */
|
||||||
ARM_CPU_OPT ("xgene1", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8,
|
ARM_CPU_OPT ("xgene1", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8,
|
||||||
|
@ -24566,40 +24582,40 @@ struct arm_option_extension_value_table
|
||||||
#define ARM_EXT_OPT(N, M, C, AA) { N, sizeof (N) - 1, M, C, AA }
|
#define ARM_EXT_OPT(N, M, C, AA) { N, sizeof (N) - 1, M, C, AA }
|
||||||
static const struct arm_option_extension_value_table arm_extensions[] =
|
static const struct arm_option_extension_value_table arm_extensions[] =
|
||||||
{
|
{
|
||||||
ARM_EXT_OPT ("crc", ARCH_CRC_ARMV8, ARM_FEATURE (0, CRC_EXT_ARMV8),
|
ARM_EXT_OPT ("crc", ARCH_CRC_ARMV8, ARM_FEATURE_COPROC (CRC_EXT_ARMV8),
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
|
||||||
ARM_EXT_OPT ("crypto", FPU_ARCH_CRYPTO_NEON_VFP_ARMV8,
|
ARM_EXT_OPT ("crypto", FPU_ARCH_CRYPTO_NEON_VFP_ARMV8,
|
||||||
ARM_FEATURE (0, FPU_CRYPTO_ARMV8),
|
ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8),
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
|
||||||
ARM_EXT_OPT ("fp", FPU_ARCH_VFP_ARMV8, ARM_FEATURE (0, FPU_VFP_ARMV8),
|
ARM_EXT_OPT ("fp", FPU_ARCH_VFP_ARMV8, ARM_FEATURE_COPROC (FPU_VFP_ARMV8),
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
|
||||||
ARM_EXT_OPT ("idiv", ARM_FEATURE (ARM_EXT_ADIV | ARM_EXT_DIV, 0),
|
ARM_EXT_OPT ("idiv", ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV | ARM_EXT_DIV),
|
||||||
ARM_FEATURE (ARM_EXT_ADIV | ARM_EXT_DIV, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV | ARM_EXT_DIV),
|
||||||
ARM_FEATURE (ARM_EXT_V7A | ARM_EXT_V7R, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V7A | ARM_EXT_V7R)),
|
||||||
ARM_EXT_OPT ("iwmmxt",ARM_FEATURE (0, ARM_CEXT_IWMMXT),
|
ARM_EXT_OPT ("iwmmxt",ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT),
|
||||||
ARM_FEATURE (0, ARM_CEXT_IWMMXT), ARM_ANY),
|
ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT), ARM_ANY),
|
||||||
ARM_EXT_OPT ("iwmmxt2", ARM_FEATURE (0, ARM_CEXT_IWMMXT2),
|
ARM_EXT_OPT ("iwmmxt2", ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT2),
|
||||||
ARM_FEATURE (0, ARM_CEXT_IWMMXT2), ARM_ANY),
|
ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT2), ARM_ANY),
|
||||||
ARM_EXT_OPT ("maverick", ARM_FEATURE (0, ARM_CEXT_MAVERICK),
|
ARM_EXT_OPT ("maverick", ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
|
||||||
ARM_FEATURE (0, ARM_CEXT_MAVERICK), ARM_ANY),
|
ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK), ARM_ANY),
|
||||||
ARM_EXT_OPT ("mp", ARM_FEATURE (ARM_EXT_MP, 0),
|
ARM_EXT_OPT ("mp", ARM_FEATURE_CORE_LOW (ARM_EXT_MP),
|
||||||
ARM_FEATURE (ARM_EXT_MP, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_MP),
|
||||||
ARM_FEATURE (ARM_EXT_V7A | ARM_EXT_V7R, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V7A | ARM_EXT_V7R)),
|
||||||
ARM_EXT_OPT ("simd", FPU_ARCH_NEON_VFP_ARMV8,
|
ARM_EXT_OPT ("simd", FPU_ARCH_NEON_VFP_ARMV8,
|
||||||
ARM_FEATURE(0, FPU_NEON_ARMV8),
|
ARM_FEATURE_COPROC (FPU_NEON_ARMV8),
|
||||||
ARM_FEATURE (ARM_EXT_V8, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
|
||||||
ARM_EXT_OPT ("os", ARM_FEATURE (ARM_EXT_OS, 0),
|
ARM_EXT_OPT ("os", ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
|
||||||
ARM_FEATURE (ARM_EXT_OS, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
|
||||||
ARM_FEATURE (ARM_EXT_V6M, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6M)),
|
||||||
ARM_EXT_OPT ("sec", ARM_FEATURE (ARM_EXT_SEC, 0),
|
ARM_EXT_OPT ("sec", ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
|
||||||
ARM_FEATURE (ARM_EXT_SEC, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
|
||||||
ARM_FEATURE (ARM_EXT_V6K | ARM_EXT_V7A, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6K | ARM_EXT_V7A)),
|
||||||
ARM_EXT_OPT ("virt", ARM_FEATURE (ARM_EXT_VIRT | ARM_EXT_ADIV
|
ARM_EXT_OPT ("virt", ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT | ARM_EXT_ADIV
|
||||||
| ARM_EXT_DIV, 0),
|
| ARM_EXT_DIV),
|
||||||
ARM_FEATURE (ARM_EXT_VIRT, 0),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT),
|
||||||
ARM_FEATURE (ARM_EXT_V7A, 0)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V7A)),
|
||||||
ARM_EXT_OPT ("xscale",ARM_FEATURE (0, ARM_CEXT_XSCALE),
|
ARM_EXT_OPT ("xscale",ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
|
||||||
ARM_FEATURE (0, ARM_CEXT_XSCALE), ARM_ANY),
|
ARM_FEATURE_COPROC (ARM_CEXT_XSCALE), ARM_ANY),
|
||||||
{ NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE, ARM_ARCH_NONE }
|
{ NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE, ARM_ARCH_NONE }
|
||||||
};
|
};
|
||||||
#undef ARM_EXT_OPT
|
#undef ARM_EXT_OPT
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
2015-03-24 Terry Guo <terry.guo@arm.com>
|
||||||
|
|
||||||
|
* arm.h (arm_feature_set): Extended to provide more available bits.
|
||||||
|
(ARM_ANY): Updated to follow above new definition.
|
||||||
|
(ARM_CPU_HAS_FEATURE): Likewise.
|
||||||
|
(ARM_CPU_IS_ANY): Likewise.
|
||||||
|
(ARM_MERGE_FEATURE_SETS): Likewise.
|
||||||
|
(ARM_CLEAR_FEATURE): Likewise.
|
||||||
|
(ARM_FEATURE): Likewise.
|
||||||
|
(ARM_FEATURE_COPY): New macro.
|
||||||
|
(ARM_FEATURE_EQUAL): Likewise.
|
||||||
|
(ARM_FEATURE_ZERO): Likewise.
|
||||||
|
(ARM_FEATURE_CORE_EQUAL): Likewise.
|
||||||
|
(ARM_FEATURE_LOW): Likewise.
|
||||||
|
(ARM_FEATURE_CORE_LOW): Likewise.
|
||||||
|
(ARM_FEATURE_CORE_COPROC): Likewise.
|
||||||
|
|
||||||
2015-02-19 Pedro Alves <palves@redhat.com>
|
2015-02-19 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* cgen.h [__cplusplus]: Wrap in extern "C".
|
* cgen.h [__cplusplus]: Wrap in extern "C".
|
||||||
|
|
|
@ -139,11 +139,12 @@
|
||||||
| ARM_EXT_VIRT | ARM_EXT_V8)
|
| ARM_EXT_VIRT | ARM_EXT_V8)
|
||||||
|
|
||||||
/* Processors with specific extensions in the co-processor space. */
|
/* Processors with specific extensions in the co-processor space. */
|
||||||
#define ARM_ARCH_XSCALE ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE)
|
#define ARM_ARCH_XSCALE ARM_FEATURE_LOW (ARM_AEXT_V5TE, ARM_CEXT_XSCALE)
|
||||||
#define ARM_ARCH_IWMMXT \
|
#define ARM_ARCH_IWMMXT \
|
||||||
ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT)
|
ARM_FEATURE_LOW (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT)
|
||||||
#define ARM_ARCH_IWMMXT2 \
|
#define ARM_ARCH_IWMMXT2 \
|
||||||
ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT | ARM_CEXT_IWMMXT2)
|
ARM_FEATURE_LOW (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT \
|
||||||
|
| ARM_CEXT_IWMMXT2)
|
||||||
|
|
||||||
#define FPU_VFP_V1xD (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE)
|
#define FPU_VFP_V1xD (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE)
|
||||||
#define FPU_VFP_V1 (FPU_VFP_V1xD | FPU_VFP_EXT_V1)
|
#define FPU_VFP_V1 (FPU_VFP_V1xD | FPU_VFP_EXT_V1)
|
||||||
|
@ -165,128 +166,159 @@
|
||||||
#define FPU_FPA (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
|
#define FPU_FPA (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
|
||||||
|
|
||||||
/* Deprecated. */
|
/* Deprecated. */
|
||||||
#define FPU_ARCH_VFP ARM_FEATURE (0, FPU_ENDIAN_PURE)
|
#define FPU_ARCH_VFP ARM_FEATURE_COPROC (FPU_ENDIAN_PURE)
|
||||||
|
|
||||||
#define FPU_ARCH_FPE ARM_FEATURE (0, FPU_FPA_EXT_V1)
|
#define FPU_ARCH_FPE ARM_FEATURE_COPROC (FPU_FPA_EXT_V1)
|
||||||
#define FPU_ARCH_FPA ARM_FEATURE (0, FPU_FPA)
|
#define FPU_ARCH_FPA ARM_FEATURE_COPROC (FPU_FPA)
|
||||||
|
|
||||||
#define FPU_ARCH_VFP_V1xD ARM_FEATURE (0, FPU_VFP_V1xD)
|
#define FPU_ARCH_VFP_V1xD ARM_FEATURE_COPROC (FPU_VFP_V1xD)
|
||||||
#define FPU_ARCH_VFP_V1 ARM_FEATURE (0, FPU_VFP_V1)
|
#define FPU_ARCH_VFP_V1 ARM_FEATURE_COPROC (FPU_VFP_V1)
|
||||||
#define FPU_ARCH_VFP_V2 ARM_FEATURE (0, FPU_VFP_V2)
|
#define FPU_ARCH_VFP_V2 ARM_FEATURE_COPROC (FPU_VFP_V2)
|
||||||
#define FPU_ARCH_VFP_V3D16 ARM_FEATURE (0, FPU_VFP_V3D16)
|
#define FPU_ARCH_VFP_V3D16 ARM_FEATURE_COPROC (FPU_VFP_V3D16)
|
||||||
#define FPU_ARCH_VFP_V3D16_FP16 \
|
#define FPU_ARCH_VFP_V3D16_FP16 \
|
||||||
ARM_FEATURE (0, FPU_VFP_V3D16 | FPU_VFP_EXT_FP16)
|
ARM_FEATURE_COPROC (FPU_VFP_V3D16 | FPU_VFP_EXT_FP16)
|
||||||
#define FPU_ARCH_VFP_V3 ARM_FEATURE (0, FPU_VFP_V3)
|
#define FPU_ARCH_VFP_V3 ARM_FEATURE_COPROC (FPU_VFP_V3)
|
||||||
#define FPU_ARCH_VFP_V3_FP16 ARM_FEATURE (0, FPU_VFP_V3 | FPU_VFP_EXT_FP16)
|
#define FPU_ARCH_VFP_V3_FP16 ARM_FEATURE_COPROC (FPU_VFP_V3 | FPU_VFP_EXT_FP16)
|
||||||
#define FPU_ARCH_VFP_V3xD ARM_FEATURE (0, FPU_VFP_V3xD)
|
#define FPU_ARCH_VFP_V3xD ARM_FEATURE_COPROC (FPU_VFP_V3xD)
|
||||||
#define FPU_ARCH_VFP_V3xD_FP16 ARM_FEATURE (0, FPU_VFP_V3xD | FPU_VFP_EXT_FP16)
|
#define FPU_ARCH_VFP_V3xD_FP16 ARM_FEATURE_COPROC (FPU_VFP_V3xD \
|
||||||
#define FPU_ARCH_NEON_V1 ARM_FEATURE (0, FPU_NEON_EXT_V1)
|
| FPU_VFP_EXT_FP16)
|
||||||
|
#define FPU_ARCH_NEON_V1 ARM_FEATURE_COPROC (FPU_NEON_EXT_V1)
|
||||||
#define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \
|
#define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \
|
||||||
ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1)
|
ARM_FEATURE_COPROC (FPU_VFP_V3 | FPU_NEON_EXT_V1)
|
||||||
#define FPU_ARCH_NEON_FP16 \
|
#define FPU_ARCH_NEON_FP16 \
|
||||||
ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1 | FPU_VFP_EXT_FP16)
|
ARM_FEATURE_COPROC (FPU_VFP_V3 | FPU_NEON_EXT_V1 | FPU_VFP_EXT_FP16)
|
||||||
#define FPU_ARCH_VFP_HARD ARM_FEATURE (0, FPU_VFP_HARD)
|
#define FPU_ARCH_VFP_HARD ARM_FEATURE_COPROC (FPU_VFP_HARD)
|
||||||
#define FPU_ARCH_VFP_V4 ARM_FEATURE(0, FPU_VFP_V4)
|
#define FPU_ARCH_VFP_V4 ARM_FEATURE_COPROC (FPU_VFP_V4)
|
||||||
#define FPU_ARCH_VFP_V4D16 ARM_FEATURE(0, FPU_VFP_V4D16)
|
#define FPU_ARCH_VFP_V4D16 ARM_FEATURE_COPROC (FPU_VFP_V4D16)
|
||||||
#define FPU_ARCH_VFP_V4_SP_D16 ARM_FEATURE(0, FPU_VFP_V4_SP_D16)
|
#define FPU_ARCH_VFP_V4_SP_D16 ARM_FEATURE_COPROC (FPU_VFP_V4_SP_D16)
|
||||||
#define FPU_ARCH_VFP_V5D16 ARM_FEATURE(0, FPU_VFP_V5D16)
|
#define FPU_ARCH_VFP_V5D16 ARM_FEATURE_COPROC (FPU_VFP_V5D16)
|
||||||
#define FPU_ARCH_VFP_V5_SP_D16 ARM_FEATURE(0, FPU_VFP_V5_SP_D16)
|
#define FPU_ARCH_VFP_V5_SP_D16 ARM_FEATURE_COPROC (FPU_VFP_V5_SP_D16)
|
||||||
#define FPU_ARCH_NEON_VFP_V4 \
|
#define FPU_ARCH_NEON_VFP_V4 \
|
||||||
ARM_FEATURE(0, FPU_VFP_V4 | FPU_NEON_EXT_V1 | FPU_NEON_EXT_FMA)
|
ARM_FEATURE_COPROC (FPU_VFP_V4 | FPU_NEON_EXT_V1 | FPU_NEON_EXT_FMA)
|
||||||
#define FPU_ARCH_VFP_ARMV8 ARM_FEATURE(0, FPU_VFP_ARMV8)
|
#define FPU_ARCH_VFP_ARMV8 ARM_FEATURE_COPROC (FPU_VFP_ARMV8)
|
||||||
#define FPU_ARCH_NEON_VFP_ARMV8 ARM_FEATURE(0, FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
|
#define FPU_ARCH_NEON_VFP_ARMV8 ARM_FEATURE_COPROC (FPU_NEON_ARMV8 \
|
||||||
|
| FPU_VFP_ARMV8)
|
||||||
#define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8 \
|
#define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8 \
|
||||||
ARM_FEATURE(0, FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
|
ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
|
||||||
#define ARCH_CRC_ARMV8 ARM_FEATURE(0, CRC_EXT_ARMV8)
|
#define ARCH_CRC_ARMV8 ARM_FEATURE_COPROC (CRC_EXT_ARMV8)
|
||||||
|
|
||||||
#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE (0, FPU_ENDIAN_PURE)
|
#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE_COPROC (FPU_ENDIAN_PURE)
|
||||||
|
|
||||||
#define FPU_ARCH_MAVERICK ARM_FEATURE (0, FPU_MAVERICK)
|
#define FPU_ARCH_MAVERICK ARM_FEATURE_COPROC (FPU_MAVERICK)
|
||||||
|
|
||||||
#define ARM_ARCH_V1 ARM_FEATURE (ARM_AEXT_V1, 0)
|
#define ARM_ARCH_V1 ARM_FEATURE_CORE_LOW (ARM_AEXT_V1)
|
||||||
#define ARM_ARCH_V2 ARM_FEATURE (ARM_AEXT_V2, 0)
|
#define ARM_ARCH_V2 ARM_FEATURE_CORE_LOW (ARM_AEXT_V2)
|
||||||
#define ARM_ARCH_V2S ARM_FEATURE (ARM_AEXT_V2S, 0)
|
#define ARM_ARCH_V2S ARM_FEATURE_CORE_LOW (ARM_AEXT_V2S)
|
||||||
#define ARM_ARCH_V3 ARM_FEATURE (ARM_AEXT_V3, 0)
|
#define ARM_ARCH_V3 ARM_FEATURE_CORE_LOW (ARM_AEXT_V3)
|
||||||
#define ARM_ARCH_V3M ARM_FEATURE (ARM_AEXT_V3M, 0)
|
#define ARM_ARCH_V3M ARM_FEATURE_CORE_LOW (ARM_AEXT_V3M)
|
||||||
#define ARM_ARCH_V4xM ARM_FEATURE (ARM_AEXT_V4xM, 0)
|
#define ARM_ARCH_V4xM ARM_FEATURE_CORE_LOW (ARM_AEXT_V4xM)
|
||||||
#define ARM_ARCH_V4 ARM_FEATURE (ARM_AEXT_V4, 0)
|
#define ARM_ARCH_V4 ARM_FEATURE_CORE_LOW (ARM_AEXT_V4)
|
||||||
#define ARM_ARCH_V4TxM ARM_FEATURE (ARM_AEXT_V4TxM, 0)
|
#define ARM_ARCH_V4TxM ARM_FEATURE_CORE_LOW (ARM_AEXT_V4TxM)
|
||||||
#define ARM_ARCH_V4T ARM_FEATURE (ARM_AEXT_V4T, 0)
|
#define ARM_ARCH_V4T ARM_FEATURE_CORE_LOW (ARM_AEXT_V4T)
|
||||||
#define ARM_ARCH_V5xM ARM_FEATURE (ARM_AEXT_V5xM, 0)
|
#define ARM_ARCH_V5xM ARM_FEATURE_CORE_LOW (ARM_AEXT_V5xM)
|
||||||
#define ARM_ARCH_V5 ARM_FEATURE (ARM_AEXT_V5, 0)
|
#define ARM_ARCH_V5 ARM_FEATURE_CORE_LOW (ARM_AEXT_V5)
|
||||||
#define ARM_ARCH_V5TxM ARM_FEATURE (ARM_AEXT_V5TxM, 0)
|
#define ARM_ARCH_V5TxM ARM_FEATURE_CORE_LOW (ARM_AEXT_V5TxM)
|
||||||
#define ARM_ARCH_V5T ARM_FEATURE (ARM_AEXT_V5T, 0)
|
#define ARM_ARCH_V5T ARM_FEATURE_CORE_LOW (ARM_AEXT_V5T)
|
||||||
#define ARM_ARCH_V5TExP ARM_FEATURE (ARM_AEXT_V5TExP, 0)
|
#define ARM_ARCH_V5TExP ARM_FEATURE_CORE_LOW (ARM_AEXT_V5TExP)
|
||||||
#define ARM_ARCH_V5TE ARM_FEATURE (ARM_AEXT_V5TE, 0)
|
#define ARM_ARCH_V5TE ARM_FEATURE_CORE_LOW (ARM_AEXT_V5TE)
|
||||||
#define ARM_ARCH_V5TEJ ARM_FEATURE (ARM_AEXT_V5TEJ, 0)
|
#define ARM_ARCH_V5TEJ ARM_FEATURE_CORE_LOW (ARM_AEXT_V5TEJ)
|
||||||
#define ARM_ARCH_V6 ARM_FEATURE (ARM_AEXT_V6, 0)
|
#define ARM_ARCH_V6 ARM_FEATURE_CORE_LOW (ARM_AEXT_V6)
|
||||||
#define ARM_ARCH_V6K ARM_FEATURE (ARM_AEXT_V6K, 0)
|
#define ARM_ARCH_V6K ARM_FEATURE_CORE_LOW (ARM_AEXT_V6K)
|
||||||
#define ARM_ARCH_V6Z ARM_FEATURE (ARM_AEXT_V6Z, 0)
|
#define ARM_ARCH_V6Z ARM_FEATURE_CORE_LOW (ARM_AEXT_V6Z)
|
||||||
#define ARM_ARCH_V6ZK ARM_FEATURE (ARM_AEXT_V6ZK, 0)
|
#define ARM_ARCH_V6ZK ARM_FEATURE_CORE_LOW (ARM_AEXT_V6ZK)
|
||||||
#define ARM_ARCH_V6T2 ARM_FEATURE (ARM_AEXT_V6T2, 0)
|
#define ARM_ARCH_V6T2 ARM_FEATURE_CORE_LOW (ARM_AEXT_V6T2)
|
||||||
#define ARM_ARCH_V6KT2 ARM_FEATURE (ARM_AEXT_V6KT2, 0)
|
#define ARM_ARCH_V6KT2 ARM_FEATURE_CORE_LOW (ARM_AEXT_V6KT2)
|
||||||
#define ARM_ARCH_V6ZT2 ARM_FEATURE (ARM_AEXT_V6ZT2, 0)
|
#define ARM_ARCH_V6ZT2 ARM_FEATURE_CORE_LOW (ARM_AEXT_V6ZT2)
|
||||||
#define ARM_ARCH_V6ZKT2 ARM_FEATURE (ARM_AEXT_V6ZKT2, 0)
|
#define ARM_ARCH_V6ZKT2 ARM_FEATURE_CORE_LOW (ARM_AEXT_V6ZKT2)
|
||||||
#define ARM_ARCH_V6M ARM_FEATURE (ARM_AEXT_V6M, 0)
|
#define ARM_ARCH_V6M ARM_FEATURE_CORE_LOW (ARM_AEXT_V6M)
|
||||||
#define ARM_ARCH_V6SM ARM_FEATURE (ARM_AEXT_V6SM, 0)
|
#define ARM_ARCH_V6SM ARM_FEATURE_CORE_LOW (ARM_AEXT_V6SM)
|
||||||
#define ARM_ARCH_V7 ARM_FEATURE (ARM_AEXT_V7, 0)
|
#define ARM_ARCH_V7 ARM_FEATURE_CORE_LOW (ARM_AEXT_V7)
|
||||||
#define ARM_ARCH_V7A ARM_FEATURE (ARM_AEXT_V7A, 0)
|
#define ARM_ARCH_V7A ARM_FEATURE_CORE_LOW (ARM_AEXT_V7A)
|
||||||
#define ARM_ARCH_V7VE ARM_FEATURE (ARM_AEXT_V7VE, 0)
|
#define ARM_ARCH_V7VE ARM_FEATURE_CORE_LOW (ARM_AEXT_V7VE)
|
||||||
#define ARM_ARCH_V7R ARM_FEATURE (ARM_AEXT_V7R, 0)
|
#define ARM_ARCH_V7R ARM_FEATURE_CORE_LOW (ARM_AEXT_V7R)
|
||||||
#define ARM_ARCH_V7M ARM_FEATURE (ARM_AEXT_V7M, 0)
|
#define ARM_ARCH_V7M ARM_FEATURE_CORE_LOW (ARM_AEXT_V7M)
|
||||||
#define ARM_ARCH_V7EM ARM_FEATURE (ARM_AEXT_V7EM, 0)
|
#define ARM_ARCH_V7EM ARM_FEATURE_CORE_LOW (ARM_AEXT_V7EM)
|
||||||
#define ARM_ARCH_V8A ARM_FEATURE (ARM_AEXT_V8A, 0)
|
#define ARM_ARCH_V8A ARM_FEATURE_CORE_LOW (ARM_AEXT_V8A)
|
||||||
|
|
||||||
/* Some useful combinations: */
|
/* Some useful combinations: */
|
||||||
#define ARM_ARCH_NONE ARM_FEATURE (0, 0)
|
#define ARM_ARCH_NONE ARM_FEATURE_LOW (0, 0)
|
||||||
#define FPU_NONE ARM_FEATURE (0, 0)
|
#define FPU_NONE ARM_FEATURE_LOW (0, 0)
|
||||||
#define ARM_ANY ARM_FEATURE (-1, 0) /* Any basic core. */
|
#define ARM_ANY ARM_FEATURE (-1, -1, 0) /* Any basic core. */
|
||||||
#define FPU_ANY_HARD ARM_FEATURE (0, FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK)
|
#define FPU_ANY_HARD ARM_FEATURE_COPROC (FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK)
|
||||||
#define ARM_ARCH_THUMB2 ARM_FEATURE (ARM_EXT_V6T2 | ARM_EXT_V7 | ARM_EXT_V7A | ARM_EXT_V7R | ARM_EXT_V7M | ARM_EXT_DIV, 0)
|
#define ARM_ARCH_THUMB2 ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2 | ARM_EXT_V7 \
|
||||||
|
| ARM_EXT_V7A | ARM_EXT_V7R \
|
||||||
|
| ARM_EXT_V7M | ARM_EXT_DIV)
|
||||||
/* v7-a+sec. */
|
/* v7-a+sec. */
|
||||||
#define ARM_ARCH_V7A_SEC ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_SEC, 0)
|
#define ARM_ARCH_V7A_SEC ARM_FEATURE_CORE_LOW (ARM_AEXT_V7A | ARM_EXT_SEC)
|
||||||
/* v7-a+mp+sec. */
|
/* v7-a+mp+sec. */
|
||||||
#define ARM_ARCH_V7A_MP_SEC \
|
#define ARM_ARCH_V7A_MP_SEC \
|
||||||
ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC, \
|
ARM_FEATURE_CORE_LOW (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC)
|
||||||
0)
|
|
||||||
/* v7-r+idiv. */
|
/* v7-r+idiv. */
|
||||||
#define ARM_ARCH_V7R_IDIV ARM_FEATURE (ARM_AEXT_V7R | ARM_EXT_ADIV, 0)
|
#define ARM_ARCH_V7R_IDIV ARM_FEATURE_CORE_LOW (ARM_AEXT_V7R | ARM_EXT_ADIV)
|
||||||
/* Features that are present in v6M and v6S-M but not other v6 cores. */
|
/* Features that are present in v6M and v6S-M but not other v6 cores. */
|
||||||
#define ARM_ARCH_V6M_ONLY ARM_FEATURE (ARM_AEXT_V6M_ONLY, 0)
|
#define ARM_ARCH_V6M_ONLY ARM_FEATURE_CORE_LOW (ARM_AEXT_V6M_ONLY)
|
||||||
/* v8-a+fp. */
|
/* v8-a+fp. */
|
||||||
#define ARM_ARCH_V8A_FP ARM_FEATURE (ARM_AEXT_V8A, FPU_ARCH_VFP_ARMV8)
|
#define ARM_ARCH_V8A_FP ARM_FEATURE_LOW (ARM_AEXT_V8A, FPU_ARCH_VFP_ARMV8)
|
||||||
/* v8-a+simd (implies fp). */
|
/* v8-a+simd (implies fp). */
|
||||||
#define ARM_ARCH_V8A_SIMD ARM_FEATURE (ARM_AEXT_V8A, \
|
#define ARM_ARCH_V8A_SIMD ARM_FEATURE_LOW (ARM_AEXT_V8A, \
|
||||||
FPU_ARCH_NEON_VFP_ARMV8)
|
FPU_ARCH_NEON_VFP_ARMV8)
|
||||||
/* v8-a+crypto (implies simd+fp). */
|
/* v8-a+crypto (implies simd+fp). */
|
||||||
#define ARM_ARCH_V8A_CRYPTOV1 ARM_FEATURE (ARM_AEXT_V8A, \
|
#define ARM_ARCH_V8A_CRYPTOV1 ARM_FEATURE_LOW (ARM_AEXT_V8A, \
|
||||||
FPU_ARCH_CRYPTO_NEON_VFP_ARMV8)
|
FPU_ARCH_CRYPTO_NEON_VFP_ARMV8)
|
||||||
|
|
||||||
/* There are too many feature bits to fit in a single word, so use a
|
/* There are too many feature bits to fit in a single word, so use a
|
||||||
structure. For simplicity we put all core features in one word and
|
structure. For simplicity we put all core features in array CORE
|
||||||
everything else in the other. */
|
and everything else in the other. All the bits in element core[0]
|
||||||
|
have been occupied, so new feature should use bit in element core[1]
|
||||||
|
and use macro ARM_FEATURE to initialize the feature set variable. */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned long core;
|
unsigned long core[2];
|
||||||
unsigned long coproc;
|
unsigned long coproc;
|
||||||
} arm_feature_set;
|
} arm_feature_set;
|
||||||
|
|
||||||
#define ARM_CPU_HAS_FEATURE(CPU,FEAT) \
|
#define ARM_CPU_HAS_FEATURE(CPU,FEAT) \
|
||||||
(((CPU).core & (FEAT).core) != 0 || ((CPU).coproc & (FEAT).coproc) != 0)
|
(((CPU).core[0] & (FEAT).core[0]) != 0 \
|
||||||
|
|| ((CPU).core[1] & (FEAT).core[1]) != 0 \
|
||||||
|
|| ((CPU).coproc & (FEAT).coproc) != 0)
|
||||||
|
|
||||||
#define ARM_CPU_IS_ANY(CPU) \
|
#define ARM_CPU_IS_ANY(CPU) \
|
||||||
((CPU).core == ((arm_feature_set)ARM_ANY).core)
|
((CPU).core[0] == ((arm_feature_set)ARM_ANY).core[0] \
|
||||||
|
&& (CPU).core[1] == ((arm_feature_set)ARM_ANY).core[1])
|
||||||
|
|
||||||
#define ARM_MERGE_FEATURE_SETS(TARG,F1,F2) \
|
#define ARM_MERGE_FEATURE_SETS(TARG,F1,F2) \
|
||||||
do { \
|
do { \
|
||||||
(TARG).core = (F1).core | (F2).core; \
|
(TARG).core[0] = (F1).core[0] | (F2).core[0];\
|
||||||
|
(TARG).core[1] = (F1).core[1] | (F2).core[1];\
|
||||||
(TARG).coproc = (F1).coproc | (F2).coproc; \
|
(TARG).coproc = (F1).coproc | (F2).coproc; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ARM_CLEAR_FEATURE(TARG,F1,F2) \
|
#define ARM_CLEAR_FEATURE(TARG,F1,F2) \
|
||||||
do { \
|
do { \
|
||||||
(TARG).core = (F1).core &~ (F2).core; \
|
(TARG).core[0] = (F1).core[0] &~ (F2).core[0];\
|
||||||
|
(TARG).core[1] = (F1).core[1] &~ (F2).core[1];\
|
||||||
(TARG).coproc = (F1).coproc &~ (F2).coproc; \
|
(TARG).coproc = (F1).coproc &~ (F2).coproc; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ARM_FEATURE(core, coproc) {(core), (coproc)}
|
#define ARM_FEATURE_COPY(F1, F2) \
|
||||||
|
do { \
|
||||||
|
(F1).core[0] = (F2).core[0]; \
|
||||||
|
(F1).core[1] = (F2).core[1]; \
|
||||||
|
(F1).coproc = (F2).coproc; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define ARM_FEATURE_EQUAL(T1,T2) \
|
||||||
|
((T1).core[0] == (T2).core[0] \
|
||||||
|
&& (T1).core[1] == (T2).core[1] \
|
||||||
|
&& (T1).coproc == (T2).coproc)
|
||||||
|
|
||||||
|
#define ARM_FEATURE_ZERO(T) \
|
||||||
|
((T).core[0] == 0 && (T).core[1] == 0 && (T).coproc == 0)
|
||||||
|
|
||||||
|
#define ARM_FEATURE_CORE_EQUAL(T1, T2) \
|
||||||
|
((T1).core[0] == (T2).core[0] && (T1).core[1] == (T2).core[1])
|
||||||
|
|
||||||
|
#define ARM_FEATURE_LOW(core, coproc) {{(core), 0}, (coproc)}
|
||||||
|
#define ARM_FEATURE_CORE_LOW(core) {{(core), 0}, 0}
|
||||||
|
#define ARM_FEATURE_COPROC(coproc) {{0, 0}, (coproc)}
|
||||||
|
#define ARM_FEATURE(core1, core2, coproc) {{(core1), (core2)}, (coproc)}
|
||||||
|
|
|
@ -1,3 +1,16 @@
|
||||||
|
2015-03-24 Terry Guo <terry.guo@arm.com>
|
||||||
|
|
||||||
|
* arm-dis.c (opcode32): Updated to use new arm feature struct.
|
||||||
|
(opcode16): Likewise.
|
||||||
|
(coprocessor_opcodes): Replace bit with feature struct.
|
||||||
|
(neon_opcodes): Likewise.
|
||||||
|
(arm_opcodes): Likewise.
|
||||||
|
(thumb_opcodes): Likewise.
|
||||||
|
(thumb32_opcodes): Likewise.
|
||||||
|
(print_insn_coprocessor): Likewise.
|
||||||
|
(print_insn_arm): Likewise.
|
||||||
|
(select_arm_features): Follow new feature struct.
|
||||||
|
|
||||||
2015-03-17 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
|
2015-03-17 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
|
||||||
|
|
||||||
* i386-dis.c (rm_table): Add clzero.
|
* i386-dis.c (rm_table): Add clzero.
|
||||||
|
|
3756
opcodes/arm-dis.c
3756
opcodes/arm-dis.c
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue