| .text |
| .globl _start |
| _start: |
| # original PCREL_OPT definition, with second insn immediately after first |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0 |
| lbz 3,0(9) |
| |
| # but we now allow an offset to the second insn |
| pld 22,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| nop |
| 0: lhz 4,0(22) |
| |
| # in fact, it can even be before the "first" insn |
| 0: lha 3,0(9) |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0b-(.-8) |
| bne 0b |
| |
| # and of course, other local labels work |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,.L1-(.-8) |
| .L1: lwz 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lwa 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: ld 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lq 14,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lfs 1,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lfd 1,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lxsd 30,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lxssp 31,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lxv 63,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lxv 0,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stb 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: sth 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stw 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: std 3,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stq 14,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stfd 1,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stfs 2,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stxsd 30,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stxssp 31,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stxv 63,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stxv 0,0(9) |
| |
| #offsets are allowed too |
| pld 9,sym@got@pcrel |
| 0: |
| lbz 3,0x1234(9) |
| .reloc 0b-8,R_PPC64_PCREL_OPT,(.-4)-(0b-8) |
| |
| #and prefix insns as the second insn |
| pld 9,sym@got@pcrel |
| 0: |
| plq 4,0x12345678(9) |
| .reloc 0b-8,R_PPC64_PCREL_OPT,(.-8)-(0b-8) |
| |
| # This should not optimize |
| .extern i |
| .type i,@object |
| pld 9,i@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: ld 0,0(9) |
| |
| # and this should edit from GOT indirect to GOT relative |
| # ie. change the pld to paddi, leaving the lbz as is. |
| pld 7,sym@got@pcrel |
| lbz 6,0(7) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lxvp 62,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: lxvp 0,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stxvp 62,0(9) |
| |
| pld 9,sym@got@pcrel |
| .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8) |
| 0: stxvp 0,0(9) |
| |
| .data |
| sym: .space 32 |