[llvm-commits] [llvm-gcc-4.2] r99071 - in /llvm-gcc-4.2/trunk/gcc/config/arm: arm.c arm.h bpabi.h darwin.h fpa.md linux-elf.h netbsd-elf.h
Anton Korobeynikov
asl at math.spbu.ru
Sat Mar 20 12:21:21 PDT 2010
Author: asl
Date: Sat Mar 20 14:21:21 2010
New Revision: 99071
URL: http://llvm.org/viewvc/llvm-project?rev=99071&view=rev
Log:
Refactor ARM FPU features handling - merge different arrays into one big one. This simplifies alot all the mess we have with different features which can be enabled / disabled independently.
Modified:
llvm-gcc-4.2/trunk/gcc/config/arm/arm.c
llvm-gcc-4.2/trunk/gcc/config/arm/arm.h
llvm-gcc-4.2/trunk/gcc/config/arm/bpabi.h
llvm-gcc-4.2/trunk/gcc/config/arm/darwin.h
llvm-gcc-4.2/trunk/gcc/config/arm/fpa.md
llvm-gcc-4.2/trunk/gcc/config/arm/linux-elf.h
llvm-gcc-4.2/trunk/gcc/config/arm/netbsd-elf.h
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.c?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/arm.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.c Sat Mar 20 14:21:21 2010
@@ -544,14 +544,11 @@
static enum processor_type arm_default_cpu = arm_none;
/* APPLE LOCAL end v7 support. Merge from mainline */
-/* Which floating point model to use. */
-enum arm_fp_model arm_fp_model;
-
-/* Which floating point hardware is available. */
-enum fputype arm_fpu_arch;
+/* LLVM LOCAL begin */
+int arm_fpu_attr;
-/* Which floating point hardware to schedule for. */
-enum fputype arm_fpu_tune;
+const struct fpu_desc * arm_fpu_desc;
+/* LLVM LOCAL end */
/* Whether to use floating point hardware. */
enum float_abi_type arm_float_abi;
@@ -881,49 +878,26 @@
char arm_arch_name[ARM_ARCH_NAME_SIZE] = "__ARM_ARCH_0UNK__";
/* APPLE LOCAL end v7 support. Merge from Codesourcery */
-struct fpu_desc
-{
- const char * name;
- enum fputype fpu;
-};
-
+/* LLVM LOCAL delete fpu_desc type fwd decl */
/* Available values for -mfpu=. */
+/* LLVM LOCAL begin */
static const struct fpu_desc all_fpus[] =
{
- {"fpa", FPUTYPE_FPA},
- {"fpe2", FPUTYPE_FPA_EMU2},
- {"fpe3", FPUTYPE_FPA_EMU2},
- {"maverick", FPUTYPE_MAVERICK},
-/* APPLE LOCAL begin v7 support. Merge from mainline */
- {"vfp", FPUTYPE_VFP},
- {"vfp3", FPUTYPE_VFP3},
-/* APPLE LOCAL end v7 support. Merge from mainline */
-/* APPLE LOCAL v7 support. Merge from Codesourcery */
- {"neon", FPUTYPE_NEON}
-};
-
-
-/* Floating point models used by the different hardware.
- See fputype in arm.h. */
-
-static const enum fputype fp_model_for_fpu[] =
-{
- /* No FP hardware. */
- ARM_FP_MODEL_UNKNOWN, /* FPUTYPE_NONE */
- ARM_FP_MODEL_FPA, /* FPUTYPE_FPA */
- ARM_FP_MODEL_FPA, /* FPUTYPE_FPA_EMU2 */
- ARM_FP_MODEL_FPA, /* FPUTYPE_FPA_EMU3 */
- ARM_FP_MODEL_MAVERICK, /* FPUTYPE_MAVERICK */
-/* APPLE LOCAL v7 support. Merge from mainline */
- ARM_FP_MODEL_VFP, /* FPUTYPE_VFP */
-/* APPLE LOCAL begin v7 support. Merge from Codesourcery */
- ARM_FP_MODEL_VFP, /* FPUTYPE_VFP3 */
- ARM_FP_MODEL_VFP /* FPUTYPE_NEON */
-/* APPLE LOCAL end v7 support. Merge from Codesourcery */
+ {"fpa", FPUTYPE_FPA, ARM_FP_MODEL_FPA, false},
+ {"fpe2", FPUTYPE_FPA_EMU2, ARM_FP_MODEL_FPA, false},
+ {"fpe3", FPUTYPE_FPA_EMU3, ARM_FP_MODEL_FPA, false},
+ {"maverick", FPUTYPE_MAVERICK, ARM_FP_MODEL_MAVERICK, false},
+ {"vfp", FPUTYPE_VFP, ARM_FP_MODEL_VFP, false},
+ {"vfp3", FPUTYPE_VFP3, ARM_FP_MODEL_VFP, false},
+ {"vfp3-fp16", FPUTYPE_VFP3, ARM_FP_MODEL_VFP, true},
+ {"neon", FPUTYPE_NEON, ARM_FP_MODEL_VFP, false},
+ {"neon-fp16", FPUTYPE_NEON, ARM_FP_MODEL_VFP, true}
};
+/* LLVM LOCAL end */
+/* LLVM LOCAL remove fp_mode_for_fpu */
struct float_abi
{
@@ -1224,6 +1198,7 @@
set_optab_libfunc (smod_optab, SImode, NULL);
set_optab_libfunc (umod_optab, SImode, NULL);
+ /* LLVM LOCAL begin HF */
set_conv_libfunc (trunc_optab, HFmode, SFmode, "__gnu_f2h_ieee");
set_conv_libfunc (sext_optab, SFmode, HFmode, "__gnu_h2f_ieee");
@@ -1240,6 +1215,7 @@
set_optab_libfunc (ge_optab, HFmode, NULL);
set_optab_libfunc (gt_optab, HFmode, NULL);
set_optab_libfunc (unord_optab,HFmode, NULL);
+ /* LLVM LOCAL end HF */
}
/* Implement TARGET_HANDLE_OPTION. */
@@ -1637,7 +1613,6 @@
if (TARGET_IWMMXT_ABI && !TARGET_IWMMXT)
error ("iwmmxt abi requires an iwmmxt capable cpu");
- arm_fp_model = ARM_FP_MODEL_UNKNOWN;
if (target_fpu_name == NULL && target_fpe_name != NULL)
{
if (streq (target_fpe_name, "2"))
@@ -1648,48 +1623,34 @@
error ("invalid floating point emulation option: -mfpe=%s",
target_fpe_name);
}
- if (target_fpu_name != NULL)
- {
- /* The user specified a FPU. */
- for (i = 0; i < ARRAY_SIZE (all_fpus); i++)
- {
- if (streq (all_fpus[i].name, target_fpu_name))
- {
- arm_fpu_arch = all_fpus[i].fpu;
- arm_fpu_tune = arm_fpu_arch;
- arm_fp_model = fp_model_for_fpu[arm_fpu_arch];
- break;
- }
- }
- if (arm_fp_model == ARM_FP_MODEL_UNKNOWN)
- error ("invalid floating point option: -mfpu=%s", target_fpu_name);
- }
- else
+ /* LLVM LOCAL begin */
+ if (target_fpu_name == NULL)
{
#ifdef FPUTYPE_DEFAULT
- /* Use the default if it is specified for this platform. */
- arm_fpu_arch = FPUTYPE_DEFAULT;
- arm_fpu_tune = FPUTYPE_DEFAULT;
+ target_fpu_name = FPUTYPE_DEFAULT;
#else
- /* Pick one based on CPU type. */
- /* ??? Some targets assume FPA is the default.
- if ((insn_flags & FL_VFP) != 0)
- arm_fpu_arch = FPUTYPE_VFP;
- else
- */
if (arm_arch_cirrus)
- arm_fpu_arch = FPUTYPE_MAVERICK;
+ target_fpu_name = "maverick";
else
- arm_fpu_arch = FPUTYPE_FPA_EMU2;
+ target_fpu_name = "fpe2";
#endif
- if (tune_flags & FL_CO_PROC && arm_fpu_arch == FPUTYPE_FPA_EMU2)
- arm_fpu_tune = FPUTYPE_FPA;
- else
- arm_fpu_tune = arm_fpu_arch;
- arm_fp_model = fp_model_for_fpu[arm_fpu_arch];
- gcc_assert (arm_fp_model != ARM_FP_MODEL_UNKNOWN);
}
+ arm_fpu_desc = NULL;
+ for (i = 0; i < ARRAY_SIZE (all_fpus); i++)
+ {
+ if (streq (all_fpus[i].name, target_fpu_name))
+ {
+ arm_fpu_desc = &all_fpus[i];
+ arm_fpu_attr= arm_fpu_desc->fpu;
+ break;
+ }
+ }
+
+ if (arm_fpu_desc == NULL)
+ error ("invalid floating point option: -mfpu=%s", target_fpu_name);
+ /* LLVM LOCAL end */
+
if (target_float_abi_name != NULL)
{
/* The user specified a FP ABI. */
@@ -1729,15 +1690,16 @@
/* APPLE LOCAL end v7 support. Merge from mainline */
/* If soft-float is specified then don't use FPU. */
if (TARGET_SOFT_FLOAT)
- arm_fpu_arch = FPUTYPE_NONE;
+ /* LLVM LOCAL */
+ arm_fpu_attr = FPUTYPE_NONE;
/* For arm2/3 there is no need to do any scheduling if there is only
a floating point emulator, or we are doing software floating-point. */
/* LLVM LOCAL begin */
#ifndef ENABLE_LLVM
if ((TARGET_SOFT_FLOAT
- || arm_fpu_tune == FPUTYPE_FPA_EMU2
- || arm_fpu_tune == FPUTYPE_FPA_EMU3)
+ || arm_fpu_attr == FPUTYPE_FPA_EMU2
+ || arm_fpu_attr == FPUTYPE_FPA_EMU3)
&& (tune_flags & FL_MODE32) == 0)
flag_schedule_insns = flag_schedule_insns_after_reload = 0;
#endif
@@ -12977,7 +12939,8 @@
inclusive_bitmask (ARM_HARD_FRAME_POINTER_REGNUM + 1, 11);
/* APPLE LOCAL end ARM custom frame layout */
- if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
+ /* LLVM LOCAL */
+ if (arm_fpu_attr == FPUTYPE_FPA_EMU2)
{
for (reg = LAST_FPA_REGNUM; reg >= FIRST_FPA_REGNUM; reg--)
if (regs_ever_live[reg] && !call_used_regs[reg])
@@ -13244,7 +13207,8 @@
&& !TARGET_IWMMXT
&& really_return
&& TARGET_SOFT_FLOAT
- && arm_fpu_arch == FPUTYPE_NONE
+ /* LLVM LOCAL */
+ && arm_fpu_attr == FPUTYPE_NONE
&& !flag_pic
&& !frame_pointer_needed)
{
@@ -13266,7 +13230,8 @@
/* APPLE LOCAL end ARM combine stack pop and register pop */
/* APPLE LOCAL end ARM indirect sibcalls */
- if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
+ /* LLVM LOCAL */
+ if (arm_fpu_attr == FPUTYPE_FPA_EMU2)
{
for (reg = FIRST_FPA_REGNUM; reg <= LAST_FPA_REGNUM; reg++)
if (regs_ever_live[reg] && !call_used_regs[reg])
@@ -13945,7 +13910,8 @@
/* Save any floating point call-saved registers used by this
function. */
- if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
+ /* LLVM LOCAL */
+ if (arm_fpu_attr == FPUTYPE_FPA_EMU2)
{
for (reg = LAST_FPA_REGNUM; reg >= FIRST_FPA_REGNUM; reg--)
if (regs_ever_live[reg] && !call_used_regs[reg])
@@ -14182,7 +14148,8 @@
if (optimize_size
&& !flag_pic
&& !frame_pointer_needed
- && arm_fpu_arch == FPUTYPE_NONE
+ /* LLVM LOCAL */
+ && arm_fpu_attr == FPUTYPE_NONE
&& TARGET_SOFT_FLOAT
&& !TARGET_IWMMXT)
{
@@ -22065,7 +22032,7 @@
else
{
int set_float_abi_attributes = 0;
- switch (arm_fpu_arch)
+ switch (arm_fpu_desc->fpu)
{
case FPUTYPE_FPA:
fpu_name = "fpa";
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Sat Mar 20 14:21:21 2010
@@ -216,9 +216,11 @@
#define TARGET_HARD_FLOAT (arm_float_abi != ARM_FLOAT_ABI_SOFT)
/* Use hardware floating point calling convention. */
#define TARGET_HARD_FLOAT_ABI (arm_float_abi == ARM_FLOAT_ABI_HARD)
-#define TARGET_FPA (arm_fp_model == ARM_FP_MODEL_FPA)
-#define TARGET_MAVERICK (arm_fp_model == ARM_FP_MODEL_MAVERICK)
-#define TARGET_VFP (arm_fp_model == ARM_FP_MODEL_VFP)
+/* LLVM LOCAL begin */
+#define TARGET_FPA (arm_fpu_desc->model == ARM_FP_MODEL_FPA)
+#define TARGET_MAVERICK (arm_fpu_desc->model == ARM_FP_MODEL_MAVERICK)
+#define TARGET_VFP (arm_fpu_desc->model == ARM_FP_MODEL_VFP)
+/* LLVM LOCAL end */
/* APPLE LOCAL begin v7 support. Merge from mainline */
#define TARGET_IWMMXT (arm_arch_iwmmxt)
#define TARGET_REALLY_IWMMXT (TARGET_IWMMXT && TARGET_32BIT)
@@ -260,22 +262,24 @@
/* LLVM LOCAL begin */
/* FPU is has the full VFPv3/NEON register file of 32 D registers. */
-#define TARGET_VFP3_REGSET (arm_fp_model == ARM_FP_MODEL_VFP \
- && (arm_fpu_arch == FPUTYPE_VFP3 \
- || arm_fpu_arch == FPUTYPE_NEON))
+#define TARGET_VFP3_REGSET (arm_fpu_desc->model == ARM_FP_MODEL_VFP \
+ && (arm_fpu_desc->fpu == FPUTYPE_VFP3 \
+ || arm_fpu_desc->fpu == FPUTYPE_NEON))
/* FPU supports VFPv3 instructions. */
-#define TARGET_VFP3 (arm_fp_model == ARM_FP_MODEL_VFP \
- && (arm_fpu_arch == FPUTYPE_VFP3))
+#define TARGET_VFP3 (arm_fpu_desc->model == ARM_FP_MODEL_VFP \
+ && (arm_fpu_desc->fpu == FPUTYPE_VFP3))
/* LLVM LOCAL end */
/* FPU supports Neon instructions. The setting of this macro gets
revealed via __ARM_NEON__ so we add extra guards upon TARGET_32BIT
and TARGET_HARD_FLOAT to ensure that NEON instructions are
available. */
+/* LLVM LOCAL begin */
#define TARGET_NEON (TARGET_32BIT && TARGET_HARD_FLOAT \
- && arm_fp_model == ARM_FP_MODEL_VFP \
- && arm_fpu_arch == FPUTYPE_NEON)
+ && arm_fpu_desc->model == ARM_FP_MODEL_VFP \
+ && arm_fpu_desc->fpu == FPUTYPE_NEON)
+/* LLVM LOCAL end */
/* APPLE LOCAL end v7 support. Merge from Codesourcery */
/* APPLE LOCAL begin v7 support. Merge from mainline */
@@ -337,7 +341,7 @@
ARM_FP_MODEL_VFP
};
-extern enum arm_fp_model arm_fp_model;
+/* LLVM LOCAL remove arm_fp_model decl */
/* Which floating point hardware is available. Also update
fp_model_for_fpu in arm.c when adding entries to this list. */
@@ -363,14 +367,21 @@
/* APPLE LOCAL end v7 support. Merge from Codesourcery */
};
-/* Recast the floating point class to be the floating point attribute. */
-#define arm_fpu_attr ((enum attr_fpu) arm_fpu_tune)
+extern int arm_fpu_attr;
-/* What type of floating point to tune for */
-extern enum fputype arm_fpu_tune;
+/* LLVM LOCAL begin */
+struct fpu_desc
+{
+ const char * name;
+ enum fputype fpu;
+ /* LLVM LOCAL begin */
+ enum arm_fp_model model;
+ int fp16;
+ /* LLVM LOCAL end */
+};
-/* What type of floating point instructions are available */
-extern enum fputype arm_fpu_arch;
+extern const struct fpu_desc * arm_fpu_desc;
+/* LLVM LOCAL end */
enum float_abi_type
{
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/bpabi.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/bpabi.h?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/bpabi.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/bpabi.h Sat Mar 20 14:21:21 2010
@@ -31,7 +31,7 @@
/* Section 4.1 of the AAPCS requires the use of VFP format. */
#undef FPUTYPE_DEFAULT
-#define FPUTYPE_DEFAULT FPUTYPE_VFP
+#define FPUTYPE_DEFAULT "vfp"
/* EABI targets should enable interworking by default. */
#undef TARGET_DEFAULT
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/darwin.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/darwin.h?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/darwin.h Sat Mar 20 14:21:21 2010
@@ -329,7 +329,7 @@
/* APPLE LOCAL begin 6093388 -mfpu=neon default for v7a */
/* We default to VFP for v6, NEON for v7 */
-#define FPUTYPE_DEFAULT (arm_arch7a ? FPUTYPE_NEON : FPUTYPE_VFP)
+#define FPUTYPE_DEFAULT (arm_arch7a ? "neon" : "vfp")
#undef TARGET_DEFAULT_FLOAT_ABI
#define TARGET_DEFAULT_FLOAT_ABI ((arm_arch6 || arm_arch7a) ? ARM_FLOAT_ABI_SOFTFP : ARM_FLOAT_ABI_SOFT)
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/fpa.md
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/fpa.md?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/fpa.md (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/fpa.md Sat Mar 20 14:21:21 2010
@@ -644,10 +644,10 @@
{
default:
case 0: return \"mvf%?e\\t%0, %1\";
- case 1: if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
+ case 1: if (arm_fpu_desc->model == FPUTYPE_FPA_EMU2)
return \"ldf%?e\\t%0, %1\";
return \"lfm%?\\t%0, 1, %1\";
- case 2: if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
+ case 2: if (arm_fpu_desc->model == FPUTYPE_FPA_EMU2)
return \"stf%?e\\t%1, %0\";
return \"sfm%?\\t%1, 1, %0\";
}
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/linux-elf.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/linux-elf.h?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/linux-elf.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/linux-elf.h Sat Mar 20 14:21:21 2010
@@ -87,7 +87,7 @@
/* NWFPE always understands FPA instructions. */
#undef FPUTYPE_DEFAULT
-#define FPUTYPE_DEFAULT FPUTYPE_FPA_EMU3
+#define FPUTYPE_DEFAULT "fpe3"
/* Call the function profiler with a given profile label. */
#undef ARM_FUNCTION_PROFILER
Modified: llvm-gcc-4.2/trunk/gcc/config/arm/netbsd-elf.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/netbsd-elf.h?rev=99071&r1=99070&r2=99071&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/netbsd-elf.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/netbsd-elf.h Sat Mar 20 14:21:21 2010
@@ -154,5 +154,5 @@
while (0)
#undef FPUTYPE_DEFAULT
-#define FPUTYPE_DEFAULT FPUTYPE_VFP
+#define FPUTYPE_DEFAULT "vfp"
More information about the llvm-commits
mailing list