1ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# RUN: llvm-mc -triple mips64-unknown-unknown -target-abi o32 -filetype=obj -o - %s | \
2dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:   llvm-objdump -d -r -arch=mips64 - | \
3dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:     FileCheck -check-prefix=O32 %s
4dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
5ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# RUN: llvm-mc -triple mips64-unknown-unknown -target-abi o32 %s | \
6dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:   FileCheck -check-prefix=ASM %s
7dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
8ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# RUN: llvm-mc -triple mips64-unknown-unknown -target-abi n32 -filetype=obj -o - %s | \
9ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# RUN:   llvm-objdump -d -r -t -arch=mips64 - | \
10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:     FileCheck -check-prefix=NXX -check-prefix=N32 %s
11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
12ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# RUN: llvm-mc -triple mips64-unknown-unknown -target-abi n32 %s | \
13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:   FileCheck -check-prefix=ASM %s
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN: llvm-mc -triple mips64-unknown-unknown %s -filetype=obj -o - | \
16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# RUN:   llvm-objdump -d -r -t -arch=mips64 - | \
17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:     FileCheck -check-prefix=NXX -check-prefix=N64 %s
18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN: llvm-mc -triple mips64-unknown-unknown %s | \
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# RUN:   FileCheck -check-prefix=ASM %s
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        .text
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        .option pic2
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinest1:
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        .cpsetup $25, 8, __cerror
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# O32-NOT: __cerror
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# FIXME: Direct object emission for N32 is still under development.
31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# N32 doesn't allow 3 operations to be specified in the same relocation
32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# record like N64 does.
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# NXX: sd       $gp, 8($sp)
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: lui      $gp, 0
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  __cerror
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: addiu    $gp, $gp, 0
38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  __cerror
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# N32: addu     $gp, $gp, $25
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# N64: daddu    $gp, $gp, $25
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# ASM: .cpsetup $25, 8, __cerror
43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinest2:
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines        .cpsetup $25, $2, __cerror
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# O32-NOT: __cerror
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# FIXME: Direct object emission for N32 is still under development.
51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# N32 doesn't allow 3 operations to be specified in the same relocation
52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# record like N64 does.
53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# NXX: move     $2, $gp
55dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: lui      $gp, 0
56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  __cerror
57dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: addiu    $gp, $gp, 0
58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  __cerror
5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# N32: addu     $gp, $gp, $25
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines# N64: daddu    $gp, $gp, $25
61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
62dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# ASM: .cpsetup $25, $2, __cerror
63dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
64ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# .cpsetup with local labels (PR22518):
65ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines1:
66ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        .cpsetup $25, $2, 1b
67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        nop
68ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        sub $3, $3, $2
69ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines        nop
70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
71ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# O32: t2:
72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# O32:   nop
73ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# O32:   sub $3, $3, $2
74ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# O32:   nop
75ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
76ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# FIXME: Direct object emission for N32 is still under development.
77ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# N32 doesn't allow 3 operations to be specified in the same relocation
78ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# record like N64 does.
79ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
80ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: move     $2, $gp
81ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: lui      $gp, 0
82ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_HI16  $tmp0
83ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: addiu    $gp, $gp, 0
84ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: R_MIPS_GPREL16/R_MIPS_SUB/R_MIPS_LO16  $tmp0
85ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# N32: addu     $gp, $gp, $25
86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# N64: daddu    $gp, $gp, $25
87ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: nop
88ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: sub $3, $3, $2
89ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: nop
90ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
91ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# ASM: .cpsetup $25, $2, $tmp0
92ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
93dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinest3:
94dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines        .option pic0
95dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines        nop
96dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines        .cpsetup $25, 8, __cerror
97dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines        nop
98dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
99dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# Testing that .cpsetup expands to nothing in this case
100dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# by checking that the next instruction after the first
101dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# nop is also a 'nop'.
102dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX: nop
103dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# NXX-NEXT: nop
104dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# ASM: nop
106dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# ASM: .cpsetup $25, 8, __cerror
107dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines# ASM: nop
108ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
109ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# For .cpsetup with local labels, we need to check if $tmp0 is in the symbol
110ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# table:
111ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines# NXX: .text  00000000 $tmp0
112