tocopt.s 1006 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. .section .toc,"aw"
  2. x4t:
  3. .quad x4
  4. x5t:
  5. .quad x5
  6. x6t:
  7. .quad x6
  8. .section .sdata,"aw"
  9. x1:
  10. .byte 1
  11. x2:
  12. .byte 2
  13. x3:
  14. .byte 3
  15. x4:
  16. .byte 4
  17. x5:
  18. .byte 5
  19. x6:
  20. .byte 6
  21. .globl _start
  22. .text
  23. _start:
  24. # no need for got entry, optimise to nop,addi
  25. # note that due to unexpected toc/got insns the full optimisation is
  26. # not done. see tocopt5 for test without unexpected insns.
  27. addis 9,2,x1@got@ha
  28. ld 9,x1@got@l(9)
  29. # must keep got entry, optimise to nop,addi,ld
  30. addis 4,2,x2@got@ha
  31. addi 5,4,x2@got@l
  32. ld 6,0(5)
  33. # must keep got entry, optimise to nop,li,ldx
  34. lis 29,x3@got@ha
  35. addi 29,29,x3@got@l
  36. ldx 3,2,29
  37. # no need for toc entry, optimise to nop,addi
  38. addis 9,2,x4t@toc@ha
  39. ld 9,x4t@toc@l(9)
  40. # must keep toc entry, optimise to nop,addi,ld
  41. # if we had a reloc tying the ld to x5/x5t then we could throw away
  42. # the toc entry and optimise to nop,nop,addi
  43. addis 4,2,x5t@toc@ha
  44. addi 5,4,x5t@toc@l
  45. ld 6,0(5)
  46. # must keep toc entry, optimise to nop,li,ldx
  47. lis 29,x6t@toc@ha
  48. addi 29,29,x6t@toc@l
  49. ldx 3,2,29