diff mbox series

[i386] : Backport a small retpoline improvement to gcc-7 branch

Message ID CAFULd4b-b1RJO3DoiaR9zGSWZWQgD_h195wP=qxah=6N9g_S+g@mail.gmail.com
State New
Headers show
Series [i386] : Backport a small retpoline improvement to gcc-7 branch | expand

Commit Message

Uros Bizjak Jan. 18, 2018, 4:22 p.m. UTC
Hello!

I'd like to backport a small improvement to retpoline functionality to
gcc-7 branch.

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.

OK for branch?

Uros.

Comments

Richard Biener Jan. 19, 2018, 8:02 a.m. UTC | #1
On Thu, 18 Jan 2018, Uros Bizjak wrote:

> Hello!
> 
> I'd like to backport a small improvement to retpoline functionality to
> gcc-7 branch.
> 
> 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.
> 
> OK for branch?

Please wait until after the release of 7.3 if this doesn't fix an actual 
bug.

Thanks,
Richard.

> Uros.
>
diff mbox series

Patch

Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c	(revision 256797)
+++ config/i386/i386.c	(working copy)
@@ -12051,16 +12051,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))
@@ -12078,7 +12078,7 @@  static void
     }
   else
     {
-      if (regno >= 0)
+      if (regno != INVALID_REGNUM)
 	{
 	  if (need_bnd_p)
 	    ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno);
@@ -12130,7 +12130,7 @@  static void
  */
 
 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];
@@ -12160,7 +12160,7 @@  static void
 
   ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
 
-  if (regno >= 0)
+  if (regno != INVALID_REGNUM)
     {
       /* MOV.  */
       rtx xops[2];
@@ -12184,12 +12184,12 @@  static void
 }
 
 /* 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 != UNVALID_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;
@@ -12238,7 +12238,7 @@  static void
 	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];
@@ -12312,16 +12312,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);