]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Use INVALID_REGNUM in indirect thunk processing
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 16 Apr 2018 19:03:51 +0000 (19:03 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 16 Apr 2018 19:03:51 +0000 (12:03 -0700)
Backport from mainline
2018-01-17  Uros Bizjak  <ubizjak@gmail.com>

* config/i386/i386.c (indirect_thunk_name): Declare regno
as unsigned int.  Compare regno with INVALID_REGNUM.
(output_indirect_thunk): Ditto.
(output_indirect_thunk_function): Ditto.
(ix86_code_end): Declare regno as unsigned int.  Use INVALID_REGNUM
in the call to output_indirect_thunk_function.

From-SVN: r259418

gcc/ChangeLog
gcc/config/i386/i386.c

index 0c3f9c1825d1164460bc5b5a0a1c662c850c8514..52b7e740314104ca6d059c85d07404918b39f973 100644 (file)
@@ -1,3 +1,15 @@
+2018-04-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2018-01-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (indirect_thunk_name): Declare regno
+       as unsigned int.  Compare regno with INVALID_REGNUM.
+       (output_indirect_thunk): Ditto.
+       (output_indirect_thunk_function): Ditto.
+       (ix86_code_end): Declare regno as unsigned int.  Use INVALID_REGNUM
+       in the call to output_indirect_thunk_function.
+
 2018-04-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        Backport from mainline
index 9c038bee0003847fe797ee448c410d364f4cb1eb..40126579c223e7d55a8600f5ecfe6a135bc01ce5 100644 (file)
@@ -11087,16 +11087,16 @@ static int indirect_thunks_bnd_used;
 /* Fills in the label name that should be used for the indirect thunk.  */
 
 static void
-indirect_thunk_name (char name[32], int regno, bool need_bnd_p,
-                    bool ret_p)
+indirect_thunk_name (char name[32], unsigned int regno,
+                    bool need_bnd_p, bool ret_p)
 {
-  if (regno >= 0 && ret_p)
+  if (regno != INVALID_REGNUM && ret_p)
     gcc_unreachable ();
 
   if (USE_HIDDEN_LINKONCE)
     {
       const char *bnd = need_bnd_p ? "_bnd" : "";
-      if (regno >= 0)
+      if (regno != INVALID_REGNUM)
        {
          const char *reg_prefix;
          if (LEGACY_INT_REGNO_P (regno))
@@ -11114,7 +11114,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p,
     }
   else
     {
-      if (regno >= 0)
+      if (regno != INVALID_REGNUM)
        {
          if (need_bnd_p)
            ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno);
@@ -11166,7 +11166,7 @@ indirect_thunk_name (char name[32], int regno, bool need_bnd_p,
  */
 
 static void
-output_indirect_thunk (bool need_bnd_p, int regno)
+output_indirect_thunk (bool need_bnd_p, unsigned int regno)
 {
   char indirectlabel1[32];
   char indirectlabel2[32];
@@ -11196,7 +11196,7 @@ output_indirect_thunk (bool need_bnd_p, int regno)
 
   ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
 
-  if (regno >= 0)
+  if (regno != INVALID_REGNUM)
     {
       /* MOV.  */
       rtx xops[2];
@@ -11220,12 +11220,12 @@ output_indirect_thunk (bool need_bnd_p, int regno)
 }
 
 /* Output a funtion with a call and return thunk for indirect branch.
-   If BND_P is true, the BND prefix is needed.   If REGNO != -1,  the
-   function address is in REGNO.  Otherwise, the function address is
+   If BND_P is true, the BND prefix is needed.  If REGNO != INVALID_REGNUM,
+   the function address is in REGNO.  Otherwise, the function address is
    on the top of stack.  */
 
 static void
-output_indirect_thunk_function (bool need_bnd_p, int regno)
+output_indirect_thunk_function (bool need_bnd_p, unsigned int regno)
 {
   char name[32];
   tree decl;
@@ -11274,7 +11274,7 @@ output_indirect_thunk_function (bool need_bnd_p, int regno)
        ASM_OUTPUT_LABEL (asm_out_file, name);
       }
 
-  if (regno < 0)
+  if (regno == INVALID_REGNUM)
     {
       /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd.  */
       char alias[32];
@@ -11348,16 +11348,16 @@ static void
 ix86_code_end (void)
 {
   rtx xops[2];
-  int regno;
+  unsigned int regno;
 
   if (indirect_thunk_needed)
-    output_indirect_thunk_function (false, -1);
+    output_indirect_thunk_function (false, INVALID_REGNUM);
   if (indirect_thunk_bnd_needed)
-    output_indirect_thunk_function (true, -1);
+    output_indirect_thunk_function (true, INVALID_REGNUM);
 
   for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++)
     {
-      int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1;
+      unsigned int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1;
       if ((indirect_thunks_used & (1 << i)))
        output_indirect_thunk_function (false, regno);