* gas/config/tc-arm.c (arm_cpu_option_table): Add name_len field.
(arm_arch_option_table): Likewise. (arm_option_extension_value_table): Likewise. (ARM_CPU_OPT): New define. (ARM_ARCH_OPT): Likewise. (ARM_EXT_OPT): Likewise. (arm_cpus): Use ARM_CPU_OPT to initialize. (arm_archs): Use ARM_ARCH_OPT to initialize. (arm_extensions): Use ARM_EXT_OPT to initialize. (arm_parse_extension): Ensure option string matching matches the whole string. (arm_parse_cpu): Likewise. (arm_parse_arch): Likewise. * gas/testsuite/gas/arm/cmdline-bad-arch.d: New test case. * gas/testsuite/gas/arm/cmdline-bad-cpu.d: Likewise.
This commit is contained in:
parent
0596a831a2
commit
f3bad4690f
|
@ -1,3 +1,19 @@
|
||||||
|
2011-11-30 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (arm_cpu_option_table): Add name_len field.
|
||||||
|
(arm_arch_option_table): Likewise.
|
||||||
|
(arm_option_extension_value_table): Likewise.
|
||||||
|
(ARM_CPU_OPT): New define.
|
||||||
|
(ARM_ARCH_OPT): Likewise.
|
||||||
|
(ARM_EXT_OPT): Likewise.
|
||||||
|
(arm_cpus): Use ARM_CPU_OPT to initialize.
|
||||||
|
(arm_archs): Use ARM_ARCH_OPT to initialize.
|
||||||
|
(arm_extensions): Use ARM_EXT_OPT to initialize.
|
||||||
|
(arm_parse_extension): Ensure option string matching matches
|
||||||
|
the whole string.
|
||||||
|
(arm_parse_cpu): Likewise.
|
||||||
|
(arm_parse_arch): Likewise.
|
||||||
|
|
||||||
2011-11-29 Andrew Pinski <apinski@cavium.com>
|
2011-11-29 Andrew Pinski <apinski@cavium.com>
|
||||||
|
|
||||||
* config/tc-mips.c (CPU_IS_OCTEON): New macro function.
|
* config/tc-mips.c (CPU_IS_OCTEON): New macro function.
|
||||||
|
|
|
@ -22874,6 +22874,7 @@ const struct arm_legacy_option_table arm_legacy_opts[] =
|
||||||
struct arm_cpu_option_table
|
struct arm_cpu_option_table
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
size_t name_len;
|
||||||
const arm_feature_set value;
|
const arm_feature_set value;
|
||||||
/* For some CPUs we assume an FPU unless the user explicitly sets
|
/* For some CPUs we assume an FPU unless the user explicitly sets
|
||||||
-mfpu=... */
|
-mfpu=... */
|
||||||
|
@ -22885,211 +22886,226 @@ struct arm_cpu_option_table
|
||||||
|
|
||||||
/* This list should, at a minimum, contain all the cpu names
|
/* This list should, at a minimum, contain all the cpu names
|
||||||
recognized by GCC. */
|
recognized by GCC. */
|
||||||
|
#define ARM_CPU_OPT(N, V, DF, CN) { N, sizeof (N) - 1, V, DF, CN }
|
||||||
static const struct arm_cpu_option_table arm_cpus[] =
|
static const struct arm_cpu_option_table arm_cpus[] =
|
||||||
{
|
{
|
||||||
{"all", ARM_ANY, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("all", ARM_ANY, FPU_ARCH_FPA, NULL),
|
||||||
{"arm1", ARM_ARCH_V1, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm1", ARM_ARCH_V1, FPU_ARCH_FPA, NULL),
|
||||||
{"arm2", ARM_ARCH_V2, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm2", ARM_ARCH_V2, FPU_ARCH_FPA, NULL),
|
||||||
{"arm250", ARM_ARCH_V2S, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm250", ARM_ARCH_V2S, FPU_ARCH_FPA, NULL),
|
||||||
{"arm3", ARM_ARCH_V2S, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm3", ARM_ARCH_V2S, FPU_ARCH_FPA, NULL),
|
||||||
{"arm6", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm6", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm60", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm60", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm600", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm600", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm610", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm610", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm620", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm620", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7m", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7m", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7d", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7d", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7dm", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7dm", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7di", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7di", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7dmi", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7dmi", ARM_ARCH_V3M, FPU_ARCH_FPA, NULL),
|
||||||
{"arm70", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm70", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm700", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm700", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm700i", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm700i", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm710", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm710", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm710t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm710t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm720", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm720", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm720t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm720t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm740t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm740t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm710c", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm710c", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7100", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7100", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7500", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7500", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7500fe", ARM_ARCH_V3, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7500fe", ARM_ARCH_V3, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm7tdmi-s", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm7tdmi-s", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm8", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm8", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"arm810", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm810", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"strongarm", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("strongarm", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"strongarm1", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("strongarm1", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"strongarm110", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("strongarm110", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"strongarm1100", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("strongarm1100", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"strongarm1110", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("strongarm1110", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"arm9", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm9", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm920", ARM_ARCH_V4T, FPU_ARCH_FPA, "ARM920T"},
|
ARM_CPU_OPT ("arm920", ARM_ARCH_V4T, FPU_ARCH_FPA, "ARM920T"),
|
||||||
{"arm920t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm920t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm922t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm922t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm940t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm940t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"arm9tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("arm9tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL),
|
||||||
{"fa526", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("fa526", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
{"fa626", ARM_ARCH_V4, FPU_ARCH_FPA, NULL},
|
ARM_CPU_OPT ("fa626", ARM_ARCH_V4, FPU_ARCH_FPA, NULL),
|
||||||
/* For V5 or later processors we default to using VFP; but the user
|
/* For V5 or later processors we default to using VFP; but the user
|
||||||
should really set the FPU type explicitly. */
|
should really set the FPU type explicitly. */
|
||||||
{"arm9e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm9e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm9e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm9e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm926ej", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM926EJ-S"},
|
ARM_CPU_OPT ("arm926ej", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM926EJ-S"),
|
||||||
{"arm926ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM926EJ-S"},
|
ARM_CPU_OPT ("arm926ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM926EJ-S"),
|
||||||
{"arm926ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm926ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm946e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm946e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm946e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM946E-S"},
|
ARM_CPU_OPT ("arm946e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM946E-S"),
|
||||||
{"arm946e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm946e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm966e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm966e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm966e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM966E-S"},
|
ARM_CPU_OPT ("arm966e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM966E-S"),
|
||||||
{"arm966e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm966e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm968e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm968e-s", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm10t", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL},
|
ARM_CPU_OPT ("arm10t", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL),
|
||||||
{"arm10tdmi", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL},
|
ARM_CPU_OPT ("arm10tdmi", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL),
|
||||||
{"arm10e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm10e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm1020", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM1020E"},
|
ARM_CPU_OPT ("arm1020", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, "ARM1020E"),
|
||||||
{"arm1020t", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL},
|
ARM_CPU_OPT ("arm1020t", ARM_ARCH_V5T, FPU_ARCH_VFP_V1, NULL),
|
||||||
{"arm1020e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm1020e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm1022e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm1022e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm1026ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM1026EJ-S"},
|
ARM_CPU_OPT ("arm1026ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2,
|
||||||
{"arm1026ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL},
|
"ARM1026EJ-S"),
|
||||||
{"fa606te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm1026ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"fa616te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("fa606te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"fa626te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("fa616te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"fmp626", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("fa626te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"fa726te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("fmp626", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm1136js", ARM_ARCH_V6, FPU_NONE, "ARM1136J-S"},
|
ARM_CPU_OPT ("fa726te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm1136j-s", ARM_ARCH_V6, FPU_NONE, NULL},
|
ARM_CPU_OPT ("arm1136js", ARM_ARCH_V6, FPU_NONE, "ARM1136J-S"),
|
||||||
{"arm1136jfs", ARM_ARCH_V6, FPU_ARCH_VFP_V2, "ARM1136JF-S"},
|
ARM_CPU_OPT ("arm1136j-s", ARM_ARCH_V6, FPU_NONE, NULL),
|
||||||
{"arm1136jf-s", ARM_ARCH_V6, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm1136jfs", ARM_ARCH_V6, FPU_ARCH_VFP_V2,
|
||||||
{"mpcore", ARM_ARCH_V6K, FPU_ARCH_VFP_V2, "MPCore"},
|
"ARM1136JF-S"),
|
||||||
{"mpcorenovfp", ARM_ARCH_V6K, FPU_NONE, "MPCore"},
|
ARM_CPU_OPT ("arm1136jf-s", ARM_ARCH_V6, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"arm1156t2-s", ARM_ARCH_V6T2, FPU_NONE, NULL},
|
ARM_CPU_OPT ("mpcore", ARM_ARCH_V6K, FPU_ARCH_VFP_V2, "MPCore"),
|
||||||
{"arm1156t2f-s", ARM_ARCH_V6T2, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("mpcorenovfp", ARM_ARCH_V6K, FPU_NONE, "MPCore"),
|
||||||
{"arm1176jz-s", ARM_ARCH_V6ZK, FPU_NONE, NULL},
|
ARM_CPU_OPT ("arm1156t2-s", ARM_ARCH_V6T2, FPU_NONE, NULL),
|
||||||
{"arm1176jzf-s", ARM_ARCH_V6ZK, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("arm1156t2f-s", ARM_ARCH_V6T2, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"cortex-a5", ARM_ARCH_V7A_MP_SEC,
|
ARM_CPU_OPT ("arm1176jz-s", ARM_ARCH_V6ZK, FPU_NONE, NULL),
|
||||||
FPU_NONE, "Cortex-A5"},
|
ARM_CPU_OPT ("arm1176jzf-s", ARM_ARCH_V6ZK, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"cortex-a7", ARM_ARCH_V7A_IDIV_MP_SEC_VIRT,
|
ARM_CPU_OPT ("cortex-a5", ARM_ARCH_V7A_MP_SEC,
|
||||||
|
FPU_NONE, "Cortex-A5"),
|
||||||
|
ARM_CPU_OPT ("cortex-a7", ARM_ARCH_V7A_IDIV_MP_SEC_VIRT,
|
||||||
FPU_ARCH_NEON_VFP_V4,
|
FPU_ARCH_NEON_VFP_V4,
|
||||||
"Cortex-A7"},
|
"Cortex-A7"),
|
||||||
{"cortex-a8", ARM_ARCH_V7A_SEC,
|
ARM_CPU_OPT ("cortex-a8", ARM_ARCH_V7A_SEC,
|
||||||
ARM_FEATURE (0, FPU_VFP_V3
|
ARM_FEATURE (0, FPU_VFP_V3
|
||||||
| FPU_NEON_EXT_V1),
|
| FPU_NEON_EXT_V1),
|
||||||
"Cortex-A8"},
|
"Cortex-A8"),
|
||||||
{"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 (0, FPU_VFP_V3
|
||||||
| FPU_NEON_EXT_V1),
|
| FPU_NEON_EXT_V1),
|
||||||
"Cortex-A9"},
|
"Cortex-A9"),
|
||||||
{"cortex-a15", ARM_ARCH_V7A_IDIV_MP_SEC_VIRT,
|
ARM_CPU_OPT ("cortex-a15", ARM_ARCH_V7A_IDIV_MP_SEC_VIRT,
|
||||||
FPU_ARCH_NEON_VFP_V4,
|
FPU_ARCH_NEON_VFP_V4,
|
||||||
"Cortex-A15"},
|
"Cortex-A15"),
|
||||||
{"cortex-r4", ARM_ARCH_V7R, FPU_NONE, "Cortex-R4"},
|
ARM_CPU_OPT ("cortex-r4", ARM_ARCH_V7R, FPU_NONE, "Cortex-R4"),
|
||||||
{"cortex-r4f", ARM_ARCH_V7R, FPU_ARCH_VFP_V3D16,
|
ARM_CPU_OPT ("cortex-r4f", ARM_ARCH_V7R, FPU_ARCH_VFP_V3D16,
|
||||||
"Cortex-R4F"},
|
"Cortex-R4F"),
|
||||||
{"cortex-r5", ARM_ARCH_V7R_IDIV,
|
ARM_CPU_OPT ("cortex-r5", ARM_ARCH_V7R_IDIV,
|
||||||
FPU_NONE, "Cortex-R5"},
|
FPU_NONE, "Cortex-R5"),
|
||||||
{"cortex-m4", ARM_ARCH_V7EM, FPU_NONE, "Cortex-M4"},
|
ARM_CPU_OPT ("cortex-m4", ARM_ARCH_V7EM, FPU_NONE, "Cortex-M4"),
|
||||||
{"cortex-m3", ARM_ARCH_V7M, FPU_NONE, "Cortex-M3"},
|
ARM_CPU_OPT ("cortex-m3", ARM_ARCH_V7M, FPU_NONE, "Cortex-M3"),
|
||||||
{"cortex-m1", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M1"},
|
ARM_CPU_OPT ("cortex-m1", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M1"),
|
||||||
{"cortex-m0", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M0"},
|
ARM_CPU_OPT ("cortex-m0", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M0"),
|
||||||
/* ??? XSCALE is really an architecture. */
|
/* ??? XSCALE is really an architecture. */
|
||||||
{"xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL),
|
||||||
/* ??? iwmmxt is not a processor. */
|
/* ??? iwmmxt is not a processor. */
|
||||||
{"iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP_V2, NULL),
|
||||||
{"iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP_V2, NULL),
|
||||||
{"i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL},
|
ARM_CPU_OPT ("i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL),
|
||||||
/* Maverick */
|
/* Maverick */
|
||||||
{"ep9312", ARM_FEATURE (ARM_AEXT_V4T, ARM_CEXT_MAVERICK), FPU_ARCH_MAVERICK, "ARM920T"},
|
ARM_CPU_OPT ("ep9312", ARM_FEATURE (ARM_AEXT_V4T, ARM_CEXT_MAVERICK),
|
||||||
{NULL, ARM_ARCH_NONE, ARM_ARCH_NONE, NULL}
|
FPU_ARCH_MAVERICK,
|
||||||
|
"ARM920T"),
|
||||||
|
{ NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE, NULL }
|
||||||
};
|
};
|
||||||
|
#undef ARM_CPU_OPT
|
||||||
|
|
||||||
struct arm_arch_option_table
|
struct arm_arch_option_table
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
size_t name_len;
|
||||||
const arm_feature_set value;
|
const arm_feature_set value;
|
||||||
const arm_feature_set default_fpu;
|
const arm_feature_set default_fpu;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This list should, at a minimum, contain all the architecture names
|
/* This list should, at a minimum, contain all the architecture names
|
||||||
recognized by GCC. */
|
recognized by GCC. */
|
||||||
|
#define ARM_ARCH_OPT(N, V, DF) { N, sizeof (N) - 1, V, DF }
|
||||||
static const struct arm_arch_option_table arm_archs[] =
|
static const struct arm_arch_option_table arm_archs[] =
|
||||||
{
|
{
|
||||||
{"all", ARM_ANY, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("all", ARM_ANY, FPU_ARCH_FPA),
|
||||||
{"armv1", ARM_ARCH_V1, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv1", ARM_ARCH_V1, FPU_ARCH_FPA),
|
||||||
{"armv2", ARM_ARCH_V2, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv2", ARM_ARCH_V2, FPU_ARCH_FPA),
|
||||||
{"armv2a", ARM_ARCH_V2S, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv2a", ARM_ARCH_V2S, FPU_ARCH_FPA),
|
||||||
{"armv2s", ARM_ARCH_V2S, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv2s", ARM_ARCH_V2S, FPU_ARCH_FPA),
|
||||||
{"armv3", ARM_ARCH_V3, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv3", ARM_ARCH_V3, FPU_ARCH_FPA),
|
||||||
{"armv3m", ARM_ARCH_V3M, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv3m", ARM_ARCH_V3M, FPU_ARCH_FPA),
|
||||||
{"armv4", ARM_ARCH_V4, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv4", ARM_ARCH_V4, FPU_ARCH_FPA),
|
||||||
{"armv4xm", ARM_ARCH_V4xM, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv4xm", ARM_ARCH_V4xM, FPU_ARCH_FPA),
|
||||||
{"armv4t", ARM_ARCH_V4T, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv4t", ARM_ARCH_V4T, FPU_ARCH_FPA),
|
||||||
{"armv4txm", ARM_ARCH_V4TxM, FPU_ARCH_FPA},
|
ARM_ARCH_OPT ("armv4txm", ARM_ARCH_V4TxM, FPU_ARCH_FPA),
|
||||||
{"armv5", ARM_ARCH_V5, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv5", ARM_ARCH_V5, FPU_ARCH_VFP),
|
||||||
{"armv5t", ARM_ARCH_V5T, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv5t", ARM_ARCH_V5T, FPU_ARCH_VFP),
|
||||||
{"armv5txm", ARM_ARCH_V5TxM, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv5txm", ARM_ARCH_V5TxM, FPU_ARCH_VFP),
|
||||||
{"armv5te", ARM_ARCH_V5TE, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv5te", ARM_ARCH_V5TE, FPU_ARCH_VFP),
|
||||||
{"armv5texp", ARM_ARCH_V5TExP, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv5texp", ARM_ARCH_V5TExP, FPU_ARCH_VFP),
|
||||||
{"armv5tej", ARM_ARCH_V5TEJ, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv5tej", ARM_ARCH_V5TEJ, FPU_ARCH_VFP),
|
||||||
{"armv6", ARM_ARCH_V6, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6", ARM_ARCH_V6, FPU_ARCH_VFP),
|
||||||
{"armv6j", ARM_ARCH_V6, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6j", ARM_ARCH_V6, FPU_ARCH_VFP),
|
||||||
{"armv6k", ARM_ARCH_V6K, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6k", ARM_ARCH_V6K, FPU_ARCH_VFP),
|
||||||
{"armv6z", ARM_ARCH_V6Z, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6z", ARM_ARCH_V6Z, FPU_ARCH_VFP),
|
||||||
{"armv6zk", ARM_ARCH_V6ZK, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6zk", ARM_ARCH_V6ZK, FPU_ARCH_VFP),
|
||||||
{"armv6t2", ARM_ARCH_V6T2, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6t2", ARM_ARCH_V6T2, FPU_ARCH_VFP),
|
||||||
{"armv6kt2", ARM_ARCH_V6KT2, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6kt2", ARM_ARCH_V6KT2, FPU_ARCH_VFP),
|
||||||
{"armv6zt2", ARM_ARCH_V6ZT2, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6zt2", ARM_ARCH_V6ZT2, FPU_ARCH_VFP),
|
||||||
{"armv6zkt2", ARM_ARCH_V6ZKT2, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6zkt2", ARM_ARCH_V6ZKT2, FPU_ARCH_VFP),
|
||||||
{"armv6-m", ARM_ARCH_V6M, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6-m", ARM_ARCH_V6M, FPU_ARCH_VFP),
|
||||||
{"armv6s-m", ARM_ARCH_V6SM, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv6s-m", ARM_ARCH_V6SM, FPU_ARCH_VFP),
|
||||||
{"armv7", ARM_ARCH_V7, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7", ARM_ARCH_V7, FPU_ARCH_VFP),
|
||||||
/* The official spelling of the ARMv7 profile variants is the dashed form.
|
/* The official spelling of the ARMv7 profile variants is the dashed form.
|
||||||
Accept the non-dashed form for compatibility with old toolchains. */
|
Accept the non-dashed form for compatibility with old toolchains. */
|
||||||
{"armv7a", ARM_ARCH_V7A, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7a", ARM_ARCH_V7A, FPU_ARCH_VFP),
|
||||||
{"armv7r", ARM_ARCH_V7R, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7r", ARM_ARCH_V7R, FPU_ARCH_VFP),
|
||||||
{"armv7m", ARM_ARCH_V7M, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7m", ARM_ARCH_V7M, FPU_ARCH_VFP),
|
||||||
{"armv7-a", ARM_ARCH_V7A, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7-a", ARM_ARCH_V7A, FPU_ARCH_VFP),
|
||||||
{"armv7-r", ARM_ARCH_V7R, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7-r", ARM_ARCH_V7R, FPU_ARCH_VFP),
|
||||||
{"armv7-m", ARM_ARCH_V7M, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7-m", ARM_ARCH_V7M, FPU_ARCH_VFP),
|
||||||
{"armv7e-m", ARM_ARCH_V7EM, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("armv7e-m", ARM_ARCH_V7EM, FPU_ARCH_VFP),
|
||||||
{"xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP),
|
||||||
{"iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP),
|
||||||
{"iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP},
|
ARM_ARCH_OPT ("iwmmxt2", ARM_ARCH_IWMMXT2,FPU_ARCH_VFP),
|
||||||
{NULL, ARM_ARCH_NONE, ARM_ARCH_NONE}
|
{ NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE }
|
||||||
};
|
};
|
||||||
|
#undef ARM_ARCH_OPT
|
||||||
|
|
||||||
/* ISA extensions in the co-processor and main instruction set space. */
|
/* ISA extensions in the co-processor and main instruction set space. */
|
||||||
struct arm_option_extension_value_table
|
struct arm_option_extension_value_table
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
size_t name_len;
|
||||||
const arm_feature_set value;
|
const arm_feature_set value;
|
||||||
const arm_feature_set allowed_archs;
|
const arm_feature_set allowed_archs;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The following table must be in alphabetical order with a NULL last entry.
|
/* The following table must be in alphabetical order with a NULL last entry.
|
||||||
*/
|
*/
|
||||||
|
#define ARM_EXT_OPT(N, V, AA) { N, sizeof (N) - 1, V, AA }
|
||||||
static const struct arm_option_extension_value_table arm_extensions[] =
|
static const struct arm_option_extension_value_table arm_extensions[] =
|
||||||
{
|
{
|
||||||
{"idiv", ARM_FEATURE (ARM_EXT_ADIV | ARM_EXT_DIV, 0),
|
ARM_EXT_OPT ("idiv", ARM_FEATURE (ARM_EXT_ADIV | ARM_EXT_DIV, 0),
|
||||||
ARM_FEATURE (ARM_EXT_V7A | ARM_EXT_V7R, 0)},
|
ARM_FEATURE (ARM_EXT_V7A | ARM_EXT_V7R, 0)),
|
||||||
{"iwmmxt", ARM_FEATURE (0, ARM_CEXT_IWMMXT), ARM_ANY},
|
ARM_EXT_OPT ("iwmmxt",ARM_FEATURE (0, ARM_CEXT_IWMMXT), ARM_ANY),
|
||||||
{"iwmmxt2", ARM_FEATURE (0, ARM_CEXT_IWMMXT2), ARM_ANY},
|
ARM_EXT_OPT ("iwmmxt2",
|
||||||
{"maverick", ARM_FEATURE (0, ARM_CEXT_MAVERICK), ARM_ANY},
|
ARM_FEATURE (0, ARM_CEXT_IWMMXT2), ARM_ANY),
|
||||||
{"mp", ARM_FEATURE (ARM_EXT_MP, 0),
|
ARM_EXT_OPT ("maverick",
|
||||||
ARM_FEATURE (ARM_EXT_V7A | ARM_EXT_V7R, 0)},
|
ARM_FEATURE (0, ARM_CEXT_MAVERICK), ARM_ANY),
|
||||||
{"os", ARM_FEATURE (ARM_EXT_OS, 0),
|
ARM_EXT_OPT ("mp", ARM_FEATURE (ARM_EXT_MP, 0),
|
||||||
ARM_FEATURE (ARM_EXT_V6M, 0)},
|
ARM_FEATURE (ARM_EXT_V7A | ARM_EXT_V7R, 0)),
|
||||||
{"sec", ARM_FEATURE (ARM_EXT_SEC, 0),
|
ARM_EXT_OPT ("os", ARM_FEATURE (ARM_EXT_OS, 0),
|
||||||
ARM_FEATURE (ARM_EXT_V6K | ARM_EXT_V7A, 0)},
|
ARM_FEATURE (ARM_EXT_V6M, 0)),
|
||||||
{"virt", ARM_FEATURE (ARM_EXT_VIRT | ARM_EXT_ADIV | ARM_EXT_DIV, 0),
|
ARM_EXT_OPT ("sec", ARM_FEATURE (ARM_EXT_SEC, 0),
|
||||||
ARM_FEATURE (ARM_EXT_V7A, 0)},
|
ARM_FEATURE (ARM_EXT_V6K | ARM_EXT_V7A, 0)),
|
||||||
{"xscale", ARM_FEATURE (0, ARM_CEXT_XSCALE), ARM_ANY},
|
ARM_EXT_OPT ("virt", ARM_FEATURE (ARM_EXT_VIRT | ARM_EXT_ADIV
|
||||||
{NULL, ARM_ARCH_NONE, ARM_ARCH_NONE}
|
| ARM_EXT_DIV, 0),
|
||||||
|
ARM_FEATURE (ARM_EXT_V7A, 0)),
|
||||||
|
ARM_EXT_OPT ("xscale",ARM_FEATURE (0, ARM_CEXT_XSCALE), ARM_ANY),
|
||||||
|
{ NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE }
|
||||||
};
|
};
|
||||||
|
#undef ARM_EXT_OPT
|
||||||
|
|
||||||
/* ISA floating-point and Advanced SIMD extensions. */
|
/* ISA floating-point and Advanced SIMD extensions. */
|
||||||
struct arm_option_fpu_value_table
|
struct arm_option_fpu_value_table
|
||||||
|
@ -23194,7 +23210,7 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p)
|
||||||
while (str != NULL && *str != 0)
|
while (str != NULL && *str != 0)
|
||||||
{
|
{
|
||||||
char *ext;
|
char *ext;
|
||||||
size_t optlen;
|
size_t len;
|
||||||
|
|
||||||
if (*str != '+')
|
if (*str != '+')
|
||||||
{
|
{
|
||||||
|
@ -23206,12 +23222,11 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p)
|
||||||
ext = strchr (str, '+');
|
ext = strchr (str, '+');
|
||||||
|
|
||||||
if (ext != NULL)
|
if (ext != NULL)
|
||||||
optlen = ext - str;
|
len = ext - str;
|
||||||
else
|
else
|
||||||
optlen = strlen (str);
|
len = strlen (str);
|
||||||
|
|
||||||
if (optlen >= 2
|
if (len >= 2 && strncmp (str, "no", 2) == 0)
|
||||||
&& strncmp (str, "no", 2) == 0)
|
|
||||||
{
|
{
|
||||||
if (adding_value != 0)
|
if (adding_value != 0)
|
||||||
{
|
{
|
||||||
|
@ -23219,10 +23234,10 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p)
|
||||||
opt = arm_extensions;
|
opt = arm_extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
optlen -= 2;
|
len -= 2;
|
||||||
str += 2;
|
str += 2;
|
||||||
}
|
}
|
||||||
else if (optlen > 0)
|
else if (len > 0)
|
||||||
{
|
{
|
||||||
if (adding_value == -1)
|
if (adding_value == -1)
|
||||||
{
|
{
|
||||||
|
@ -23237,7 +23252,7 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optlen == 0)
|
if (len == 0)
|
||||||
{
|
{
|
||||||
as_bad (_("missing architectural extension"));
|
as_bad (_("missing architectural extension"));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -23248,8 +23263,7 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p)
|
||||||
|
|
||||||
/* Scan over the options table trying to find an exact match. */
|
/* Scan over the options table trying to find an exact match. */
|
||||||
for (; opt->name != NULL; opt++)
|
for (; opt->name != NULL; opt++)
|
||||||
if (strncmp (opt->name, str, optlen) == 0
|
if (opt->name_len == len && strncmp (opt->name, str, len) == 0)
|
||||||
&& strlen (opt->name) == optlen)
|
|
||||||
{
|
{
|
||||||
/* Check we can apply the extension to this architecture. */
|
/* Check we can apply the extension to this architecture. */
|
||||||
if (!ARM_CPU_HAS_FEATURE (*ext_set, opt->allowed_archs))
|
if (!ARM_CPU_HAS_FEATURE (*ext_set, opt->allowed_archs))
|
||||||
|
@ -23273,7 +23287,7 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p)
|
||||||
alphabetical order, or because it does not exist? */
|
alphabetical order, or because it does not exist? */
|
||||||
|
|
||||||
for (opt = arm_extensions; opt->name != NULL; opt++)
|
for (opt = arm_extensions; opt->name != NULL; opt++)
|
||||||
if (strncmp (opt->name, str, optlen) == 0)
|
if (opt->name_len == len && strncmp (opt->name, str, len) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (opt->name == NULL)
|
if (opt->name == NULL)
|
||||||
|
@ -23302,21 +23316,21 @@ arm_parse_cpu (char * str)
|
||||||
{
|
{
|
||||||
const struct arm_cpu_option_table *opt;
|
const struct arm_cpu_option_table *opt;
|
||||||
char *ext = strchr (str, '+');
|
char *ext = strchr (str, '+');
|
||||||
int optlen;
|
size_t len;
|
||||||
|
|
||||||
if (ext != NULL)
|
if (ext != NULL)
|
||||||
optlen = ext - str;
|
len = ext - str;
|
||||||
else
|
else
|
||||||
optlen = strlen (str);
|
len = strlen (str);
|
||||||
|
|
||||||
if (optlen == 0)
|
if (len == 0)
|
||||||
{
|
{
|
||||||
as_bad (_("missing cpu name `%s'"), str);
|
as_bad (_("missing cpu name `%s'"), str);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (opt = arm_cpus; opt->name != NULL; opt++)
|
for (opt = arm_cpus; opt->name != NULL; opt++)
|
||||||
if (strncmp (opt->name, str, optlen) == 0)
|
if (opt->name_len == len && strncmp (opt->name, str, len) == 0)
|
||||||
{
|
{
|
||||||
mcpu_cpu_opt = &opt->value;
|
mcpu_cpu_opt = &opt->value;
|
||||||
mcpu_fpu_opt = &opt->default_fpu;
|
mcpu_fpu_opt = &opt->default_fpu;
|
||||||
|
@ -23324,9 +23338,9 @@ arm_parse_cpu (char * str)
|
||||||
strcpy (selected_cpu_name, opt->canonical_name);
|
strcpy (selected_cpu_name, opt->canonical_name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i;
|
size_t i;
|
||||||
|
|
||||||
for (i = 0; i < optlen; i++)
|
for (i = 0; i < len; i++)
|
||||||
selected_cpu_name[i] = TOUPPER (opt->name[i]);
|
selected_cpu_name[i] = TOUPPER (opt->name[i]);
|
||||||
selected_cpu_name[i] = 0;
|
selected_cpu_name[i] = 0;
|
||||||
}
|
}
|
||||||
|
@ -23346,21 +23360,21 @@ arm_parse_arch (char * str)
|
||||||
{
|
{
|
||||||
const struct arm_arch_option_table *opt;
|
const struct arm_arch_option_table *opt;
|
||||||
char *ext = strchr (str, '+');
|
char *ext = strchr (str, '+');
|
||||||
int optlen;
|
size_t len;
|
||||||
|
|
||||||
if (ext != NULL)
|
if (ext != NULL)
|
||||||
optlen = ext - str;
|
len = ext - str;
|
||||||
else
|
else
|
||||||
optlen = strlen (str);
|
len = strlen (str);
|
||||||
|
|
||||||
if (optlen == 0)
|
if (len == 0)
|
||||||
{
|
{
|
||||||
as_bad (_("missing architecture name `%s'"), str);
|
as_bad (_("missing architecture name `%s'"), str);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (opt = arm_archs; opt->name != NULL; opt++)
|
for (opt = arm_archs; opt->name != NULL; opt++)
|
||||||
if (strncmp (opt->name, str, optlen) == 0)
|
if (opt->name_len == len && strncmp (opt->name, str, len) == 0)
|
||||||
{
|
{
|
||||||
march_cpu_opt = &opt->value;
|
march_cpu_opt = &opt->value;
|
||||||
march_fpu_opt = &opt->default_fpu;
|
march_fpu_opt = &opt->default_fpu;
|
||||||
|
@ -23826,6 +23840,7 @@ s_arm_cpu (int ignored ATTRIBUTE_UNUSED)
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; opt->name[i]; i++)
|
for (i = 0; opt->name[i]; i++)
|
||||||
selected_cpu_name[i] = TOUPPER (opt->name[i]);
|
selected_cpu_name[i] = TOUPPER (opt->name[i]);
|
||||||
|
|
||||||
selected_cpu_name[i] = 0;
|
selected_cpu_name[i] = 0;
|
||||||
}
|
}
|
||||||
ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt);
|
ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt);
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2011-11-30 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||||
|
|
||||||
|
* gas/arm/cmdline-bad-arch.d: New test case.
|
||||||
|
* gas/arm/cmdline-bad-cpu.d: Likewise.
|
||||||
|
|
||||||
2011-12-03 Richard Sandiford <rdsandiford@googlemail.com>
|
2011-12-03 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* gas/mips/mips.exp (run_dump_test_arch): Add an opts parameter.
|
* gas/mips/mips.exp (run_dump_test_arch): Add an opts parameter.
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
# name: Bad -march command line
|
||||||
|
# as: -march=armv
|
||||||
|
# error: unknown architecture `armv'
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
# name: Bad -mcpu command line
|
||||||
|
# as: -mcpu=cortex
|
||||||
|
# error: unknown cpu `cortex'
|
||||||
|
|
Loading…
Reference in New Issue