authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-05-29 08:20:36+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-05-29 09:40:38+02:00
log7dfa64eb263a2dc3453a6667ca2f843202e11b31
tree5c14595b8296a872b8879f75767fb7f7a0dd6c13
parenta80ff87a04acff1cd5e5c0496a65d2dbed823c0d
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux.xtensa: add call0 support


1 files changed, 24 insertions(+), 2 deletions(-)

lib/std/os/linux/xtensa.zig+24-2
...@@ -115,9 +115,10 @@ pub fn clone() callconv(.naked) u32 {...@@ -115,9 +115,10 @@ pub fn clone() callconv(.naked) u32 {
115 //115 //
116 // syscall(SYS_clone, flags, stack, ptid, tls, ctid)116 // syscall(SYS_clone, flags, stack, ptid, tls, ctid)
117 // a2 a6, a3, a4, a5, a8117 // a2 a6, a3, a4, a5, a8
118 asm volatile (118 if (builtin.abi != .call0) asm volatile (
119 \\ entry sp, 16119 \\ entry sp, 16
120 \\120 );
121 asm volatile (
121 \\ movi a8, -16122 \\ movi a8, -16
122 \\ and a3, a3, a8123 \\ and a3, a3, a8
123 \\124 \\
...@@ -128,10 +129,29 @@ pub fn clone() callconv(.naked) u32 {...@@ -128,10 +129,29 @@ pub fn clone() callconv(.naked) u32 {
128 \\ mov a8, a6129 \\ mov a8, a6
129 \\ mov a6, a4130 \\ mov a6, a4
130 \\ mov a4, a8131 \\ mov a4, a8
132 );
133 if (builtin.abi == .call0) asm volatile (
134 \\ l32i a8, sp, 0
135 ) else asm volatile (
131 \\ l32i a8, sp, 16136 \\ l32i a8, sp, 16
137 );
138 asm volatile (
132 \\ movi a2, 116 // SYS_clone139 \\ movi a2, 116 // SYS_clone
133 \\ syscall140 \\ syscall
141 );
142 if (builtin.abi == .call0) asm volatile (
143 \\ beqz a2, 1f
144 \\ // parent
145 \\ ret
146 \\
147 \\ // child
148 \\1:
149 \\ movi a15, 0
150 \\ movi a0, 0
134 \\151 \\
152 \\ mov a2, a10
153 \\ callx0 a9
154 ) else asm volatile (
135 \\ beqz a2, 1f155 \\ beqz a2, 1f
136 \\ // parent156 \\ // parent
137 \\ retw157 \\ retw
...@@ -143,6 +163,8 @@ pub fn clone() callconv(.naked) u32 {...@@ -143,6 +163,8 @@ pub fn clone() callconv(.naked) u32 {
143 \\163 \\
144 \\ mov a6, a10164 \\ mov a6, a10
145 \\ callx4 a9165 \\ callx4 a9
166 );
167 asm volatile (
146 \\ movi a2, 118 // SYS_exit168 \\ movi a2, 118 // SYS_exit
147 \\ syscall169 \\ syscall
148 );170 );