diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-10-23 06:18:22 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2025-10-23 09:27:17 +0200 |
| commit | 4193ea8239264c7ee6891e9ef5ee756e13833fb2 (patch) | |
| tree | ceb2795143bfbd338df8229158018a386ae1a30d /lib/std/start.zig | |
| parent | c792ebfee2fab3ee9c633e7abc344d0e7535c983 (diff) | |
| download | zig-4193ea8239264c7ee6891e9ef5ee756e13833fb2.tar.gz zig-4193ea8239264c7ee6891e9ef5ee756e13833fb2.zip | |
std.start: add sh support
Diffstat (limited to 'lib/std/start.zig')
| -rw-r--r-- | lib/std/start.zig | 16 |
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 |
