@@ -12,15 +12,21 @@ block0(v0: i64):
1212; VCode:
1313; push_frame
1414; block0:
15- ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [XReg(p0i), XReg(p0i), XReg(p0i), XReg(p0i)] }, uses: [], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
16- ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [XReg(p0i), XReg(p0i), XReg(p0i), XReg(p0i)] }, uses: [], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
15+ ; xmov x3, x0
16+ ; xmov x1, x3
17+ ; xmov x2, x3
18+ ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [] }, uses: [CallArgPair { vreg: p0i, preg: p0i }, CallArgPair { vreg: p1i, preg: p1i }, CallArgPair { vreg: p2i, preg: p2i }, CallArgPair { vreg: p3i, preg: p3i }], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
19+ ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [] }, uses: [CallArgPair { vreg: p0i, preg: p0i }, CallArgPair { vreg: p1i, preg: p1i }, CallArgPair { vreg: p2i, preg: p2i }, CallArgPair { vreg: p3i, preg: p3i }], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
1720; pop_frame
1821; ret
1922;
2023; Disassembled:
2124; push_frame
22- ; call4 x0, x0, x0, x0, 0x5 // target = 0x6
23- ; call4 x0, x0, x0, x0, 0x5 // target = 0xf
25+ ; xmov x3, x0
26+ ; xmov x1, x3
27+ ; xmov x2, x3
28+ ; call 0x1 // target = 0xb
29+ ; call 0x1 // target = 0x10
2430; pop_frame
2531; ret
2632
@@ -36,26 +42,32 @@ block0(v0: i64):
3642; push_frame
3743; block0:
3844; xmov x9, x0
45+ ; xmov x1, x9
46+ ; xmov x2, x9
47+ ; xmov x3, x9
3948; xmov x4, x9
4049; xmov x5, x9
4150; xmov x6, x9
4251; xmov x7, x9
4352; xmov x8, x9
44- ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [XReg(p9i), XReg(p9i), XReg(p9i), XReg(p9i)] }, uses: [ CallArgPair { vreg: p4i, preg: p4i }, CallArgPair { vreg: p5i, preg: p5i }, CallArgPair { vreg: p6i, preg: p6i }, CallArgPair { vreg: p7i, preg: p7i }, CallArgPair { vreg: p8i, preg: p8i }, CallArgPair { vreg: p9i, preg: p9i }], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
45- ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [XReg(p9i), XReg(p9i), XReg(p9i), XReg(p9i)] }, uses: [ CallArgPair { vreg: p4i, preg: p4i }, CallArgPair { vreg: p5i, preg: p5i }, CallArgPair { vreg: p6i, preg: p6i }, CallArgPair { vreg: p7i, preg: p7i }, CallArgPair { vreg: p8i, preg: p8i }, CallArgPair { vreg: p9i, preg: p9i }], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
53+ ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [] }, uses: [CallArgPair { vreg: p0i, preg: p0i }, CallArgPair { vreg: p1i, preg: p1i }, CallArgPair { vreg: p2i, preg: p2i }, CallArgPair { vreg: p3i, preg: p3i }, CallArgPair { vreg: p4i, preg: p4i }, CallArgPair { vreg: p5i, preg: p5i }, CallArgPair { vreg: p6i, preg: p6i }, CallArgPair { vreg: p7i, preg: p7i }, CallArgPair { vreg: p8i, preg: p8i }, CallArgPair { vreg: p9i, preg: p9i }], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
54+ ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [] }, uses: [CallArgPair { vreg: p0i, preg: p0i }, CallArgPair { vreg: p1i, preg: p1i }, CallArgPair { vreg: p2i, preg: p2i }, CallArgPair { vreg: p3i, preg: p3i }, CallArgPair { vreg: p4i, preg: p4i }, CallArgPair { vreg: p5i, preg: p5i }, CallArgPair { vreg: p6i, preg: p6i }, CallArgPair { vreg: p7i, preg: p7i }, CallArgPair { vreg: p8i, preg: p8i }, CallArgPair { vreg: p9i, preg: p9i }], defs: [], clobbers: PRegSet { bits: [0, 0, 0, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: None, patchable: true }
4655; pop_frame
4756; ret
4857;
4958; Disassembled:
5059; push_frame
5160; xmov x9, x0
61+ ; xmov x1, x9
62+ ; xmov x2, x9
63+ ; xmov x3, x9
5264; xmov x4, x9
5365; xmov x5, x9
5466; xmov x6, x9
5567; xmov x7, x9
5668; xmov x8, x9
57- ; call4 x9, x9, x9, x9, 0x5 // target = 0x18
58- ; call4 x9, x9, x9, x9, 0x5 // target = 0x21
69+ ; call 0x1 // target = 0x1d
70+ ; call 0x1 // target = 0x22
5971; pop_frame
6072; ret
6173
@@ -76,12 +88,11 @@ block2(v1: i32):
7688; VCode:
7789; push_frame_save 144, {x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, sp, spilltmp0}
7890; block0:
79- ; xmov x8, x0
80- ; xmov x10, x0
81- ; xmov x11, x0
82- ; xmov x12, x0
8391; xstore64 Slot(0), x0 // flags = notrap aligned
84- ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [XReg(p8i), XReg(p12i), XReg(p11i), XReg(p10i)] }, uses: [], defs: [CallRetPair { vreg: Writable { reg: p0i }, location: Reg(p0i, types::I32) }, CallRetPair { vreg: Writable { reg: p1i }, location: Reg(p1i, types::I32) }], clobbers: PRegSet { bits: [4294967292, 4294967295, 4294967295, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: Some(TryCallInfo { continuation: MachLabel(1), exception_handlers: [Default(MachLabel(2))] }), patchable: true }; jump MachLabel(1); catch [default: MachLabel(2)]
92+ ; x1 = xload64 Slot(0) // flags = notrap aligned
93+ ; x2 = xload64 Slot(0) // flags = notrap aligned
94+ ; x3 = xload64 Slot(0) // flags = notrap aligned
95+ ; call CallInfo { dest: PulleyCall { name: TestCase(%f), args: [] }, uses: [CallArgPair { vreg: p0i, preg: p0i }, CallArgPair { vreg: p1i, preg: p1i }, CallArgPair { vreg: p2i, preg: p2i }, CallArgPair { vreg: p3i, preg: p3i }], defs: [CallRetPair { vreg: Writable { reg: p0i }, location: Reg(p0i, types::I32) }, CallRetPair { vreg: Writable { reg: p1i }, location: Reg(p1i, types::I32) }], clobbers: PRegSet { bits: [4294967292, 4294967295, 4294967295, 0] }, callee_conv: PreserveAll, caller_conv: SystemV, callee_pop_size: 0, try_call_info: Some(TryCallInfo { continuation: MachLabel(1), exception_handlers: [Default(MachLabel(2))] }), patchable: true }; jump MachLabel(1); catch [default: MachLabel(2)]
8596; block1:
8697; x0 = xload64 Slot(0) // flags = notrap aligned
8798; pop_frame_restore 144, {x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, sp, spilltmp0}
@@ -93,12 +104,11 @@ block2(v1: i32):
93104;
94105; Disassembled:
95106; push_frame_save 144, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, sp, spilltmp0
96- ; xmov x8, x0
97- ; xmov x10, x0
98- ; xmov x11, x0
99- ; xmov x12, x0
100107; xstore64le_o32 sp, 0, x0
101- ; call4 x8, x12, x11, x10, 0x5 // target = 0x1d
108+ ; xload64le_o32 x1, sp, 0
109+ ; xload64le_o32 x2, sp, 0
110+ ; xload64le_o32 x3, sp, 0
111+ ; call 0x1 // target = 0x22
102112; xload64le_o32 x0, sp, 0
103113; pop_frame_restore 144, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, sp, spilltmp0
104114; ret
0 commit comments