From: Jacob Moody <moody@posixcafe.org>
To: 9front@9front.org
Subject: [9front] [PATCH] libc: add _callmain to share more initialization code
Date: Fri, 29 Dec 2023 01:05:30 -0600 [thread overview]
Message-ID: <6eb35852-0af3-4b81-8d9f-3acdc0cb7707@posixcafe.org> (raw)
Before each arch had to implement the _privates array
themselves in assembly, which meant it was quite easy
for them to get out of sync. This cleans this up to be
a single enum and shares this initialization code.
This code also reduces a lot of redundant copying,
by just perserving the stack as is, pushing our main function
and then JMP'ing.
Tested with amd64 hardware, 386 qemu, arm64 qemu, 5e, ki, vi, and ki
The only thing I was unable to test in some capacity was the 68k stuff,
perhaps a resident 68k fan can help review. Would also appreciate some
testing with arm32, mips and spim hardware.
Assembly is not something I am super comfortable with, this has already
done a lot of lookover by cinap but I could have easily missed more issues.
---
diff caec06be08d80ed5c6d99367604dbba006d6013f 46acc8fa0520cd8586253a972b55a5f26faa6a47
--- a/sys/src/libc/386/argv0.s
+++ b/sys/src/libc/386/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/386/main9.s
+++ b/sys/src/libc/386/main9.s
@@ -1,21 +1,7 @@
-#define NPRIVATES 16
-
-TEXT _main(SB), 1, $(8+NPRIVATES*4)
+TEXT _main(SB), 1, $0
MOVL AX, _tos(SB)
- LEAL 8(SP), AX
- MOVL AX, _privates(SB)
- MOVL $NPRIVATES, _nprivates(SB)
- MOVL inargc-4(FP), AX
- MOVL AX, 0(SP)
- LEAL inargv+0(FP), AX
- MOVL AX, 4(SP)
- CALL main(SB)
-
-loop:
- MOVL $_exits<>(SB), AX
- MOVL AX, 0(SP)
- CALL exits(SB)
- JMP loop
-
-DATA _exits<>+0(SB)/4, $"main"
-GLOBL _exits<>+0(SB), $5
+ MOVL $main(SB), AX
+ PUSHL AX
+ PUSHL $0
+ MOVL $_callmain(SB), AX
+ JMP* AX
--- a/sys/src/libc/386/main9p.s
+++ b/sys/src/libc/386/main9p.s
@@ -1,30 +1,11 @@
-#define NPRIVATES 16
-
-TEXT _mainp(SB), 1, $(8+NPRIVATES*4)
- /* _tos = arg */
+TEXT _mainp(SB), 1, $0
MOVL AX, _tos(SB)
- LEAL 8(SP), AX
- MOVL AX, _privates(SB)
- MOVL $NPRIVATES, _nprivates(SB)
- /* _profmain(); */
- CALL _profmain(SB)
- /* _tos->prof.pp = _tos->prof.next; */
- MOVL _tos+0(SB),DX
- MOVL 4(DX),CX
- MOVL CX,(DX)
- /* main(argc, argv); */
- MOVL inargc-4(FP), AX
- MOVL AX, 0(SP)
- LEAL inargv+0(FP), AX
- MOVL AX, 4(SP)
- CALL main(SB)
-
-loop:
- MOVL $_exits<>(SB), AX
- MOVL AX, 0(SP)
- CALL exits(SB)
+ MOVL $_profmain(SB), AX
+ PUSHL AX
+ PUSHL $0
+ MOVL $_callmain(SB), AX
+ JMP* AX
MOVL $_profin(SB), AX /* force loading of profile */
- JMP loop
TEXT _saveret(SB), 1, $0
TEXT _savearg(SB), 1, $0
--- a/sys/src/libc/68000/argv0.s
+++ b/sys/src/libc/68000/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/68000/main9.s
+++ b/sys/src/libc/68000/main9.s
@@ -1,18 +1,13 @@
-#define NPRIVATES 16
-
-TEXT _main(SB), 1, $(16 + NPRIVATES*4)
+TEXT _main(SB), 1, $0
MOVL $a6base(SB), A6
MOVL R0, _tos(SB)
- LEA p-64(SP),A0
- MOVL A0,_privates+0(SB)
- MOVL $16,R0
- MOVL R0,_nprivates+0(SB)
- PEA inargv+0(FP)
- MOVL inargc-4(FP), TOS
- BSR main(SB)
+ PEA main(SB)
+ BSR _callmain(SB)
+
+loop:
PEA _exits<>+0(SB)
BSR exits(SB)
- RTS
+ BRA loop
DATA _exits<>+0(SB)/4, $"main"
GLOBL _exits<>+0(SB), $5
--- a/sys/src/libc/68000/main9p.s
+++ b/sys/src/libc/68000/main9p.s
@@ -1,17 +1,8 @@
-#define NPRIVATES 16
-
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*4)
+TEXT _mainp(SB), 1, $0
MOVL $a6base(SB), A6
- MOVL R0, _tos(SB) /* return value of sys exec!! */
- LEA p-64(SP),A0
- MOVL A0,_privates+0(SB)
- MOVL $16,R0
- MOVL R0,_nprivates+0(SB)
- BSR _profmain(SB)
- MOVL __prof+4(SB), __prof+0(SB)
- PEA inargv+0(FP)
- MOVL inargc-4(FP), TOS
- BSR main(SB)
+ MOVL R0, _tos(SB)
+ PEA _profmain(SB)
+ BSR _callmain(SB)
loop:
PEA _exits<>+0(SB)
--- a/sys/src/libc/68020/argv0.s
+++ b/sys/src/libc/68020/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/68020/main9.s
+++ b/sys/src/libc/68020/main9.s
@@ -1,19 +1,13 @@
-#define NPRIVATES 16
-
-TEXT _main(SB), 1, $(16 + NPRIVATES*4)
+TEXT _main(SB), 1, $0
MOVL $a6base(SB), A6
MOVL R0, _tos(SB)
- LEA p-64(SP),A0
- MOVL A0,_privates+0(SB)
- MOVL $16,R0
- MOVL R0,_nprivates+0(SB)
- PEA inargv+0(FP)
- MOVL inargc-4(FP), TOS
- BSR main(SB)
- MOVL $_exits<>+0(SB), R0
- MOVL R0,TOS
+ PEA main(SB)
+ BSR _callmain(SB)
+
+loop:
+ PEA _exits<>+0(SB)
BSR exits(SB)
- RTS
+ BRA loop
DATA _exits<>+0(SB)/4, $"main"
GLOBL _exits<>+0(SB), $5
--- a/sys/src/libc/68020/main9p.s
+++ b/sys/src/libc/68020/main9p.s
@@ -1,21 +1,11 @@
-#define NPRIVATES 16
-
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*4)
+TEXT _mainp(SB), 1, $0
MOVL $a6base(SB), A6
- MOVL R0, _tos(SB) /* return value of sys exec!! */
- LEA p-64(SP),A0
- MOVL A0,_privates+0(SB)
- MOVL $16,R0
- MOVL R0,_nprivates+0(SB)
- BSR _profmain(SB)
- MOVL __prof+4(SB), __prof+0(SB)
- PEA inargv+0(FP)
- MOVL inargc-4(FP), TOS
- BSR main(SB)
+ MOVL R0, _tos(SB)
+ PEA _profmain(SB)
+ BSR _callmain(SB)
loop:
- MOVL $_exits<>+0(SB), R0
- MOVL R0,TOS
+ PEA _exits<>+0(SB)
BSR exits(SB)
LEA _profin(SB), A0 /* force loading of profile */
BRA loop
--- /dev/null
+++ b/sys/src/libc/9sys/callmain.c
@@ -1,0 +1,24 @@
+#include <u.h>
+#include <libc.h>
+
+void **_privates;
+int _nprivates;
+
+enum{
+ NPRIVATES=16,
+};
+
+#pragma profile off
+
+void
+_callmain(void (*main)(int, char**), int argc, char *arg0)
+{
+ void *privates[NPRIVATES];
+
+ _privates = privates;
+ _nprivates = NPRIVATES;
+ main(argc, &arg0);
+ exits("main");
+}
+
+#pragma profile on
--- a/sys/src/libc/9sys/mkfile
+++ b/sys/src/libc/9sys/mkfile
@@ -5,6 +5,7 @@
abort.$O\
access.$O\
announce.$O\
+ callmain.$O\
convD2M.$O\
convM2D.$O\
convM2S.$O\
--- a/sys/src/libc/amd64/argv0.s
+++ b/sys/src/libc/amd64/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $8
GLOBL _tos(SB), $8
-GLOBL _privates(SB), $8
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/amd64/main9.s
+++ b/sys/src/libc/amd64/main9.s
@@ -1,19 +1,7 @@
-#define NPRIVATES 16
-
-TEXT _main(SB), 1, $(2*8+NPRIVATES*8)
+TEXT _main(SB), 1, $0
MOVQ AX, _tos(SB)
- LEAQ 16(SP), AX
- MOVQ AX, _privates(SB)
- MOVL $NPRIVATES, _nprivates(SB)
- MOVL inargc-8(FP), RARG
- LEAQ inargv+0(FP), AX
- MOVQ AX, 8(SP)
- CALL main(SB)
-
-loop:
- MOVQ $_exits<>(SB), RARG
- CALL exits(SB)
- JMP loop
-
-DATA _exits<>+0(SB)/4, $"main"
-GLOBL _exits<>+0(SB), $5
+ MOVQ $main(SB), RARG
+ PUSHQ RARG
+ PUSHQ $0
+ MOVQ $_callmain(SB), AX
+ JMP* AX
--- a/sys/src/libc/amd64/main9p.s
+++ b/sys/src/libc/amd64/main9p.s
@@ -1,27 +1,12 @@
-#define NPRIVATES 16
+TEXT _mainp(SB), 1, $0
+ MOVQ AX, _tos(SB)
+ MOVQ $_profmain(SB), RARG
+ PUSHQ RARG
+ PUSHQ $0
+ MOVQ $_callmain(SB), AX
+ JMP* AX
-TEXT _mainp(SB), 1, $(2*8+NPRIVATES*8)
- MOVQ AX, _tos(SB) /* _tos = arg */
- LEAQ 16(SP), AX
- MOVQ AX, _privates(SB)
- MOVL $NPRIVATES, _nprivates(SB)
-
- CALL _profmain(SB) /* _profmain(); */
-
- MOVQ _tos+0(SB), DX /* _tos->prof.pp = _tos->prof.next; */
- MOVQ 8(DX), CX
- MOVQ CX, (DX)
-
- MOVL inargc-8(FP), RARG /* main(argc, argv); */
- LEAQ inargv+0(FP), AX
- MOVQ AX, 8(SP)
- CALL main(SB)
-
-loop:
- MOVQ $_exits<>(SB), RARG
- CALL exits(SB)
MOVQ $_profin(SB), AX /* force loading of profile */
- JMP loop
TEXT _savearg(SB), 1, $0
MOVQ RARG, AX
@@ -33,6 +18,3 @@
TEXT _callpc(SB), 1, $0
MOVQ 8(RARG), AX
RET
-
-DATA _exits<>+0(SB)/4, $"main"
-GLOBL _exits<>+0(SB), $5
--- a/sys/src/libc/arm/argv0.s
+++ b/sys/src/libc/arm/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/arm/main9.s
+++ b/sys/src/libc/arm/main9.s
@@ -1,29 +1,14 @@
-#define NPRIVATES 16
-
arg=0
sp=13
sb=12
+lr=14
-TEXT _main(SB), 1, $(16 + NPRIVATES*4)
+TEXT _main(SB), 1, $4
MOVW $setR12(SB), R(sb)
MOVW R(arg), _tos(SB)
- MOVW $p-64(SP), R1
- MOVW R1, _privates(SB)
- MOVW $NPRIVATES, R1
- MOVW R1, _nprivates(SB)
+ MOVW $main(SB), R(arg)
+ MOVW $0, R(lr)
+ B _callmain(SB)
- MOVW $inargv+0(FP), R(arg)
- MOVW R(arg), 8(R(sp))
- MOVW inargc-4(FP), R(arg)
- MOVW R(arg), 4(R(sp))
- BL main(SB)
-loop:
- MOVW $_exitstr<>(SB), R(arg)
- MOVW R(arg), 4(R(sp))
- BL exits(SB)
- BL _div(SB)
- B loop
-
-DATA _exitstr<>+0(SB)/4, $"main"
-GLOBL _exitstr<>+0(SB), $5
+ BL _div(SB) /* force loading of div */
--- a/sys/src/libc/arm/main9p.s
+++ b/sys/src/libc/arm/main9p.s
@@ -1,35 +1,18 @@
-#define NPRIVATES 16
-
arg=0
sp=13
sb=12
+lr=14
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*4)
+TEXT _mainp(SB), 1, $4
MOVW $setR12(SB), R(sb)
MOVW R(arg), _tos(SB)
- MOVW $p-64(SP), R1
- MOVW R1, _privates(SB)
- MOVW $NPRIVATES, R1
- MOVW R1, _nprivates(SB)
+ MOVW $_profmain(SB), R(arg)
+ MOVW $0, R(lr)
+ B _callmain(SB)
- BL _profmain(SB)
- MOVW _tos(SB), R1
- MOVW 4(R1), R0
- MOVW R0, 0(R1)
-
- MOVW $inargv+0(FP), R(arg)
- MOVW R(arg), 8(R(sp))
- MOVW inargc-4(FP), R(arg)
- MOVW R(arg), 4(R(sp))
- BL main(SB)
-loop:
- MOVW $_exitstr<>(SB), R(arg)
- MOVW R(arg), 4(R(sp))
- BL exits(SB)
MOVW $_div(SB), R(arg) /* force loading of div */
MOVW $_profin(SB), R(arg) /* force loading of profile */
- B loop
TEXT _saveret(SB), 1, $0
TEXT _savearg(SB), 1, $0
@@ -38,6 +21,3 @@
TEXT _callpc(SB), 1, $-4
MOVW 0(R13), R(arg)
RET
-
-DATA _exitstr<>+0(SB)/4, $"main"
-GLOBL _exitstr<>+0(SB), $5
--- a/sys/src/libc/arm64/argv0.s
+++ b/sys/src/libc/arm64/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $8
GLOBL _tos(SB), $8
-GLOBL _privates(SB), $8
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/arm64/main9.s
+++ b/sys/src/libc/arm64/main9.s
@@ -1,25 +1,8 @@
-#define NPRIVATES 16
-
-TEXT _main(SB), 1, $(16 + NPRIVATES*8)
+TEXT _main(SB), 1, $8
MOV $setSB(SB), R28
MOV R0, _tos(SB)
- ADD $32, RSP, R1
- MOV R1, _privates(SB)
- MOVW $NPRIVATES, R2
- MOVW R2, _nprivates(SB)
+ MOV $main(SB), R0
- MOV $inargv+0(FP), R1
- MOV R1, 16(RSP)
-
- MOVW inargc-8(FP), R0
- MOV R0, 8(RSP)
-
- BL main(SB)
-loop:
- MOV $_exitstr<>(SB), R0
- BL exits(SB)
- B loop
-
-DATA _exitstr<>+0(SB)/4, $"main"
-GLOBL _exitstr<>+0(SB), $5
+ MOV $0, R30
+ B _callmain(SB)
--- a/sys/src/libc/arm64/main9p.s
+++ b/sys/src/libc/arm64/main9p.s
@@ -1,32 +1,13 @@
-#define NPRIVATES 16
-
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*8)
+TEXT _mainp(SB), 1, $8
MOV $setSB(SB), R28
MOV R0, _tos(SB)
- ADD $32, RSP, R1
- MOV R1, _privates(SB)
- MOVW $NPRIVATES, R2
- MOVW R2, _nprivates(SB)
+ MOV $_profmain(SB), R0
- BL _profmain(SB)
+ MOV $0, R30
+ B _callmain(SB)
- MOV _tos(SB), R0 /* _tos->prof.pp = _tos->prof.next; */
- MOV 8(R0), R1
- MOV R1, 0(R0)
-
- MOV $inargv+0(FP), R1
- MOV R1, 16(RSP)
-
- MOVW inargc-8(FP), R0
- MOV R0, 8(RSP)
-
- BL main(SB)
-loop:
- MOV $_exitstr<>(SB), R0
- BL exits(SB)
MOV $_profin(SB), R0
- B loop
TEXT _callpc(SB), 1, $-4
MOV 0(SP), R0
--- a/sys/src/libc/mips/argv0.s
+++ b/sys/src/libc/mips/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/mips/main9.s
+++ b/sys/src/libc/mips/main9.s
@@ -1,25 +1,8 @@
-#define NPRIVATES 16
+TEXT _main(SB), 1, $4
-TEXT _main(SB), 1, $(16 + NPRIVATES*4)
-
MOVW $setR30(SB), R30
MOVW R1, _tos(SB)
- MOVW $p-64(SP), R1
- MOVW R1, _privates(SB)
- MOVW $NPRIVATES, R1
- MOVW R1, _nprivates(SB)
-
- MOVW inargc-4(FP), R1
- MOVW $inargv+0(FP), R2
- MOVW R1, 4(R29)
- MOVW R2, 8(R29)
- JAL main(SB)
-loop:
- MOVW $_exitstr<>(SB), R1
- MOVW R1, 4(R29)
- JAL exits(SB)
- JMP loop
-
-DATA _exitstr<>+0(SB)/4, $"main"
-GLOBL _exitstr<>+0(SB), $5
+ MOVW $main(SB), R1
+ MOVW $0, R31
+ JMP _callmain(SB)
--- a/sys/src/libc/mips/main9p.s
+++ b/sys/src/libc/mips/main9p.s
@@ -1,29 +1,12 @@
-#define NPRIVATES 16
+TEXT _mainp(SB), 1, $4
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*4)
-
MOVW $setR30(SB), R30
MOVW R1, _tos(SB)
- MOVW $p-64(SP), R1
- MOVW R1, _privates(SB)
- MOVW $NPRIVATES, R1
- MOVW R1, _nprivates(SB)
-
- JAL _profmain(SB)
- MOVW __prof+4(SB), R1
- MOVW R1, __prof+0(SB)
- MOVW inargc-4(FP), R1
- MOVW $inargv+0(FP), R2
- MOVW R1, 4(R29)
- MOVW R2, 8(R29)
- JAL main(SB)
-loop:
- MOVW $exits<>(SB), R1
- MOVW R1, 4(R29)
- JAL exits(SB)
+ MOVW $_profmain(SB), R1
+ MOVW $0, R31
+ JMP _callmain(SB)
MOVW $_profin(SB), R0 /* force loading of profile */
- JMP loop
TEXT _saveret(SB), 1, $0
TEXT _savearg(SB), 1, $0
--- a/sys/src/libc/port/profile.c
+++ b/sys/src/libc/port/profile.c
@@ -235,7 +235,7 @@
}
void
-_profmain(void)
+_profmain(int argc, char **argv)
{
char ename[50];
int n, f;
@@ -274,6 +274,9 @@
_tos->prof.pid = _tos->pid;
atexit(_profdump);
_tos->clock = 1;
+ _tos->prof.pp = _tos->prof.next;
+ extern void main(int, char**);
+ main(argc, argv);
}
void prof(void (*fn)(void*), void *arg, int entries, int what)
--- a/sys/src/libc/power/argv0.s
+++ b/sys/src/libc/power/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/power/main9.s
+++ b/sys/src/libc/power/main9.s
@@ -1,23 +1,12 @@
-#define NPRIVATES 16
-
-TEXT _main(SB), 1, $(16 + NPRIVATES*4)
-
+TEXT _main(SB), 1, $0
MOVW $setSB(SB), R2
MOVW R3, _tos(SB)
- MOVW $p-64(SP), R4
- MOVW R4, _privates+0(SB)
- MOVW $16, R4
- MOVW R4, _nprivates+0(SB)
-
- MOVW inargc-4(FP), R3
- MOVW $inargv+0(FP), R4
+ MOVW $main(SB), R3
MOVW R3, 4(R1)
- MOVW R4, 8(R1)
- BL main(SB)
+ BL _callmain(SB)
loop:
MOVW $_exitstr<>(SB), R3
- MOVW R3, 4(R1)
BL exits(SB)
BR loop
--- a/sys/src/libc/power/main9p.s
+++ b/sys/src/libc/power/main9p.s
@@ -1,27 +1,12 @@
-#define NPRIVATES 16
-
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*4)
-
+TEXT _mainp(SB), 1, $0
MOVW $setSB(SB), R2
MOVW R3, _tos(SB)
- MOVW $p-64(SP), R4
- MOVW R4, _privates+0(SB)
- MOVW $16, R4
- MOVW R4, _nprivates+0(SB)
-
- BL _profmain(SB)
- MOVW _tos(SB), R3
- MOVW 4(R3), R4
- MOVW R4, 0(R3)
- MOVW inargc-4(FP), R3
- MOVW $inargv+0(FP), R4
+ MOVW $_profmain(SB), R3
MOVW R3, 4(R1)
- MOVW R4, 8(R1)
- BL main(SB)
+ BL _callmain(SB)
loop:
MOVW $exits<>(SB), R3
- MOVW R3, 4(R1)
BL exits(SB)
MOVW $_profin(SB), R3 /* force loading of profile */
BR loop
--- a/sys/src/libc/sparc/argv0.s
+++ b/sys/src/libc/sparc/argv0.s
@@ -1,4 +1,2 @@
GLOBL argv0(SB), $4
GLOBL _tos(SB), $4
-GLOBL _privates(SB), $4
-GLOBL _nprivates(SB), $4
--- a/sys/src/libc/sparc/main9.s
+++ b/sys/src/libc/sparc/main9.s
@@ -1,14 +1,8 @@
-#define NPRIVATES 16
+TEXT _main(SB), 1, $0
-TEXT _main(SB), 1, $(16 + NPRIVATES*4)
-
MOVW $setSB(SB), R2
MOVW R7, _tos(SB)
- MOVW $p-64(SP),R7
- MOVW R7,_privates+0(SB)
- MOVW $16,R7
- MOVW R7,_nprivates+0(SB)
/*
MOVW _fpsr+0(SB), FSR
FMOVD $0.5, F26
@@ -16,10 +10,8 @@
FADDD F26, F26, F28
FADDD F28, F28, F30
*/
- MOVW inargc-4(FP), R7
- MOVW $inargv+0(FP), R8
- MOVW R8, 8(R1)
- JMPL main(SB)
+ MOVW $main(SB), R7
+ JMPL _callmain(SB)
loop:
MOVW $_exits<>(SB), R7
--- a/sys/src/libc/sparc/main9p.s
+++ b/sys/src/libc/sparc/main9p.s
@@ -1,14 +1,8 @@
-#define NPRIVATES 16
+TEXT _mainp(SB), 1, $0
-TEXT _mainp(SB), 1, $(16 + NPRIVATES*4)
-
MOVW $setSB(SB), R2
MOVW R7, _tos(SB)
- MOVW $p-64(SP),R7
- MOVW R7,_privates+0(SB)
- MOVW $16,R7
- MOVW R7,_nprivates+0(SB)
/*
MOVW _fpsr+0(SB), FSR
FMOVD $0.5, F26
@@ -16,16 +10,8 @@
FADDD F26, F26, F28
FADDD F28, F28, F30
*/
-
- JMPL _profmain(SB)
- MOVW __prof+4(SB), R7
- MOVW R7, __prof+0(SB)
-
- MOVW inargc-4(FP), R7
- MOVW $inargv+0(FP), R8
- MOVW R8, 8(R1)
- JMPL main(SB)
-
+ MOVW $_profmain(SB), R7
+ JMPL _callmain(SB)
loop:
MOVW $_exits<>(SB), R7
JMPL exits(SB)
next reply other threads:[~2023-12-29 7:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-29 7:05 Jacob Moody [this message]
2023-12-31 0:22 ` Jacob Moody
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6eb35852-0af3-4b81-8d9f-3acdc0cb7707@posixcafe.org \
--to=moody@posixcafe.org \
--cc=9front@9front.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).