1*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -show-encoding |\ 2*9880d681SAndroid Build Coastguard Worker# RUN: FileCheck %s -check-prefixes=ALL,NORMAL,O32 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -show-encoding |\ 5*9880d681SAndroid Build Coastguard Worker# RUN: FileCheck %s -check-prefixes=ALL,NORMAL,N32 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -show-encoding |\ 8*9880d681SAndroid Build Coastguard Worker# RUN: FileCheck %s -check-prefixes=ALL,NORMAL,N64 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\ 11*9880d681SAndroid Build Coastguard Worker# RUN: FileCheck %s -check-prefixes=ALL,MICROMIPS,O32-MICROMIPS 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\ 14*9880d681SAndroid Build Coastguard Worker# RUN: FileCheck %s -check-prefixes=ALL,MICROMIPS,N32-MICROMIPS 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\ 17*9880d681SAndroid Build Coastguard Worker# RUN: FileCheck %s -check-prefixes=ALL,MICROMIPS,N64-MICROMIPS 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker .weak weak_label 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker .text 22*9880d681SAndroid Build Coastguard Worker .option pic2 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker .ent local_label 25*9880d681SAndroid Build Coastguard Workerlocal_label: 26*9880d681SAndroid Build Coastguard Worker .frame $sp, 0, $ra 27*9880d681SAndroid Build Coastguard Worker .set noreorder 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker jal local_label 30*9880d681SAndroid Build Coastguard Worker nop 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker jal weak_label 33*9880d681SAndroid Build Coastguard Worker nop 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker jal global_label 36*9880d681SAndroid Build Coastguard Worker nop 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker jal .text 39*9880d681SAndroid Build Coastguard Worker nop 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker # local labels ($tmp symbols) 42*9880d681SAndroid Build Coastguard Worker jal 1f 43*9880d681SAndroid Build Coastguard Worker nop 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker .end local_label 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker1: 48*9880d681SAndroid Build Coastguard Worker nop 49*9880d681SAndroid Build Coastguard Worker add $8, $8, $8 50*9880d681SAndroid Build Coastguard Worker nop 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker# Expanding "jal local_label": 53*9880d681SAndroid Build Coastguard Worker# O32: lw $25, %got(local_label)($gp) # encoding: [0x8f,0x99,A,A] 54*9880d681SAndroid Build Coastguard Worker# O32: # fixup A - offset: 0, value: %got(local_label), kind: fixup_Mips_GOT 55*9880d681SAndroid Build Coastguard Worker# O32: addiu $25, $25, %lo(local_label) # encoding: [0x27,0x39,A,A] 56*9880d681SAndroid Build Coastguard Worker# O32: # fixup A - offset: 0, value: %lo(local_label), kind: fixup_Mips_LO16 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker# N32: lw $25, %got_disp(local_label)($gp) # encoding: [0x8f,0x99,A,A] 59*9880d681SAndroid Build Coastguard Worker# N32: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_Mips_GOT_DISP 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker# N64: ld $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A] 62*9880d681SAndroid Build Coastguard Worker# N64: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_Mips_GOT_DISP 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw $25, %got(local_label)($gp) # encoding: [0xff,0x3c,A,A] 65*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: # fixup A - offset: 0, value: %got(local_label), kind: fixup_MICROMIPS_GOT16 66*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: addiu $25, $25, %lo(local_label) # encoding: [0x33,0x39,A,A] 67*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: # fixup A - offset: 0, value: %lo(local_label), kind: fixup_MICROMIPS_LO16 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A] 70*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A] 73*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] 76*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] 77*9880d681SAndroid Build Coastguard Worker# ALL: nop # encoding: [0x00,0x00,0x00,0x00] 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker# Expanding "jal weak_label": 81*9880d681SAndroid Build Coastguard Worker# O32: lw $25, %call16(weak_label)($gp) # encoding: [0x8f,0x99,A,A] 82*9880d681SAndroid Build Coastguard Worker# O32: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_Mips_CALL16 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker# N32: lw $25, %call16(weak_label)($gp) # encoding: [0x8f,0x99,A,A] 85*9880d681SAndroid Build Coastguard Worker# N32: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_Mips_CALL16 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker# N64: ld $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A] 88*9880d681SAndroid Build Coastguard Worker# N64: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_Mips_CALL16 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A] 91*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A] 94*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A] 97*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] 100*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] 101*9880d681SAndroid Build Coastguard Worker# ALL: nop # encoding: [0x00,0x00,0x00,0x00] 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker# Expanding "jal global_label": 105*9880d681SAndroid Build Coastguard Worker# O32: lw $25, %call16(global_label)($gp) # encoding: [0x8f,0x99,A,A] 106*9880d681SAndroid Build Coastguard Worker# O32: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_Mips_CALL16 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker# N32: lw $25, %call16(global_label)($gp) # encoding: [0x8f,0x99,A,A] 109*9880d681SAndroid Build Coastguard Worker# N32: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_Mips_CALL16 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker# N64: ld $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A] 112*9880d681SAndroid Build Coastguard Worker# N64: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_Mips_CALL16 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A] 115*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A] 118*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A] 121*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] 124*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] 125*9880d681SAndroid Build Coastguard Worker# ALL: nop # encoding: [0x00,0x00,0x00,0x00] 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker# FIXME: The .text section MCSymbol isn't created when printing assembly. However, 129*9880d681SAndroid Build Coastguard Worker# it is created when generating an ELF object file. 130*9880d681SAndroid Build Coastguard Worker# Expanding "jal .text": 131*9880d681SAndroid Build Coastguard Worker# O32-FIXME: lw $25, %got(.text)($gp) # encoding: [0x8f,0x99,A,A] 132*9880d681SAndroid Build Coastguard Worker# O32-FIXME: # fixup A - offset: 0, value: %got(.text), kind: fixup_Mips_GOT 133*9880d681SAndroid Build Coastguard Worker# O32-FIXME: addiu $25, $25, %lo(.text) # encoding: [0x27,0x39,A,A] 134*9880d681SAndroid Build Coastguard Worker# O32-FIXME: # fixup A - offset: 0, value: %lo(.text), kind: fixup_Mips_LO16 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker# N32-FIXME: lw $25, %got_disp(.text)($gp) # encoding: [0x8f,0x99,A,A] 137*9880d681SAndroid Build Coastguard Worker# N32-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_Mips_GOT_DISP 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker# N64-FIXME: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A] 140*9880d681SAndroid Build Coastguard Worker# N64-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_Mips_GOT_DISP 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME: lw $25, %got(.text)($gp) # encoding: [0xff,0x3c,A,A] 143*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16 144*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A] 145*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS-FIXME: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A] 148*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS-FIXME: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A] 151*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] 154*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] 155*9880d681SAndroid Build Coastguard Worker# ALL: nop # encoding: [0x00,0x00,0x00,0x00] 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker# Expanding "jal 1f": 159*9880d681SAndroid Build Coastguard Worker# O32: lw $25, %got($tmp0)($gp) # encoding: [0x8f,0x99,A,A] 160*9880d681SAndroid Build Coastguard Worker# O32: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_Mips_GOT 161*9880d681SAndroid Build Coastguard Worker# O32: addiu $25, $25, %lo($tmp0) # encoding: [0x27,0x39,A,A] 162*9880d681SAndroid Build Coastguard Worker# O32: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_Mips_LO16 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker# N32: lw $25, %got_disp($tmp0)($gp) # encoding: [0x8f,0x99,A,A] 165*9880d681SAndroid Build Coastguard Worker# N32: # fixup A - offset: 0, value: %got_disp($tmp0), kind: fixup_Mips_GOT_DISP 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker# N64: ld $25, %got_disp($tmp0)($gp) # encoding: [0xdf,0x99,A,A] 168*9880d681SAndroid Build Coastguard Worker# N64: # fixup A - offset: 0, value: %got_disp($tmp0), kind: fixup_Mips_GOT_DISP 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: lw $25, %got($tmp0)($gp) # encoding: [0xff,0x3c,A,A] 171*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: # fixup A - offset: 0, value: %got($tmp0), kind: fixup_MICROMIPS_GOT16 172*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: addiu $25, $25, %lo($tmp0) # encoding: [0x33,0x39,A,A] 173*9880d681SAndroid Build Coastguard Worker# O32-MICROMIPS: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: lw $25, %got_disp($tmp0)($gp) # encoding: [0xff,0x3c,A,A] 176*9880d681SAndroid Build Coastguard Worker# N32-MICROMIPS: # fixup A - offset: 0, value: %got_disp($tmp0), kind: fixup_MICROMIPS_GOT_DISP 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: ld $25, %got_disp($tmp0)($gp) # encoding: [0xdf,0x99,A,A] 179*9880d681SAndroid Build Coastguard Worker# N64-MICROMIPS: # fixup A - offset: 0, value: %got_disp($tmp0), kind: fixup_MICROMIPS_GOT_DISP 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker# NORMAL: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] 182*9880d681SAndroid Build Coastguard Worker# MICROMIPS: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] 183*9880d681SAndroid Build Coastguard Worker# ALL: nop # encoding: [0x00,0x00,0x00,0x00] 184