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