* config/tc-arm.c (FPU_MAVERICK): Define.

(FPU_ARCH_MAVERICK): Define.
	(arm_float_abi): Define.
	(mfloat_abi_opt): New variable.
	(md_begin): Use them.
	(arm_opts): Add msoft-float and mhard-float.
	(arm_cpus): Use FPU_ARCH_MAVERICK.
	(arm_fpus): Add maverick.
	(arm_float_abis): Add.
	(arm_parse_float_abi): New function.
	(arm_long_options): Add mfloat-abi.
	* doc/as.texinfo: Document -mfloat-abi=.
	* doc/c-arm.text: Ditto. Menution -fpu=maverick.
This commit is contained in:
Paul Brook
2003-12-10 12:11:26 +00:00
parent 1a9a8ab429
commit 33a392fb88
4 changed files with 96 additions and 9 deletions

View File

@ -1,3 +1,19 @@
2003-12-10 Paul Brook <paul@codesourcery.com>
* config/tc-arm.c (FPU_MAVERICK): Define.
(FPU_ARCH_MAVERICK): Define.
(arm_float_abi): Define.
(mfloat_abi_opt): New variable.
(md_begin): Use them.
(arm_opts): Add msoft-float and mhard-float.
(arm_cpus): Use FPU_ARCH_MAVERICK.
(arm_fpus): Add maverick.
(arm_float_abis): Add.
(arm_parse_float_abi): New function.
(arm_long_options): Add mfloat-abi.
* doc/as.texinfo: Document -mfloat-abi=.
* doc/c-arm.text: Ditto. Menution -fpu=maverick.
2003-12-09 Paul Brook <paul@codesourcery.com> 2003-12-09 Paul Brook <paul@codesourcery.com>
* config/tc-arm.c (do_umaal): Fix typo. * config/tc-arm.c (do_umaal): Fix typo.

View File

@ -102,6 +102,7 @@
#define FPU_VFP_EXT_V1xD 0x10000000 /* Base VFP instruction set. */ #define FPU_VFP_EXT_V1xD 0x10000000 /* Base VFP instruction set. */
#define FPU_VFP_EXT_V1 0x08000000 /* Double-precision insns. */ #define FPU_VFP_EXT_V1 0x08000000 /* Double-precision insns. */
#define FPU_VFP_EXT_V2 0x04000000 /* ARM10E VFPr1. */ #define FPU_VFP_EXT_V2 0x04000000 /* ARM10E VFPr1. */
#define FPU_MAVERICK 0x02000000 /* Cirrus Maverick. */
#define FPU_NONE 0 #define FPU_NONE 0
#define FPU_ARCH_FPE FPU_FPA_EXT_V1 #define FPU_ARCH_FPE FPU_FPA_EXT_V1
@ -112,6 +113,15 @@
#define FPU_ARCH_VFP_V1 (FPU_ARCH_VFP_V1xD | FPU_VFP_EXT_V1) #define FPU_ARCH_VFP_V1 (FPU_ARCH_VFP_V1xD | FPU_VFP_EXT_V1)
#define FPU_ARCH_VFP_V2 (FPU_ARCH_VFP_V1 | FPU_VFP_EXT_V2) #define FPU_ARCH_VFP_V2 (FPU_ARCH_VFP_V1 | FPU_VFP_EXT_V2)
#define FPU_ARCH_MAVERICK FPU_MAVERICK
enum arm_float_abi
{
ARM_FLOAT_ABI_HARD,
ARM_FLOAT_ABI_SOFTFP,
ARM_FLOAT_ABI_SOFT
};
/* Types of processor to assemble for. */ /* Types of processor to assemble for. */
#define ARM_1 ARM_ARCH_V1 #define ARM_1 ARM_ARCH_V1
#define ARM_2 ARM_ARCH_V2 #define ARM_2 ARM_ARCH_V2
@ -178,6 +188,7 @@ static int mcpu_fpu_opt = -1;
static int march_cpu_opt = -1; static int march_cpu_opt = -1;
static int march_fpu_opt = -1; static int march_fpu_opt = -1;
static int mfpu_opt = -1; static int mfpu_opt = -1;
static int mfloat_abi_opt = -1;
/* This array holds the chars that always start a comment. If the /* This array holds the chars that always start a comment. If the
pre-processor is disabled, these aren't very useful. */ pre-processor is disabled, these aren't very useful. */
@ -2536,6 +2547,7 @@ static int arm_parse_extension PARAMS ((char *, int *));
static int arm_parse_cpu PARAMS ((char *)); static int arm_parse_cpu PARAMS ((char *));
static int arm_parse_arch PARAMS ((char *)); static int arm_parse_arch PARAMS ((char *));
static int arm_parse_fpu PARAMS ((char *)); static int arm_parse_fpu PARAMS ((char *));
static int arm_parse_float_abi PARAMS ((char *));
#if 0 /* Suppressed - for now. */ #if 0 /* Suppressed - for now. */
#if defined OBJ_COFF || defined OBJ_ELF #if defined OBJ_COFF || defined OBJ_ELF
static void arm_add_note PARAMS ((const char *, const char *, unsigned int)); static void arm_add_note PARAMS ((const char *, const char *, unsigned int));
@ -11653,16 +11665,27 @@ md_begin ()
if (pic_code) flags |= F_PIC; if (pic_code) flags |= F_PIC;
if ((cpu_variant & FPU_ANY) == FPU_NONE if ((cpu_variant & FPU_ANY) == FPU_NONE
|| (cpu_variant & FPU_ANY) == FPU_ARCH_VFP) /* VFP layout only. */ || (cpu_variant & FPU_ANY) == FPU_ARCH_VFP) /* VFP layout only. */
{
flags |= F_SOFT_FLOAT; flags |= F_SOFT_FLOAT;
}
switch (mfloat_abi_opt)
{
case ARM_FLOAT_ABI_SOFT:
case ARM_FLOAT_ABI_SOFTFP:
flags |= F_SOFT_FLOAT;
break;
case ARM_FLOAT_ABI_HARD:
if (flags & F_SOFT_FLOAT)
as_bad (_("hard-float conflicts with specified fpu"));
break;
}
/* Using VFP conventions (even if soft-float). */ /* Using VFP conventions (even if soft-float). */
if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT; if (cpu_variant & FPU_VFP_EXT_NONE) flags |= F_VFP_FLOAT;
#if defined OBJ_ELF #if defined OBJ_ELF
if (cpu_variant & ARM_CEXT_MAVERICK) if (cpu_variant & FPU_ARCH_MAVERICK)
{
flags &= ~ F_SOFT_FLOAT;
flags |= EF_ARM_MAVERICK_FLOAT; flags |= EF_ARM_MAVERICK_FLOAT;
}
#endif #endif
bfd_set_private_flags (stdoutput, flags); bfd_set_private_flags (stdoutput, flags);
@ -13281,7 +13304,7 @@ static struct arm_cpu_option_table arm_cpus[] =
{"iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP_V2}, {"iwmmxt", ARM_ARCH_IWMMXT, FPU_ARCH_VFP_V2},
{"i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2}, {"i80200", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2},
/* Maverick */ /* Maverick */
{"ep9312", ARM_ARCH_V4T | ARM_CEXT_MAVERICK, FPU_NONE}, {"ep9312", ARM_ARCH_V4T | ARM_CEXT_MAVERICK, FPU_ARCH_MAVERICK},
{NULL, 0, 0} {NULL, 0, 0}
}; };
@ -13362,6 +13385,21 @@ static struct arm_fpu_option_table arm_fpus[] =
{"arm1020t", FPU_ARCH_VFP_V1}, {"arm1020t", FPU_ARCH_VFP_V1},
{"arm1020e", FPU_ARCH_VFP_V2}, {"arm1020e", FPU_ARCH_VFP_V2},
{"arm1136jfs", FPU_ARCH_VFP_V2}, {"arm1136jfs", FPU_ARCH_VFP_V2},
{"maverick", FPU_ARCH_MAVERICK},
{NULL, 0}
};
struct arm_float_abi_option_table
{
char *name;
int value;
};
static struct arm_float_abi_option_table arm_float_abis[] =
{
{"hard", ARM_FLOAT_ABI_HARD},
{"softfp", ARM_FLOAT_ABI_SOFTFP},
{"soft", ARM_FLOAT_ABI_SOFT},
{NULL, 0} {NULL, 0}
}; };
@ -13511,6 +13549,23 @@ arm_parse_fpu (str)
return 0; return 0;
} }
static int
arm_parse_float_abi (str)
char * str;
{
struct arm_float_abi_option_table *opt;
for (opt = arm_float_abis; opt->name != NULL; opt++)
if (strcmp (opt->name, str) == 0)
{
mfloat_abi_opt = opt->value;
return 1;
}
as_bad (_("unknown floating point abi `%s'\n"), str);
return 0;
}
struct arm_long_option_table arm_long_opts[] = struct arm_long_option_table arm_long_opts[] =
{ {
{"mcpu=", N_("<cpu name>\t assemble for CPU <cpu name>"), {"mcpu=", N_("<cpu name>\t assemble for CPU <cpu name>"),
@ -13519,6 +13574,8 @@ struct arm_long_option_table arm_long_opts[] =
arm_parse_arch, NULL}, arm_parse_arch, NULL},
{"mfpu=", N_("<fpu name>\t assemble for FPU architecture <fpu name>"), {"mfpu=", N_("<fpu name>\t assemble for FPU architecture <fpu name>"),
arm_parse_fpu, NULL}, arm_parse_fpu, NULL},
{"mfloat-abi=", N_("<abi>\t assemble for floating point ABI <abi>"),
arm_parse_float_abi, NULL},
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };

View File

@ -297,7 +297,8 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
@c Don't document the deprecated options @c Don't document the deprecated options
[@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]] [@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]]
[@b{-march}=@var{architecture}[+@var{extension}@dots{}]] [@b{-march}=@var{architecture}[+@var{extension}@dots{}]]
[@b{-mfpu}=@var{floating-point-fromat}] [@b{-mfpu}=@var{floating-point-format}]
[@b{-mfloat-abi}=@var{abi}]
[@b{-mthumb}] [@b{-mthumb}]
[@b{-EB}|@b{-EL}] [@b{-EB}|@b{-EL}]
[@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}| [@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}|
@ -635,6 +636,8 @@ Specify which ARM processor variant is the target.
Specify which ARM architecture variant is used by the target. Specify which ARM architecture variant is used by the target.
@item -mfpu=@var{floating-point-format} @item -mfpu=@var{floating-point-format}
Select which Floating Point architecture is the target. Select which Floating Point architecture is the target.
@item -mfloat-abi=@var{abi}
Select which floating point ABI is in use.
@item -mthumb @item -mthumb
Enable Thumb only instruction decoding. Enable Thumb only instruction decoding.
@item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi @item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi

View File

@ -166,8 +166,9 @@ The following format options are recognized:
@code{vfpxd}, @code{vfpxd},
@code{arm1020t}, @code{arm1020t},
@code{arm1020e}, @code{arm1020e},
@code{arm1136jfs}
and and
@code{arm1136jfs}. @code{maverick}.
In addition to determining which instructions are assembled, this option In addition to determining which instructions are assembled, this option
also affects the way in which the @code{.double} assembler directive behaves also affects the way in which the @code{.double} assembler directive behaves
@ -213,6 +214,16 @@ registers rather than integer registers.
This indicates that the reentrant variant of the APCS should be used. This indicates that the reentrant variant of the APCS should be used.
This variant supports position independent code. This variant supports position independent code.
@cindex @code{-mfloat-abi=} command line option, ARM
@item -mfloat-abi=@var{abi}
This option specifies that the output generated by the assembler should be
marked as using specified floating point ABI.
The following values are recognized:
@code{soft},
@code{softfp}
and
@code{hard}.
@cindex @code{-EB} command line option, ARM @cindex @code{-EB} command line option, ARM
@item -EB @item -EB
This option specifies that the output generated by the assembler should This option specifies that the output generated by the assembler should