Home | History | Annotate | Download | only in Mips
      1 # RUN: llvm-mc -triple mips64-unknown-linux -target-abi o32 -filetype=obj -o - %s | \
      2 # RUN:   llvm-objdump -d -r - | FileCheck -check-prefixes=ALL,O32 %s
      3 
      4 # RUN: llvm-mc -triple mips64-unknown-unknown -target-abi o32 %s | \
      5 # RUN:   FileCheck -check-prefixes=ALL,ASM %s
      6 
      7 # RUN: llvm-mc -triple mips64-unknown-linux -target-abi n32 -filetype=obj -o - %s | \
      8 # RUN:   llvm-objdump -d -r - | \
      9 # RUN:   FileCheck -check-prefixes=ALL,NXX,N32 %s
     10 
     11 # RUN: llvm-mc -triple mips64-unknown-unknown -target-abi n32 %s | \
     12 # RUN:   FileCheck -check-prefixes=ALL,ASM %s
     13 
     14 # RUN: llvm-mc -triple mips64-unknown-linux %s -filetype=obj -o - | \
     15 # RUN:   llvm-objdump -d -r - | \
     16 # RUN:   FileCheck -check-prefixes=ALL,NXX,N64 %s
     17 
     18 # RUN: llvm-mc -triple mips64-unknown-unknown %s | \
     19 # RUN:   FileCheck -check-prefixes=ALL,ASM %s
     20 
     21         .text
     22         .option pic2
     23 t1:
     24         .cpsetup $25, 8, __cerror
     25         nop
     26         .cpreturn
     27         nop
     28 
     29 # ALL-LABEL: t1:
     30 
     31 # O32-NOT: __cerror
     32 
     33 # NXX-NEXT: sd       $gp, 8($sp)
     34 # NXX-NEXT: lui      $gp, 0
     35 # N32-NEXT: R_MIPS_HI16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
     36 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  __cerror
     37 # NXX-NEXT: addiu    $gp, $gp, 0
     38 # N32-NEXT: R_MIPS_LO16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
     39 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  __cerror
     40 # N64-NEXT: daddu    $gp, $gp, $25
     41 
     42 # ASM-NEXT: .cpsetup $25, 8, __cerror
     43 
     44 # ALL-NEXT: nop
     45 
     46 # ASM-NEXT: .cpreturn
     47 # NXX-NEXT: ld $gp, 8($sp)
     48 
     49 # ALL-NEXT: nop
     50 
     51 t2:
     52         .cpsetup $25, $2, __cerror
     53         nop
     54         .cpreturn
     55         nop
     56 
     57 # ALL-LABEL: t2:
     58 
     59 # O32-NOT: __cerror
     60 
     61 # NXX-NEXT: move     $2, $gp
     62 # NXX-NEXT: lui      $gp, 0
     63 # N32-NEXT: R_MIPS_HI16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
     64 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  __cerror
     65 # NXX-NEXT: addiu    $gp, $gp, 0
     66 # N32-NEXT: R_MIPS_LO16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
     67 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  __cerror
     68 # N64-NEXT: daddu    $gp, $gp, $25
     69 
     70 # ASM-NEXT: .cpsetup $25, $2, __cerror
     71 
     72 # ALL-NEXT: nop
     73 
     74 # ASM-NEXT: .cpreturn
     75 # NXX-NEXT: move $gp, $2
     76 
     77 # ALL-NEXT: nop
     78 
     79 # .cpsetup with local labels (PR22518):
     80 
     81 # The '1:' label isn't emitted in all cases but we still want a label to match
     82 # so we force one here.
     83 
     84 t3:
     85         nop
     86 1:
     87         .cpsetup $25, $2, 1b
     88         nop
     89         sub $3, $3, $2
     90 
     91 # ALL-LABEL: t3:
     92 # ALL-NEXT:  nop
     93 
     94 # O32-NEXT:   nop
     95 # O32-NEXT:   sub $3, $3, $2
     96 
     97 # NXX-NEXT: move     $2, $gp
     98 # NXX-NEXT: lui      $gp, 0
     99 # N32-NEXT: {{^ *0+}}38: R_MIPS_HI16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
    100 # N64-NEXT: {{^ *0+}}40: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16 .text
    101 # NXX-NEXT: addiu    $gp, $gp, 0
    102 # N32-NEXT: {{^ *0+}}3c: R_MIPS_LO16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
    103 # N64-NEXT: {{^ *0+}}44: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16 .text
    104 # N64-NEXT: daddu    $gp, $gp, $25
    105 # NXX-NEXT: nop
    106 # NXX-NEXT: sub $3, $3, $2
    107 
    108 # ASM: $tmp0:
    109 # ASM-NEXT: .cpsetup $25, $2, $tmp0
    110 
    111 # Ensure we have at least one instruction between labels so that the labels
    112 # we're matching aren't removed.
    113         nop
    114 # ALL-NEXT: nop
    115 
    116         .option pic0
    117 t4:
    118         nop
    119         .cpsetup $25, 8, __cerror
    120         nop
    121         .cpreturn
    122         nop
    123 
    124 # Testing that .cpsetup expands to nothing in this case
    125 # by checking that the next instruction after the first
    126 # nop is also a 'nop'.
    127 
    128 # ALL-LABEL: t4:
    129 
    130 # NXX-NEXT: nop
    131 # NXX-NEXT: nop
    132 # NXX-NEXT: nop
    133 
    134 # ASM-NEXT: nop
    135 # ASM-NEXT: .cpsetup $25, 8, __cerror
    136 # ASM-NEXT: nop
    137 # ASM-NEXT: .cpreturn
    138 # ASM-NEXT: nop
    139 
    140 # Test that we accept constant expressions.
    141         .option pic2
    142 t5:
    143         .cpsetup $25, ((8*4) - (3*8)), __cerror
    144         nop
    145 
    146 # ALL-LABEL: t5:
    147 
    148 # O32-NOT: __cerror
    149 
    150 # NXX-NEXT: sd       $gp, 8($sp)
    151 # NXX-NEXT: lui      $gp, 0
    152 # N32-NEXT: R_MIPS_HI16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
    153 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  __cerror
    154 # NXX-NEXT: addiu    $gp, $gp, 0
    155 # N32-NEXT: R_MIPS_LO16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
    156 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  __cerror
    157 # N64-NEXT: daddu    $gp, $gp, $25
    158 
    159 # ASM-NEXT: .cpsetup $25, 8, __cerror
    160 
    161 # ALL-NEXT: nop
    162 
    163 t1b:
    164 IMM_8 = 8
    165         .cpsetup $25, IMM_8, __cerror
    166         nop
    167         .cpreturn
    168         nop
    169 
    170 # ALL-LABEL: t1b:
    171 # ASM-NEXT: IMM_8 = 8
    172 
    173 # O32-NOT: __cerror
    174 
    175 # NXX-NEXT: sd       $gp, 8($sp)
    176 # NXX-NEXT: lui      $gp, 0
    177 # N32-NEXT: R_MIPS_HI16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
    178 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  __cerror
    179 # NXX-NEXT: addiu    $gp, $gp, 0
    180 # N32-NEXT: R_MIPS_LO16/R_MIPS_NONE/R_MIPS_NONE __gnu_local_gp
    181 # N64-NEXT: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  __cerror
    182 # N64-NEXT: daddu    $gp, $gp, $25
    183 
    184 # ASM-NEXT: .cpsetup $25, 8, __cerror
    185 
    186 # ALL-NEXT: nop
    187 
    188 # ASM-NEXT: .cpreturn
    189 # NXX-NEXT: ld $gp, 8($sp)
    190 
    191 # ALL-NEXT: nop
    192 
    193