[lld] draft: [lld] Add thunks for hexagon (PR #111217)
Brian Cain via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 4 15:06:32 PDT 2024
androm3da wrote:
For reference, here's how the Hexagon SDK's `hexagon-link` handles this interesting test case:
```
$ /local/mnt/workspace/Qualcomm/Hexagon_SDK/5.4.1.1/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-llvm-mc -filetype=obj -triple=hexagon-unknown-linux-musl ../llvm-project/lld/test/ELF/hexagon-thunks-packets.s -o hexagon-thunks-packets.s.tmp.o && /local/mnt/workspace/Qualcomm/Hexagon_SDK/5.4.1.1/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-link -o hexagon-thunks-packets.s.tmp hexagon-thunks-packets.s.tmp.o && /local/mnt/workspace/Qualcomm/Hexagon_SDK/5.4.1.1/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-llvm-objdump -d --print-imm-hex hexagon-thunks-packets.s.tmp
hexagon-thunks-packets.s.tmp: file format elf32-hexagon
Disassembly of section .text:
00000000 <myfn_b>:
0: 00 c0 9f 52 529fc000 { jumpr r31 }
00000004 <main>:
4: 28 40 00 5a 5a004028 { call 0x54 <trampoline_1_for_myfn_a>
8: 00 c0 00 78 7800c000 r0 = #0x0 }
c: 24 c0 00 5a 5a00c024 { call 0x54 <trampoline_1_for_myfn_a> }
10: f8 ff ff 5b 5bfffff8 { call 0x0 <myfn_b> }
14: f6 60 df 5d 5ddf60f6 { if (p0) call 0x0 <myfn_b>
18: 20 40 20 5d 5d204020 if (!p0) call 0x54 <trampoline_1_for_myfn_a>
1c: 02 c1 00 f3 f300c102 r2 = add(r0,r1) }
20: 1a 40 00 5d 5d00401a { if (p0) call 0x54 <trampoline_1_for_myfn_a>
24: 1a 40 20 5d 5d20401a if (!p0) call 0x54 <trampoline_1_for_myfn_a>
28: 02 c1 00 f3 f300c102 r2 = add(r0,r1) }
2c: 14 50 80 61 61805014 { if (r0==#0) jump:t 0x54
30: 02 41 00 f3 f3004102 r2 = add(r0,r1)
34: 54 30 41 30 30413054 r1 = r4; r4 = r5 }
38: 0e 50 c0 61 61c0500e { if (r0<=#0) jump:t 0x54
3c: 0e 40 00 12 1200400e p1 = cmp.eq(r0,#0x0); if (p1.new) jump:nt 0x54 <trampoline_1_for_myfn_a>
40: 02 41 00 f3 f3004102 r2 = add(r0,r1)
44: 04 c0 65 70 7065c004 r4 = r5 }
48: 06 c0 00 16 1600c006 { r0 = #0x0 ; jump 0x54 <trampoline_1_for_myfn_a> }
4c: da c0 30 16 1630c0da { r0 = #0x0 ; jump 0x0 <myfn_b> }
50: 00 c0 9f 52 529fc000 { jumpr r31 }
00000054 <trampoline_1_for_myfn_a>:
54: 00 40 08 00 00084000 { immext(#0x800000)
58: 10 c0 00 58 5800c010 jump 0x80005c <myfn_a> }
...
0080005c <myfn_a>:
80005c: 04 c0 00 16 1600c004 { r0 = #0x0 ; jump 0x800064 <trampoline_2_for_myfn_b> }
800060: 00 c0 9f 52 529fc000 { jumpr r31 }
00800064 <trampoline_2_for_myfn_b>:
800064: fe 7f f7 0f 0ff77ffe { immext(#0xff7fff80)
800068: 38 c0 00 58 5800c038 jump 0x0 <myfn_b> }
```
https://github.com/llvm/llvm-project/pull/111217
More information about the llvm-commits
mailing list