[llvm] r289448 - [mips] For PIC code convert unconditional jump to unconditional branch

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 09:40:26 PST 2016


Author: atanasyan
Date: Mon Dec 12 11:40:26 2016
New Revision: 289448

URL: http://llvm.org/viewvc/llvm-project?rev=289448&view=rev
Log:
[mips] For PIC code convert unconditional jump to unconditional branch

Unconditional branch uses relative addressing which is the right choice
in case of position independent code.

This is a fix for the bug:
https://dmz-portal.mips.com/bugz/show_bug.cgi?id=2445

Differential revision: https://reviews.llvm.org/D27483

Added:
    llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s
Modified:
    llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
    llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s

Modified: llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp?rev=289448&r1=289447&r2=289448&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Mon Dec 12 11:40:26 2016
@@ -1786,6 +1786,17 @@ bool MipsAsmParser::processInstruction(M
     }
   }
 
+  // For PIC code convert unconditional jump to unconditional branch.
+  if ((Inst.getOpcode() == Mips::J || Inst.getOpcode() == Mips::J_MM) &&
+      inPicMode()) {
+    MCInst BInst;
+    BInst.setOpcode(inMicroMipsMode() ? Mips::BEQ_MM : Mips::BEQ);
+    BInst.addOperand(MCOperand::createReg(Mips::ZERO));
+    BInst.addOperand(MCOperand::createReg(Mips::ZERO));
+    BInst.addOperand(Inst.getOperand(0));
+    Inst = BInst;
+  }
+
   // This expansion is not in a function called by tryExpandInstruction()
   // because the pseudo-instruction doesn't have a distinct opcode.
   if ((Inst.getOpcode() == Mips::JAL || Inst.getOpcode() == Mips::JAL_MM) &&

Added: llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s?rev=289448&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s (added)
+++ llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s Mon Dec 12 11:40:26 2016
@@ -0,0 +1,139 @@
+# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -show-encoding |\
+# RUN:   FileCheck %s -check-prefix=NORMAL
+
+# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -show-encoding |\
+# RUN:   FileCheck %s -check-prefix=NORMAL
+
+# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -show-encoding |\
+# RUN:   FileCheck %s -check-prefix=NORMAL
+
+# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\
+# RUN:   FileCheck %s -check-prefix=MICRO
+
+# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\
+# RUN:   FileCheck %s -check-prefix=MICRO
+
+# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\
+# RUN:   FileCheck %s -check-prefix=MICRO
+
+# Repeat the tests using ELF output.
+
+# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -filetype=obj | \
+# RUN:   llvm-objdump -d -r - | FileCheck %s -check-prefixes=ELF-O32
+# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -filetype=obj | \
+# RUN:   llvm-objdump -d -r - | FileCheck %s -check-prefixes=ELF-NXX
+# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -filetype=obj | \
+# RUN:   llvm-objdump -d -r - | FileCheck %s -check-prefixes=ELF-NXX
+
+  .weak weak_label
+
+  .text
+  .option pic2
+
+  .ent local_label
+local_label:
+  .frame  $sp, 0, $ra
+  .set noreorder
+
+  j local_label
+  nop
+
+# NORMAL: b      local_label      # encoding: [0x10,0x00,A,A]
+# NORMAL:                         #   fixup A - offset: 0, value: local_label-4, kind: fixup_Mips_PC16
+
+# MICRO:  b      local_label      # encoding: [0x94,0x00,A,A]
+# MICRO:                          #   fixup A - offset: 0, value: local_label, kind: fixup_MICROMIPS_PC16_S1
+
+# ELF-O32:      10 00 ff ff     b       0
+
+# ELF-NXX:      10 00 ff ff     b       0
+
+  j weak_label
+  nop
+
+# NORMAL: b      weak_label       # encoding: [0x10,0x00,A,A]
+# NORMAL:                         #   fixup A - offset: 0, value: weak_label-4, kind: fixup_Mips_PC16
+
+# MICRO:  b      weak_label       # encoding: [0x94,0x00,A,A]
+# MICRO:                          #   fixup A - offset: 0, value: weak_label, kind: fixup_MICROMIPS_PC16_S1
+
+# ELF-O32:      10 00 ff ff     b       0
+# ELF-O32-NEXT:                 R_MIPS_PC16  weak_label
+
+# ELF-NXX:      10 00 00 00     b       4
+# ELF-NXX-NEXT:                 R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE  weak_label
+
+  j global_label
+  nop
+
+# NORMAL: b      global_label     # encoding: [0x10,0x00,A,A]
+# NORMAL:                         #   fixup A - offset: 0, value: global_label-4, kind: fixup_Mips_PC16
+
+# MICRO:  b      global_label     # encoding: [0x94,0x00,A,A]
+# MICRO:                          #   fixup A - offset: 0, value: global_label, kind: fixup_MICROMIPS_PC16_S1
+
+# ELF-O32:      10 00 ff ff     b       0
+# ELF-O32-NEXT:         00000010:  R_MIPS_PC16  global_label
+
+# ELF-NXX:      10 00 00 00     b       4
+# ELF-NXX-NEXT:                 R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE  global_label
+
+  j .text
+  nop
+
+# NORMAL: b      .text            # encoding: [0x10,0x00,A,A]
+# NORMAL:                         #   fixup A - offset: 0, value: .text-4, kind: fixup_Mips_PC16
+
+# MICRO:  b      .text            # encoding: [0x94,0x00,A,A]
+# MICRO:                          #   fixup A - offset: 0, value: .text, kind: fixup_MICROMIPS_PC16_S1
+
+# ELF-O32:      10 00 ff ff     b       0
+# ELF-O32-NEXT:         00000018:  R_MIPS_PC16  .text
+
+# ELF-NXX:      10 00 00 00     b       4
+# ELF-NXX-NEXT:                 R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE  .text
+
+  j 1f
+  nop
+
+# NORMAL: b      {{.*}}tmp0{{.*}} # encoding: [0x10,0x00,A,A]
+# NORMAL:                         #   fixup A - offset: 0, value: {{.*}}tmp0{{.*}}-4, kind: fixup_Mips_PC16
+
+# MICRO:  b      {{.*}}tmp0{{.*}} # encoding: [0x94,0x00,A,A]
+# MICRO:                          #   fixup A - offset: 0, value: {{.*}}tmp0{{.*}}, kind: fixup_MICROMIPS_PC16_S1
+
+# ELF-O32:      10 00 00 04     b       20 <local_label+0x34>
+
+# ELF-NXX:      10 00 00 04     b       20 <local_label+0x34>
+
+  .local forward_local
+  j forward_local
+  nop
+
+# NORMAL: b      forward_local    # encoding: [0x10,0x00,A,A]
+# NORMAL:                         #   fixup A - offset: 0, value: forward_local-4, kind: fixup_Mips_PC16
+
+# MICRO:  b      forward_local    # encoding: [0x94,0x00,A,A]
+# MICRO:                          #   fixup A - offset: 0, value: forward_local, kind: fixup_MICROMIPS_PC16_S1
+
+# ELF-O32:      10 00 00 04     b       20 <forward_local>
+
+# ELF-NXX:      10 00 00 04     b       20 <forward_local>
+
+  j 0x4
+
+# NORMAL: b      4                # encoding: [0x10,0x00,0x00,0x01]
+
+# MICRO:  b      4                # encoding: [0x94,0x00,0x00,0x02]
+
+# ELF-O32:      10 00 00 01     b       8
+
+# ELF-NXX:      10 00 00 01     b       8
+
+  .end local_label
+
+1:
+  nop
+  nop
+forward_local:
+

Modified: llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s?rev=289448&r1=289447&r2=289448&view=diff
==============================================================================
--- llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s (original)
+++ llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s Mon Dec 12 11:40:26 2016
@@ -1,20 +1,20 @@
 # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -show-encoding |\
-# RUN:   FileCheck %s -check-prefixes=ALL,NORMAL,O32
+# RUN:   FileCheck %s -check-prefixes=ALL,MIPS,O32
 
 # RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -show-encoding |\
-# RUN:   FileCheck %s -check-prefixes=ALL,NORMAL,N32
+# RUN:   FileCheck %s -check-prefixes=ALL,MIPS,N32
 
 # RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -show-encoding |\
-# RUN:   FileCheck %s -check-prefixes=ALL,NORMAL,N64
+# RUN:   FileCheck %s -check-prefixes=ALL,MIPS,N64
 
 # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\
-# RUN:   FileCheck %s -check-prefixes=ALL,MICROMIPS,O32-MICROMIPS
+# RUN:   FileCheck %s -check-prefixes=ALL,MM,O32-MM
 
 # RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\
-# RUN:   FileCheck %s -check-prefixes=ALL,MICROMIPS,N32-MICROMIPS
+# RUN:   FileCheck %s -check-prefixes=ALL,MM,N32-MM
 
 # RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\
-# RUN:   FileCheck %s -check-prefixes=ALL,MICROMIPS,N64-MICROMIPS
+# RUN:   FileCheck %s -check-prefixes=ALL,MM,N64-MM
 
 # Repeat the tests but using ELF output. An initial version of this patch did
 # this as the output different depending on whether it went through
@@ -63,20 +63,20 @@ local_label:
 # ELF-N64:      df 99 00 00 ld $25, 0($gp)
 # ELF-N64-NEXT:                 R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE local_label
 
-# O32-MICROMIPS: lw    $25, %got(local_label)($gp)      # encoding: [0xff,0x3c,A,A]
-# O32-MICROMIPS:                                        #   fixup A - offset: 0, value: %got(local_label), kind:   fixup_MICROMIPS_GOT16
-# O32-MICROMIPS: addiu $25, $25, %lo(local_label)       # encoding: [0x33,0x39,A,A]
-# O32-MICROMIPS:                                        #   fixup A - offset: 0, value: %lo(local_label), kind:   fixup_MICROMIPS_LO16
-
-# N32-MICROMIPS: lw    $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A]
-# N32-MICROMIPS:                                        #   fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
-
-# N64-MICROMIPS: ld    $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A]
-# N64-MICROMIPS:                                        #   fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
-
-# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
-# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
-# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
+# O32-MM: lw    $25, %got(local_label)($gp)      # encoding: [0xff,0x3c,A,A]
+# O32-MM:                                        #   fixup A - offset: 0, value: %got(local_label), kind:   fixup_MICROMIPS_GOT16
+# O32-MM: addiu $25, $25, %lo(local_label)       # encoding: [0x33,0x39,A,A]
+# O32-MM:                                        #   fixup A - offset: 0, value: %lo(local_label), kind:   fixup_MICROMIPS_LO16
+
+# N32-MM: lw    $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A]
+# N32-MM:                                        #   fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
+
+# N64-MM: ld    $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A]
+# N64-MM:                                        #   fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP
+
+# MIPS: jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
+# MM:   jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
+# ALL:  nop           # encoding: [0x00,0x00,0x00,0x00]
 
   jal weak_label
   nop
@@ -100,18 +100,18 @@ local_label:
 # ELF-N64:      df 99 00 00 ld $25, 0($gp)
 # ELF-N64-NEXT:                 R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE weak_label
 
-# O32-MICROMIPS: lw  $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
-# O32-MICROMIPS:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind:   fixup_MICROMIPS_CALL16
+# O32-MM: lw  $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
+# O32-MM:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind:   fixup_MICROMIPS_CALL16
 
-# N32-MICROMIPS: lw  $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
-# N32-MICROMIPS:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
+# N32-MM: lw  $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A]
+# N32-MM:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
 
-# N64-MICROMIPS: ld  $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A]
-# N64-MICROMIPS:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
+# N64-MM: ld  $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A]
+# N64-MM:                                   #   fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16
 
-# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
-# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
-# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
+# MIPS: jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
+# MM:   jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
+# ALL:  nop           # encoding: [0x00,0x00,0x00,0x00]
 
   jal global_label
   nop
@@ -135,18 +135,18 @@ local_label:
 # ELF-N64:      df 99 00 00 ld $25, 0($gp)
 # ELF-N64-NEXT:                 R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE global_label
 
-# O32-MICROMIPS: lw  $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
-# O32-MICROMIPS:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
+# O32-MM: lw  $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
+# O32-MM:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
 
-# N32-MICROMIPS: lw  $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
-# N32-MICROMIPS:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
+# N32-MM: lw  $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A]
+# N32-MM:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
 
-# N64-MICROMIPS: ld  $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A]
-# N64-MICROMIPS:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
+# N64-MM: ld  $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A]
+# N64-MM:                                     #   fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16
 
-# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
-# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
-# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
+# MIPS: jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
+# MM:   jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
+# ALL:  nop           # encoding: [0x00,0x00,0x00,0x00]
 
   jal .text
   nop
@@ -172,20 +172,20 @@ local_label:
 # ELF-N64:      df 99 00 00 ld $25, 0($gp)
 # ELF-N64-NEXT:                 R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE .text
 
-# O32-MICROMIPS-FIXME: lw    $25, %got(.text)($gp)      # encoding: [0xff,0x3c,A,A]
-# O32-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
-# O32-MICROMIPS-FIXME: addiu $25, $25, %lo(.text)       # encoding: [0x33,0x39,A,A]
-# O32-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
-
-# N32-MICROMIPS-FIXME: lw    $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
-# N32-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
-
-# N64-MICROMIPS-FIXME: ld    $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
-# N64-MICROMIPS-FIXME:                                  #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
-
-# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
-# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
-# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
+# O32-MM-FIXME: lw    $25, %got(.text)($gp)      # encoding: [0xff,0x3c,A,A]
+# O32-MM-FIXME:                                  #   fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
+# O32-MM-FIXME: addiu $25, $25, %lo(.text)       # encoding: [0x33,0x39,A,A]
+# O32-MM-FIXME:                                  #   fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
+
+# N32-MM-FIXME: lw    $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
+# N32-MM-FIXME:                                  #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
+
+# N64-MM-FIXME: ld    $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
+# N64-MM-FIXME:                                  #   fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
+
+# MIPS: jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
+# MM:   jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
+# ALL:  nop           # encoding: [0x00,0x00,0x00,0x00]
 
   # local labels ($tmp symbols)
   jal 1f
@@ -214,20 +214,20 @@ local_label:
 # ELF-N64:      df 99 00 00 ld $25, 0($gp)
 # ELF-N64-NEXT:                 R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE .Ltmp0
 
-# O32-MICROMIPS: lw    $25, %got($tmp0)($gp)    # encoding: [0xff,0x3c,A,A]
-# O32-MICROMIPS:                                #   fixup A - offset: 0, value: %got($tmp0), kind: fixup_MICROMIPS_GOT16
-# O32-MICROMIPS: addiu $25, $25, %lo($tmp0)     # encoding: [0x33,0x39,A,A]
-# O32-MICROMIPS:                                #   fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16
-
-# N32-MICROMIPS: lw  $25, %got_disp(.Ltmp0)($gp) # encoding: [0xff,0x3c,A,A]
-# N32-MICROMIPS:                                 #   fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
-
-# N64-MICROMIPS: ld  $25, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x99,A,A]
-# N64-MICROMIPS:                                 #   fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
-
-# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
-# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
-# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
+# O32-MM: lw    $25, %got($tmp0)($gp)    # encoding: [0xff,0x3c,A,A]
+# O32-MM:                                #   fixup A - offset: 0, value: %got($tmp0), kind: fixup_MICROMIPS_GOT16
+# O32-MM: addiu $25, $25, %lo($tmp0)     # encoding: [0x33,0x39,A,A]
+# O32-MM:                                #   fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16
+
+# N32-MM: lw  $25, %got_disp(.Ltmp0)($gp) # encoding: [0xff,0x3c,A,A]
+# N32-MM:                                 #   fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
+
+# N64-MM: ld  $25, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x99,A,A]
+# N64-MM:                                 #   fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP
+
+# MIPS: jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
+# MM:   jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
+# ALL:  nop           # encoding: [0x00,0x00,0x00,0x00]
 
   .local forward_local
   jal forward_local
@@ -256,21 +256,20 @@ local_label:
 # ELF-N64:      df 99 00 00 ld $25, 0($gp)
 # ELF-N64-NEXT:                 R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE forward_local
 
-# O32-MICROMIPS-FIXME: lw    $25, %got(forward_local)($gp)            # encoding: [0xff,0x3c,A,A]
-# O32-MICROMIPS-FIXME:                                                #   fixup A - offset: 0, value: %got(forward_local), kind:   fixup_MICROMIPS_GOT16
-# O32-MICROMIPS-FIXME: addiu $25, $25, %lo(forward_local)             # encoding: [0x33,0x39,A,A]
-# O32-MICROMIPS-FIXME:                                                #   fixup A - offset: 0, value: %lo(forward_local), kind:   fixup_MICROMIPS_LO16
-
-# N32-MICROMIPS-FIXME: lw    $25, %got_disp(forward_local)($gp) # encoding: [0xff,0x3c,A,A]
-# N32-MICROMIPS-FIXME:                                          #   fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
-
-# N64-MICROMIPS-FIXME: ld    $25, %got_disp(forward_local)($gp) # encoding: [0xdf,0x99,A,A]
-# N64-MICROMIPS-FIXME:                                          #   fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
-
-# NORMAL:    jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
-# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
-# ALL:       nop           # encoding: [0x00,0x00,0x00,0x00]
-
+# O32-MM-FIXME: lw    $25, %got(forward_local)($gp)            # encoding: [0xff,0x3c,A,A]
+# O32-MM-FIXME:                                                #   fixup A - offset: 0, value: %got(forward_local), kind:   fixup_MICROMIPS_GOT16
+# O32-MM-FIXME: addiu $25, $25, %lo(forward_local)             # encoding: [0x33,0x39,A,A]
+# O32-MM-FIXME:                                                #   fixup A - offset: 0, value: %lo(forward_local), kind:   fixup_MICROMIPS_LO16
+
+# N32-MM-FIXME: lw    $25, %got_disp(forward_local)($gp) # encoding: [0xff,0x3c,A,A]
+# N32-MM-FIXME:                                          #   fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
+
+# N64-MM-FIXME: ld    $25, %got_disp(forward_local)($gp) # encoding: [0xdf,0x99,A,A]
+# N64-MM-FIXME:                                          #   fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP
+
+# MIPS: jalr $25      # encoding: [0x03,0x20,0xf8,0x09]
+# MM:   jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
+# ALL:  nop           # encoding: [0x00,0x00,0x00,0x00]
 
   .end local_label
 
@@ -279,4 +278,3 @@ local_label:
   add $8, $8, $8
   nop
 forward_local:
-




More information about the llvm-commits mailing list