diff mbox

[1/4,ARM] Add attribute/pragma target fpu=

Message ID 55F9365E.4050700@st.com
State New
Headers show

Commit Message

Christian Bruel Sept. 16, 2015, 9:29 a.m. UTC
> Maybe there is just dirt on my screen or my graphic-memory is broken, but I see an odd character between iWMMXt and and?

Thanks Bernhard,

Resent to remove this malicious sneaky ` character in the string error 
message.

>
> I keep forgetting if it's a capital W or a lowercase one but you'll know.
> Thanks,
>

I don't know. iWMMXt is also referenced with a capital W in the other 
parts of the compiler.

Christian

Comments

Kyrylo Tkachov Oct. 5, 2015, 10:54 a.m. UTC | #1
On 16/09/15 10:29, Christian Bruel wrote:
>
>> Maybe there is just dirt on my screen or my graphic-memory is broken, but I see an odd character between iWMMXt and and?
> Thanks Bernhard,
>
> Resent to remove this malicious sneaky ` character in the string error
> message.
>
>> I keep forgetting if it's a capital W or a lowercase one but you'll know.
>> Thanks,
>>
> I don't know. iWMMXt is also referenced with a capital W in the other
> parts of the compiler.

Let's go with what's in the compiler already.

@@ -25678,23 +25679,14 @@
        if (print_tune_info)
  	arm_print_tune_info ();
  
-      if (TARGET_SOFT_FLOAT)
+      if (! TARGET_SOFT_FLOAT && arm_fpu_desc->model == ARM_FP_MODEL_VFP)
  	{

Can use TARGET_VFP here?

Ok with that change.
Kyrill
diff mbox

Patch

 2015-09-14  Christian Bruel  <christian.bruel@st.com>

	PR target/65837
	* config/arm/arm.c (arm_option_override): Move NEON check...
	(arm_option_check_internal): here
	(arm_file_start): Move .fpu print...
	(arm_declare_function_name): here
	(arm_option_print): Dump current fpu name.
	* config/arm/arm.opt (arm_fpu_index): Mark Save.

diff -ru gnu_trunk.p0/gcc/gcc/config/arm/arm.c gnu_trunk.p1/gcc/gcc/config/arm/arm.c
--- gnu_trunk.p0/gcc/gcc/config/arm/arm.c	2015-09-16 10:49:26.693018760 +0200
+++ gnu_trunk.p1/gcc/gcc/config/arm/arm.c	2015-09-16 10:52:44.065449166 +0200
@@ -2713,6 +2713,12 @@ 
 arm_option_check_internal (struct gcc_options *opts)
 {
   int flags = opts->x_target_flags;
+  const struct arm_fpu_desc *fpu_desc = &all_fpus[opts->x_arm_fpu_index];
+
+  /* iWMMXt and NEON are incompatible.  */
+    if (TARGET_IWMMXT && TARGET_VFP
+      && ARM_FPU_FSET_HAS (fpu_desc->features, FPU_FL_NEON))
+    error ("iWMMXt and NEON are incompatible");
 
   /* Make sure that the processor choice does not conflict with any of the
      other command line choices.  */
@@ -3145,10 +3151,6 @@ 
 	  error ("AAPCS does not support -mcallee-super-interworking");
     }
 
-  /* iWMMXt and NEON are incompatible.  */
-  if (TARGET_IWMMXT && TARGET_NEON)
-    error ("iWMMXt and NEON are incompatible");
-
   /* __fp16 support currently assumes the core has ldrh.  */
   if (!arm_arch4 && arm_fp16_format != ARM_FP16_FORMAT_NONE)
     sorry ("__fp16 and no ldrh");
@@ -25634,7 +25636,6 @@ 
 
   if (TARGET_BPABI)
     {
-      const char *fpu_name;
       if (arm_selected_arch)
         {
 	  /* armv7ve doesn't support any extensions.  */
@@ -25678,23 +25679,14 @@ 
       if (print_tune_info)
 	arm_print_tune_info ();
 
-      if (TARGET_SOFT_FLOAT)
+      if (! TARGET_SOFT_FLOAT && arm_fpu_desc->model == ARM_FP_MODEL_VFP)
 	{
-	  fpu_name = "softvfp";
-	}
-      else
-	{
-	  fpu_name = arm_fpu_desc->name;
-	  if (arm_fpu_desc->model == ARM_FP_MODEL_VFP)
-	    {
-	      if (TARGET_HARD_FLOAT && TARGET_VFP_SINGLE)
-		arm_emit_eabi_attribute ("Tag_ABI_HardFP_use", 27, 1);
+	  if (TARGET_HARD_FLOAT && TARGET_VFP_SINGLE)
+	    arm_emit_eabi_attribute ("Tag_ABI_HardFP_use", 27, 1);
 
-	      if (TARGET_HARD_FLOAT_ABI)
-		arm_emit_eabi_attribute ("Tag_ABI_VFP_args", 28, 1);
-	    }
+	  if (TARGET_HARD_FLOAT_ABI)
+	    arm_emit_eabi_attribute ("Tag_ABI_VFP_args", 28, 1);
 	}
-      asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_name);
 
       /* Some of these attributes only apply when the corresponding features
          are used.  However we don't have any easy way of figuring this out.
@@ -29493,11 +29485,14 @@ 
 arm_option_print (FILE *file, int indent, struct cl_target_option *ptr)
 {
   int flags = ptr->x_target_flags;
+  const struct arm_fpu_desc *fpu_desc = &all_fpus[ptr->x_arm_fpu_index];
 
   fprintf (file, "%*sselected arch %s\n", indent, "",
 	   TARGET_THUMB2_P (flags) ? "thumb2" :
 	   TARGET_THUMB_P (flags) ? "thumb1" :
 	   "arm");
+
+  fprintf (file, "%*sselected fpu %s\n", indent, "", fpu_desc->name);
 }
 
 /* Hook to determine if one function can safely inline another.  */
@@ -29691,6 +29686,9 @@ 
   else
     fprintf (stream, "\t.arm\n");
 
+  asm_fprintf (asm_out_file, "\t.fpu %s\n", TARGET_SOFT_FLOAT
+	       ? "softvfp" : arm_fpu_desc->name);
+
   if (TARGET_POKE_FUNCTION_NAME)
     arm_poke_function_name (stream, (const char *) name);
 }
diff -ru gnu_trunk.p0/gcc/gcc/config/arm/arm.opt gnu_trunk.p1/gcc/gcc/config/arm/arm.opt
--- gnu_trunk.p0/gcc/gcc/config/arm/arm.opt	2015-09-16 10:49:26.697018769 +0200
+++ gnu_trunk.p1/gcc/gcc/config/arm/arm.opt	2015-09-16 10:52:22.441401984 +0200
@@ -144,7 +144,7 @@ 
 Enum(arm_fp16_format_type) String(alternative) Value(ARM_FP16_FORMAT_ALTERNATIVE)
 
 mfpu=
-Target RejectNegative Joined Enum(arm_fpu) Var(arm_fpu_index)
+Target RejectNegative Joined Enum(arm_fpu) Var(arm_fpu_index) Save
 Specify the name of the target floating point hardware/format
 
 mhard-float