276 lines · plain
1# REQUIRES: ppc2 3# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t.o4# RUN: llvm-readelf -r %t.o | FileCheck --check-prefix=InputRelocs %s5 6# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/shared-ppc64.s -o %t2.o7# RUN: ld.lld -shared -soname=t2.so %t2.o -o %t2.so8 9## Place all sections in the same segment so that .text and .TOC. are on the same page.10# RUN: echo 'PHDRS { all PT_LOAD; }' > %t.script11#12# RUN: ld.lld %t2.so %t.o -T %t.script -o %t13# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=Dis %s14#15# RUN: ld.lld %t2.so %t.o -T %t.script --no-toc-optimize -o %t16# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=NoOpt %s17 18# InputRelocs: Relocation section '.rela.text'19# InputRelocs: R_PPC64_TOC16_HA20# InputRelocs: R_PPC64_TOC16_LO21# InputRelocs: R_PPC64_TOC16_LO_DS22 23 24 .text25 .abiversion 226 27 .global bytes28 .p2align 429 .type bytes,@function30bytes:31.Lbytes_gep:32 addis 2, 12, .TOC.-.Lbytes_gep@ha33 addi 2, 2, .TOC.-.Lbytes_gep@l34.Lbytes_lep:35 .localentry bytes, .Lbytes_lep-.Lbytes_gep36 addis 3, 2, byteLd@toc@ha37 lbz 3, byteLd@toc@l(3)38 addis 4, 2, byteSt@toc@ha39 stb 3, byteSt@toc@l(4)40 blr41# Dis-LABEL: <bytes>:42# Dis-NEXT: addis43# Dis-NEXT: addi44# Dis-NEXT: nop45# Dis-NEXT: lbz 3, -32752(2)46# Dis-NEXT: nop47# Dis-NEXT: stb 3, -32751(2)48# Dis-NEXT: blr49 50# NoOpt-LABEL: <bytes>:51# NoOpt-NEXT: addis52# NoOpt-NEXT: addi53# NoOpt-NEXT: addis 3, 2, 054# NoOpt-NEXT: lbz 3, -32752(3)55# NoOpt-NEXT: addis 4, 2, 056# NoOpt-NEXT: stb 3, -32751(4)57# NoOpt-NEXT: blr58 59 .global halfs60 .p2align 461 .type halfs,@function62halfs:63.Lhalfs_gep:64 addis 2, 12, .TOC.-.Lhalfs_gep@ha65 addi 2, 2, .TOC.-.Lhalfs_gep@l66.Lhalfs_lep:67 .localentry halfs, .Lhalfs_lep-.Lhalfs_gep68 addis 3, 2, halfLd@toc@ha69 lhz 3, halfLd@toc@l(3)70 addis 4, 2, halfLd@toc@ha71 lha 4, halfLd@toc@l(4)72 addis 5, 2, halfSt@toc@ha73 sth 4, halfSt@toc@l(5)74 blr75# Dis-LABEL: <halfs>:76# Dis-NEXT: addis77# Dis-NEXT: addi78# Dis-NEXT: nop79# Dis-NEXT: lhz 3, -32750(2)80# Dis-NEXT: nop81# Dis-NEXT: lha 4, -32750(2)82# Dis-NEXT: nop83# Dis-NEXT: sth 4, -32748(2)84# Dis-NEXT: blr85 86# NoOpt-LABEL: <halfs>:87# NoOpt-NEXT: addis88# NoOpt-NEXT: addi89# NoOpt-NEXT: addis 3, 2, 090# NoOpt-NEXT: lhz 3, -32750(3)91# NoOpt-NEXT: addis 4, 2, 092# NoOpt-NEXT: lha 4, -32750(4)93# NoOpt-NEXT: addis 5, 2, 094# NoOpt-NEXT: sth 4, -32748(5)95# NoOpt-NEXT: blr96 97 98 .global words99 .p2align 4100 .type words,@function101words:102.Lwords_gep:103 addis 2, 12, .TOC.-.Lwords_gep@ha104 addi 2, 2, .TOC.-.Lwords_gep@l105.Lwords_lep:106 .localentry words, .Lwords_lep-.Lwords_gep107 addis 3, 2, wordLd@toc@ha108 lwz 3, wordLd@toc@l(3)109 addis 4, 2, wordLd@toc@ha110 lwa 4, wordLd@toc@l(4)111 addis 5, 2, wordSt@toc@ha112 stw 4, wordSt@toc@l(5)113 blr114# Dis-LABEL: words115# Dis-NEXT: addis116# Dis-NEXT: addi117# Dis-NEXT: nop118# Dis-NEXT: lwz 3, -32744(2)119# Dis-NEXT: nop120# Dis-NEXT: lwa 4, -32744(2)121# Dis-NEXT: nop122# Dis-NEXT: stw 4, -32740(2)123# Dis-NEXT: blr124 125# NoOpt-LABEL: words126# NoOpt-NEXT: addis127# NoOpt-NEXT: addi128# NoOpt-NEXT: addis 3, 2, 0129# NoOpt-NEXT: lwz 3, -32744(3)130# NoOpt-NEXT: addis 4, 2, 0131# NoOpt-NEXT: lwa 4, -32744(4)132# NoOpt-NEXT: addis 5, 2, 0133# NoOpt-NEXT: stw 4, -32740(5)134# NoOpt-NEXT: blr135 136 .global doublewords137 .p2align 4138 .type doublewords,@function139doublewords:140.Ldoublewords_gep:141 addis 2, 12, .TOC.-.Ldoublewords_gep@ha142 addi 2, 2, .TOC.-.Ldoublewords_gep@l143.Ldoublewords_lep:144 .localentry doublewords, .Ldoublewords_lep-.Ldoublewords_gep145 addis 3, 2, dwordLd@toc@ha146 ld 3, dwordLd@toc@l(3)147 addis 4, 2, dwordSt@toc@ha148 std 3, dwordSt@toc@l(4)149 blr150 151# Dis-LABEL: doublewords152# Dis-NEXT: addis153# Dis-NEXT: addi154# Dis-NEXT: nop155# Dis-NEXT: ld 3, -32736(2)156# Dis-NEXT: nop157# Dis-NEXT: std 3, -32728(2)158# Dis-NEXT: blr159 160# NoOpt-LABEL: doublewords161# NoOpt-NEXT: addis162# NoOpt-NEXT: addi163# NoOpt-NEXT: addis 3, 2, 0164# NoOpt-NEXT: ld 3, -32736(3)165# NoOpt-NEXT: addis 4, 2, 0166# NoOpt-NEXT: std 3, -32728(4)167# NoOpt-NEXT: blr168 169 .global vec_dq170 .p2align 4171 .type vec_dq,@function172vec_dq:173.Lvec_dq_gep:174 addis 2, 12, .TOC.-.Lvec_dq_gep@ha175 addi 2, 2, .TOC.-.Lvec_dq_gep@l176.Lvec_dq_lep:177 .localentry vec_dq, .Lvec_dq_lep-.Lvec_dq_gep178 addis 3, 2, vecLd@toc@ha179 lxv 3, vecLd@toc@l(3)180 addis 3, 2, vecSt@toc@ha181 stxv 3, vecSt@toc@l(3)182 blr183 184# Dis-LABEL: <vec_dq>:185# Dis-NEXT: addis186# Dis-NEXT: addi187# Dis-NEXT: nop188# Dis-NEXT: lxv 3, -32720(2)189# Dis-NEXT: nop190# Dis-NEXT: stxv 3, -32704(2)191# Dis-NEXT: blr192 193# NoOpt-LABEL: <vec_dq>:194# NoOpt-NEXT: addis195# NoOpt-NEXT: addi196# NoOpt-NEXT: addis 3, 2, 0197# NoOpt-NEXT: lxv 3, -32720(3)198# NoOpt-NEXT: addis 3, 2, 0199# NoOpt-NEXT: stxv 3, -32704(3)200# NoOpt-NEXT: blr201 202 .global vec_ds203 .p2align 4204 .type vec_ds,@function205vec_ds:206.Lvec_ds_gep:207 addis 2, 12, .TOC.-.Lvec_ds_gep@ha208 addi 2, 2, .TOC.-.Lvec_ds_gep@l209.Lvec_ds_lep:210 .localentry vec_ds, .Lvec_dq_lep-.Lvec_dq_gep211 addis 3, 2, vecLd@toc@ha212 lxsd 3, vecLd@toc@l(3)213 addis 3, 2, vecSt@toc@ha214 stxsd 3, vecSt@toc@l(3)215 addis 3, 2, vecLd@toc@ha216 lxssp 3, vecLd@toc@l(3)217 addis 3, 2, vecSt@toc@ha218 stxssp 3, vecSt@toc@l(3)219 blr220# Dis-LABEL: <vec_ds>:221# Dis-NEXT: addis222# Dis-NEXT: addi223# Dis-NEXT: nop224# Dis-NEXT: lxsd 3, -32720(2)225# Dis-NEXT: nop226# Dis-NEXT: stxsd 3, -32704(2)227# Dis-NEXT: nop228# Dis-NEXT: lxssp 3, -32720(2)229# Dis-NEXT: nop230# Dis-NEXT: stxssp 3, -32704(2)231# Dis-NEXT: blr232 233# NoOpt-LABEL: <vec_ds>:234# NoOpt-NEXT: addis235# NoOpt-NEXT: addi236# NoOpt-NEXT: addis 3, 2, 0237# NoOpt-NEXT: lxsd 3, -32720(3)238# NoOpt-NEXT: addis 3, 2, 0239# NoOpt-NEXT: stxsd 3, -32704(3)240# NoOpt-NEXT: addis 3, 2, 0241# NoOpt-NEXT: lxssp 3, -32720(3)242# NoOpt-NEXT: addis 3, 2, 0243# NoOpt-NEXT: stxssp 3, -32704(3)244# NoOpt-NEXT: blr245 246 247 .global byteLd248 .lcomm byteLd, 1, 1249 250 .global byteSt251 .lcomm byteSt, 1, 1252 253 .global halfLd254 .lcomm halfLd, 2, 2255 256 .global halfSt257 .lcomm halfSt, 2, 2258 259 .global wordLd260 .lcomm wordLd, 4, 4261 262 .global wordSt263 .lcomm wordSt, 4, 4264 265 .global dwordLd266 .lcomm dwordLd, 8, 8267 268 .global dwordSt269 .lcomm dwordSt, 8, 8270 271 .global vecLd272 .lcomm vecLd, 16, 16273 274 .global vecSt275 .lcomm vecSt, 16, 16276