aboutsummaryrefslogtreecommitdiff
path: root/lib/std/start.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-10-23 06:18:22 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-10-23 09:27:17 +0200
commit4193ea8239264c7ee6891e9ef5ee756e13833fb2 (patch)
treeceb2795143bfbd338df8229158018a386ae1a30d /lib/std/start.zig
parentc792ebfee2fab3ee9c633e7abc344d0e7535c983 (diff)
downloadzig-4193ea8239264c7ee6891e9ef5ee756e13833fb2.tar.gz
zig-4193ea8239264c7ee6891e9ef5ee756e13833fb2.zip
std.start: add sh support
Diffstat (limited to 'lib/std/start.zig')
-rw-r--r--lib/std/start.zig16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/std/start.zig b/lib/std/start.zig
index 7e45bc42ea..4cf2a0956b 100644
--- a/lib/std/start.zig
+++ b/lib/std/start.zig
@@ -212,6 +212,7 @@ fn _start() callconv(.naked) noreturn {
else
".cfi_undefined ra",
.s390x => ".cfi_undefined %%r14",
+ .sh, .sheb => ".cfi_undefined pr",
.sparc, .sparc64 => ".cfi_undefined %%i7",
.x86 => ".cfi_undefined %%eip",
.x86_64 => ".cfi_undefined %%rip",
@@ -455,6 +456,21 @@ fn _start() callconv(.naked) noreturn {
\\ stg %%r0, 0(%%r15)
\\ jg %[posixCallMainAndExit]
,
+ .sh, .sheb =>
+ // r14 = FP, r15 = SP, pr = LR
+ \\ mov #0, r0
+ \\ lds r0, pr
+ \\ mov r0, r14
+ \\ mov r15, r4
+ \\ mov #-4, r0
+ \\ and r0, r15
+ \\ mov.l 2f, r1
+ \\1:
+ \\ bsrf r1
+ \\2:
+ \\ .balign 4
+ \\ .long %[posixCallMainAndExit]@PCREL - (1b + 4 - .)
+ ,
.sparc =>
// argc is stored after a register window (16 registers * 4 bytes).
// i7 = LR