Hi,

sparc has

Mask(LONG_DOUBLE_128)

Target Report RejectNegative Mask(LONG_DOUBLE_128)

Mask(LONG_DOUBLE_128) is defined as extra_masks, which leads to
MASK_LONG_DOUBLE_128 be defined twice.  This patch checks if
MASK_ and TARGET_ macros are defined for extra_masks.  Tested
on Linux/x86 and sparc64-linux.  OK to install?

Thanks.


H.J.
2012-04-20  H.J. Lu  <hongjiu...@intel.com>

        PR bootstrap/52878
        * opth-gen.awk: Check if MASK_ and TARGET_ macros are defined for
        extra_masks.

diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk
index 9a7b6c3..a600b30 100644
--- a/gcc/opth-gen.awk
+++ b/gcc/opth-gen.awk
@@ -314,12 +314,14 @@ for (i = 0; i < n_opts; i++) {
                        mask = "OPTION_MASK_"
                        if (host_wide_int[vname] == "yes")
                                mask_1 = "HOST_WIDE_INT_1"
-               }
+               } else
+                       extra_mask_bits[name] = 1
                print "#define " mask name " (" mask_1 " << " masknum[vname]++ 
")"
        }
 }
 for (i = 0; i < n_extra_masks; i++) {
-       print "#define MASK_" extra_masks[i] " (1 << " masknum[""]++ ")"
+       if (extra_mask_bits[extra_masks[i]] == 0)
+               print "#define MASK_" extra_masks[i] " (1 << " masknum[""]++ ")"
 }
 
 for (var in masknum) {
@@ -355,14 +357,16 @@ for (i = 0; i < n_opts; i++) {
                        vname = "target_flags"
                        macro = "TARGET_"
                        mask = "MASK_"
+                       extra_mask_macros[name] = 1
                }
                print "#define " macro name \
                      " ((" vname " & " mask name ") != 0)"
        }
 }
 for (i = 0; i < n_extra_masks; i++) {
-       print "#define TARGET_" extra_masks[i] \
-             " ((target_flags & MASK_" extra_masks[i] ") != 0)"
+       if (extra_mask_macros[extra_masks[i]] == 0)
+               print "#define TARGET_" extra_masks[i] \
+                     " ((target_flags & MASK_" extra_masks[i] ") != 0)"
 }
 print ""
 

Reply via email to