detached df7b1ee

all: run asmfmt on all assembly code (#404)

Runs asmfmt on all assembly files to keep formatting consistent.
commit
df7b1ee1e4887b63f976cdd9ec8a445f18d85ca6
author
George Adams · · 2026-01-29 15:20 UTC
committer
GitHub · · 2026-01-29 15:20 UTC
parent
86ea9d6
signature
GPG UnverifiedB5690EEEBB952194 The key is unknown
13 files · +14331 -14329
M internal/fakecgo/asm_loong64.s +17 -17
@@ -9,32 +9,32 @@
99 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
1010 // Saves C callee-saved registers and calls cgocallback with three arguments.
1111 // fn is the PC of a func(a unsafe.Pointer) function.
12-TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0
13- /*
14- * We still need to save all callee save register as before, and then
15- * push 3 args for fn (R4, R5, R7), skipping R6.
16- * Also note that at procedure entry in gc world, 8(R29) will be the
17- * first arg.
18- */
19-
20- ADDV $(-23*8), R3
21- MOVV R4, (1*8)(R3) // fn unsafe.Pointer
22- MOVV R5, (2*8)(R3) // a unsafe.Pointer
23- MOVV R7, (3*8)(R3) // ctxt uintptr
12+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0
13+/*
14+ * We still need to save all callee save register as before, and then
15+ * push 3 args for fn (R4, R5, R7), skipping R6.
16+ * Also note that at procedure entry in gc world, 8(R29) will be the
17+ * first arg.
18+ */
19+
20+ ADDV $(-23*8), R3
21+ MOVV R4, (1*8)(R3) // fn unsafe.Pointer
22+ MOVV R5, (2*8)(R3) // a unsafe.Pointer
23+ MOVV R7, (3*8)(R3) // ctxt uintptr
2424
2525 SAVE_R22_TO_R31((4*8))
2626 SAVE_F24_TO_F31((14*8))
27- MOVV R1, (22*8)(R3)
27+ MOVV R1, (22*8)(R3)
2828
2929 // Initialize Go ABI environment
30- JAL runtime·load_g(SB)
30+ JAL runtime·load_g(SB)
3131
32- JAL runtime·cgocallback(SB)
32+ JAL runtime·cgocallback(SB)
3333
3434 RESTORE_R22_TO_R31((4*8))
3535 RESTORE_F24_TO_F31((14*8))
36- MOVV (22*8)(R3), R1
36+ MOVV (22*8)(R3), R1
3737
38- ADDV $(23*8), R3
38+ ADDV $(23*8), R3
3939
4040 RET
@@ -9,32 +9,32 @@
9 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)9 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
10 // Saves C callee-saved registers and calls cgocallback with three arguments.10 // Saves C callee-saved registers and calls cgocallback with three arguments.
11 // fn is the PC of a func(a unsafe.Pointer) function.11 // fn is the PC of a func(a unsafe.Pointer) function.
12-TEXT crosscall2(SB),NOSPLIT|NOFRAME,$012+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0
13- /*13+/*
14- * We still need to save all callee save register as before, and then14+ * We still need to save all callee save register as before, and then
15- * push 3 args for fn (R4, R5, R7), skipping R6.15+ * push 3 args for fn (R4, R5, R7), skipping R6.
16- * Also note that at procedure entry in gc world, 8(R29) will be the16+ * Also note that at procedure entry in gc world, 8(R29) will be the
17- * first arg.17+ * first arg.
18- */18+ */
19-19+
20- ADDV $(-23*8), R320+ ADDV $(-23*8), R3
21- MOVV R4, (1*8)(R3) // fn unsafe.Pointer21+ MOVV R4, (1*8)(R3) // fn unsafe.Pointer
22- MOVV R5, (2*8)(R3) // a unsafe.Pointer22+ MOVV R5, (2*8)(R3) // a unsafe.Pointer
23- MOVV R7, (3*8)(R3) // ctxt uintptr23+ MOVV R7, (3*8)(R3) // ctxt uintptr
24 24
25 SAVE_R22_TO_R31((4*8))25 SAVE_R22_TO_R31((4*8))
26 SAVE_F24_TO_F31((14*8))26 SAVE_F24_TO_F31((14*8))
27- MOVV R1, (22*8)(R3)27+ MOVV R1, (22*8)(R3)
28 28
29 // Initialize Go ABI environment29 // Initialize Go ABI environment
30- JAL runtime·load_g(SB)30+ JAL runtime·load_g(SB)
31 31
32- JAL runtime·cgocallback(SB)32+ JAL runtime·cgocallback(SB)
33 33
34 RESTORE_R22_TO_R31((4*8))34 RESTORE_R22_TO_R31((4*8))
35 RESTORE_F24_TO_F31((14*8))35 RESTORE_F24_TO_F31((14*8))
36- MOVV (22*8)(R3), R136+ MOVV (22*8)(R3), R1
37 37
38- ADDV $(23*8), R338+ ADDV $(23*8), R3
39 39
40 RET40 RET
M internal/fakecgo/asm_riscv64.s +63 -63
@@ -8,71 +8,71 @@
88 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
99 // Saves C callee-saved registers and calls cgocallback with three arguments.
1010 // fn is the PC of a func(a unsafe.Pointer) function.
11-TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0
12- /*
13- * Push arguments for fn (X10, X11, X13), along with all callee-save
14- * registers. Note that at procedure entry the first argument is at
15- * 8(X2).
16- */
17- ADD $(-8*29), X2
18- MOV X10, (8*1)(X2) // fn unsafe.Pointer
19- MOV X11, (8*2)(X2) // a unsafe.Pointer
20- MOV X13, (8*3)(X2) // ctxt uintptr
21- MOV X8, (8*4)(X2)
22- MOV X9, (8*5)(X2)
23- MOV X18, (8*6)(X2)
24- MOV X19, (8*7)(X2)
25- MOV X20, (8*8)(X2)
26- MOV X21, (8*9)(X2)
27- MOV X22, (8*10)(X2)
28- MOV X23, (8*11)(X2)
29- MOV X24, (8*12)(X2)
30- MOV X25, (8*13)(X2)
31- MOV X26, (8*14)(X2)
32- MOV g, (8*15)(X2)
33- MOV X1, (8*16)(X2)
34- MOVD F8, (8*17)(X2)
35- MOVD F9, (8*18)(X2)
36- MOVD F18, (8*19)(X2)
37- MOVD F19, (8*20)(X2)
38- MOVD F20, (8*21)(X2)
39- MOVD F21, (8*22)(X2)
40- MOVD F22, (8*23)(X2)
41- MOVD F23, (8*24)(X2)
42- MOVD F24, (8*25)(X2)
43- MOVD F25, (8*26)(X2)
44- MOVD F26, (8*27)(X2)
45- MOVD F27, (8*28)(X2)
11+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0
12+/*
13+ * Push arguments for fn (X10, X11, X13), along with all callee-save
14+ * registers. Note that at procedure entry the first argument is at
15+ * 8(X2).
16+ */
17+ ADD $(-8*29), X2
18+ MOV X10, (8*1)(X2) // fn unsafe.Pointer
19+ MOV X11, (8*2)(X2) // a unsafe.Pointer
20+ MOV X13, (8*3)(X2) // ctxt uintptr
21+ MOV X8, (8*4)(X2)
22+ MOV X9, (8*5)(X2)
23+ MOV X18, (8*6)(X2)
24+ MOV X19, (8*7)(X2)
25+ MOV X20, (8*8)(X2)
26+ MOV X21, (8*9)(X2)
27+ MOV X22, (8*10)(X2)
28+ MOV X23, (8*11)(X2)
29+ MOV X24, (8*12)(X2)
30+ MOV X25, (8*13)(X2)
31+ MOV X26, (8*14)(X2)
32+ MOV g, (8*15)(X2)
33+ MOV X1, (8*16)(X2)
34+ MOVD F8, (8*17)(X2)
35+ MOVD F9, (8*18)(X2)
36+ MOVD F18, (8*19)(X2)
37+ MOVD F19, (8*20)(X2)
38+ MOVD F20, (8*21)(X2)
39+ MOVD F21, (8*22)(X2)
40+ MOVD F22, (8*23)(X2)
41+ MOVD F23, (8*24)(X2)
42+ MOVD F24, (8*25)(X2)
43+ MOVD F25, (8*26)(X2)
44+ MOVD F26, (8*27)(X2)
45+ MOVD F27, (8*28)(X2)
4646
4747 // Initialize Go ABI environment
48- CALL runtime·load_g(SB)
49- CALL runtime·cgocallback(SB)
48+ CALL runtime·load_g(SB)
49+ CALL runtime·cgocallback(SB)
5050
51- MOV (8*4)(X2), X8
52- MOV (8*5)(X2), X9
53- MOV (8*6)(X2), X18
54- MOV (8*7)(X2), X19
55- MOV (8*8)(X2), X20
56- MOV (8*9)(X2), X21
57- MOV (8*10)(X2), X22
58- MOV (8*11)(X2), X23
59- MOV (8*12)(X2), X24
60- MOV (8*13)(X2), X25
61- MOV (8*14)(X2), X26
62- MOV (8*15)(X2), g
63- MOV (8*16)(X2), X1
64- MOVD (8*17)(X2), F8
65- MOVD (8*18)(X2), F9
66- MOVD (8*19)(X2), F18
67- MOVD (8*20)(X2), F19
68- MOVD (8*21)(X2), F20
69- MOVD (8*22)(X2), F21
70- MOVD (8*23)(X2), F22
71- MOVD (8*24)(X2), F23
72- MOVD (8*25)(X2), F24
73- MOVD (8*26)(X2), F25
74- MOVD (8*27)(X2), F26
75- MOVD (8*28)(X2), F27
76- ADD $(8*29), X2
51+ MOV (8*4)(X2), X8
52+ MOV (8*5)(X2), X9
53+ MOV (8*6)(X2), X18
54+ MOV (8*7)(X2), X19
55+ MOV (8*8)(X2), X20
56+ MOV (8*9)(X2), X21
57+ MOV (8*10)(X2), X22
58+ MOV (8*11)(X2), X23
59+ MOV (8*12)(X2), X24
60+ MOV (8*13)(X2), X25
61+ MOV (8*14)(X2), X26
62+ MOV (8*15)(X2), g
63+ MOV (8*16)(X2), X1
64+ MOVD (8*17)(X2), F8
65+ MOVD (8*18)(X2), F9
66+ MOVD (8*19)(X2), F18
67+ MOVD (8*20)(X2), F19
68+ MOVD (8*21)(X2), F20
69+ MOVD (8*22)(X2), F21
70+ MOVD (8*23)(X2), F22
71+ MOVD (8*24)(X2), F23
72+ MOVD (8*25)(X2), F24
73+ MOVD (8*26)(X2), F25
74+ MOVD (8*27)(X2), F26
75+ MOVD (8*28)(X2), F27
76+ ADD $(8*29), X2
7777
7878 RET
@@ -8,71 +8,71 @@
8 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)8 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
9 // Saves C callee-saved registers and calls cgocallback with three arguments.9 // Saves C callee-saved registers and calls cgocallback with three arguments.
10 // fn is the PC of a func(a unsafe.Pointer) function.10 // fn is the PC of a func(a unsafe.Pointer) function.
11-TEXT crosscall2(SB),NOSPLIT|NOFRAME,$011+TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0
12- /*12+/*
13- * Push arguments for fn (X10, X11, X13), along with all callee-save13+ * Push arguments for fn (X10, X11, X13), along with all callee-save
14- * registers. Note that at procedure entry the first argument is at14+ * registers. Note that at procedure entry the first argument is at
15- * 8(X2).15+ * 8(X2).
16- */16+ */
17- ADD $(-8*29), X217+ ADD $(-8*29), X2
18- MOV X10, (8*1)(X2) // fn unsafe.Pointer18+ MOV X10, (8*1)(X2) // fn unsafe.Pointer
19- MOV X11, (8*2)(X2) // a unsafe.Pointer19+ MOV X11, (8*2)(X2) // a unsafe.Pointer
20- MOV X13, (8*3)(X2) // ctxt uintptr20+ MOV X13, (8*3)(X2) // ctxt uintptr
21- MOV X8, (8*4)(X2)21+ MOV X8, (8*4)(X2)
22- MOV X9, (8*5)(X2)22+ MOV X9, (8*5)(X2)
23- MOV X18, (8*6)(X2)23+ MOV X18, (8*6)(X2)
24- MOV X19, (8*7)(X2)24+ MOV X19, (8*7)(X2)
25- MOV X20, (8*8)(X2)25+ MOV X20, (8*8)(X2)
26- MOV X21, (8*9)(X2)26+ MOV X21, (8*9)(X2)
27- MOV X22, (8*10)(X2)27+ MOV X22, (8*10)(X2)
28- MOV X23, (8*11)(X2)28+ MOV X23, (8*11)(X2)
29- MOV X24, (8*12)(X2)29+ MOV X24, (8*12)(X2)
30- MOV X25, (8*13)(X2)30+ MOV X25, (8*13)(X2)
31- MOV X26, (8*14)(X2)31+ MOV X26, (8*14)(X2)
32- MOV g, (8*15)(X2)32+ MOV g, (8*15)(X2)
33- MOV X1, (8*16)(X2)33+ MOV X1, (8*16)(X2)
34- MOVD F8, (8*17)(X2)34+ MOVD F8, (8*17)(X2)
35- MOVD F9, (8*18)(X2)35+ MOVD F9, (8*18)(X2)
36- MOVD F18, (8*19)(X2)36+ MOVD F18, (8*19)(X2)
37- MOVD F19, (8*20)(X2)37+ MOVD F19, (8*20)(X2)
38- MOVD F20, (8*21)(X2)38+ MOVD F20, (8*21)(X2)
39- MOVD F21, (8*22)(X2)39+ MOVD F21, (8*22)(X2)
40- MOVD F22, (8*23)(X2)40+ MOVD F22, (8*23)(X2)
41- MOVD F23, (8*24)(X2)41+ MOVD F23, (8*24)(X2)
42- MOVD F24, (8*25)(X2)42+ MOVD F24, (8*25)(X2)
43- MOVD F25, (8*26)(X2)43+ MOVD F25, (8*26)(X2)
44- MOVD F26, (8*27)(X2)44+ MOVD F26, (8*27)(X2)
45- MOVD F27, (8*28)(X2)45+ MOVD F27, (8*28)(X2)
46 46
47 // Initialize Go ABI environment47 // Initialize Go ABI environment
48- CALL runtime·load_g(SB)48+ CALL runtime·load_g(SB)
49- CALL runtime·cgocallback(SB)49+ CALL runtime·cgocallback(SB)
50 50
51- MOV (8*4)(X2), X851+ MOV (8*4)(X2), X8
52- MOV (8*5)(X2), X952+ MOV (8*5)(X2), X9
53- MOV (8*6)(X2), X1853+ MOV (8*6)(X2), X18
54- MOV (8*7)(X2), X1954+ MOV (8*7)(X2), X19
55- MOV (8*8)(X2), X2055+ MOV (8*8)(X2), X20
56- MOV (8*9)(X2), X2156+ MOV (8*9)(X2), X21
57- MOV (8*10)(X2), X2257+ MOV (8*10)(X2), X22
58- MOV (8*11)(X2), X2358+ MOV (8*11)(X2), X23
59- MOV (8*12)(X2), X2459+ MOV (8*12)(X2), X24
60- MOV (8*13)(X2), X2560+ MOV (8*13)(X2), X25
61- MOV (8*14)(X2), X2661+ MOV (8*14)(X2), X26
62- MOV (8*15)(X2), g62+ MOV (8*15)(X2), g
63- MOV (8*16)(X2), X163+ MOV (8*16)(X2), X1
64- MOVD (8*17)(X2), F864+ MOVD (8*17)(X2), F8
65- MOVD (8*18)(X2), F965+ MOVD (8*18)(X2), F9
66- MOVD (8*19)(X2), F1866+ MOVD (8*19)(X2), F18
67- MOVD (8*20)(X2), F1967+ MOVD (8*20)(X2), F19
68- MOVD (8*21)(X2), F2068+ MOVD (8*21)(X2), F20
69- MOVD (8*22)(X2), F2169+ MOVD (8*22)(X2), F21
70- MOVD (8*23)(X2), F2270+ MOVD (8*23)(X2), F22
71- MOVD (8*24)(X2), F2371+ MOVD (8*24)(X2), F23
72- MOVD (8*25)(X2), F2472+ MOVD (8*25)(X2), F24
73- MOVD (8*26)(X2), F2573+ MOVD (8*26)(X2), F25
74- MOVD (8*27)(X2), F2674+ MOVD (8*27)(X2), F26
75- MOVD (8*28)(X2), F2775+ MOVD (8*28)(X2), F27
76- ADD $(8*29), X276+ ADD $(8*29), X2
77 77
78 RET78 RET
M internal/fakecgo/trampolines_arm64.s +1 -1
@@ -63,7 +63,7 @@ TEXT threadentry_trampoline(SB), NOSPLIT, $0-0
6363 MOVD ·threadentry_call(SB), R9
6464 MOVD (R9), R9
6565 CALL R9
66- MOVD $0, R0 // TODO: get the return value from threadentry
66+ MOVD $0, R0 // TODO: get the return value from threadentry
6767
6868 RESTORE_R19_TO_R28(8*4)
6969 RESTORE_F8_TO_F15(8*14)
@@ -63,7 +63,7 @@ TEXT threadentry_trampoline(SB), NOSPLIT, $0-0
63 MOVD ·threadentry_call(SB), R963 MOVD ·threadentry_call(SB), R9
64 MOVD (R9), R964 MOVD (R9), R9
65 CALL R965 CALL R9
66- MOVD $0, R0 // TODO: get the return value from threadentry66+ MOVD $0, R0 // TODO: get the return value from threadentry
67 67
68 RESTORE_R19_TO_R28(8*4)68 RESTORE_R19_TO_R28(8*4)
69 RESTORE_F8_TO_F15(8*14)69 RESTORE_F8_TO_F15(8*14)
M internal/fakecgo/trampolines_riscv64.s +34 -34
@@ -10,63 +10,63 @@
1010 // X5 is used as temporary register.
1111
1212 TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16
13- MOV X10, 8(SP)
14- MOV X11, 16(SP)
15- MOV ·x_cgo_init_call(SB), X5
16- MOV (X5), X5
17- JALR RA, 0(X5)
13+ MOV X10, 8(SP)
14+ MOV X11, 16(SP)
15+ MOV ·x_cgo_init_call(SB), X5
16+ MOV (X5), X5
17+ CALL X5
1818 RET
1919
2020 TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8
21- MOV X10, 8(SP)
22- MOV ·x_cgo_thread_start_call(SB), X5
23- MOV (X5), X5
24- JALR RA, 0(X5)
21+ MOV X10, 8(SP)
22+ MOV ·x_cgo_thread_start_call(SB), X5
23+ MOV (X5), X5
24+ CALL X5
2525 RET
2626
2727 TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8
28- MOV X10, 8(SP)
29- MOV ·x_cgo_setenv_call(SB), X5
30- MOV (X5), X5
31- JALR RA, 0(X5)
28+ MOV X10, 8(SP)
29+ MOV ·x_cgo_setenv_call(SB), X5
30+ MOV (X5), X5
31+ CALL X5
3232 RET
3333
3434 TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8
35- MOV X10, 8(SP)
36- MOV ·x_cgo_unsetenv_call(SB), X5
37- MOV (X5), X5
38- JALR RA, 0(X5)
35+ MOV X10, 8(SP)
36+ MOV ·x_cgo_unsetenv_call(SB), X5
37+ MOV (X5), X5
38+ CALL X5
3939 RET
4040
4141 TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0
42- CALL ·x_cgo_notify_runtime_init_done(SB)
42+ CALL ·x_cgo_notify_runtime_init_done(SB)
4343 RET
4444
4545 TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0
46- CALL ·x_cgo_bindm(SB)
46+ CALL ·x_cgo_bindm(SB)
4747 RET
4848
4949 // func setg_trampoline(setg uintptr, g uintptr)
5050 TEXT ·setg_trampoline(SB), NOSPLIT, $0
51- MOV gp+8(FP), X10
52- MOV setg+0(FP), X5
53- JALR RA, 0(X5)
51+ MOV gp+8(FP), X10
52+ MOV setg+0(FP), X5
53+ CALL X5
5454 RET
5555
5656 TEXT threadentry_trampoline(SB), NOSPLIT, $16
57- MOV X10, 8(SP)
58- MOV ·threadentry_call(SB), X5
59- MOV (X5), X5
60- JALR RA, 0(X5)
57+ MOV X10, 8(SP)
58+ MOV ·threadentry_call(SB), X5
59+ MOV (X5), X5
60+ CALL X5
6161 RET
6262
6363 TEXT ·call5(SB), NOSPLIT, $0-48
64- MOV fn+0(FP), X5
65- MOV a1+8(FP), X10
66- MOV a2+16(FP), X11
67- MOV a3+24(FP), X12
68- MOV a4+32(FP), X13
69- MOV a5+40(FP), X14
70- JALR RA, 0(X5)
71- MOV X10, ret+48(FP)
64+ MOV fn+0(FP), X5
65+ MOV a1+8(FP), X10
66+ MOV a2+16(FP), X11
67+ MOV a3+24(FP), X12
68+ MOV a4+32(FP), X13
69+ MOV a5+40(FP), X14
70+ CALL X5
71+ MOV X10, ret+48(FP)
7272 RET
@@ -10,63 +10,63 @@
10 // X5 is used as temporary register.10 // X5 is used as temporary register.
11 11
12 TEXT x_cgo_init_trampoline(SB), NOSPLIT, $1612 TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16
13- MOV X10, 8(SP)13+ MOV X10, 8(SP)
14- MOV X11, 16(SP)14+ MOV X11, 16(SP)
15- MOV ·x_cgo_init_call(SB), X515+ MOV ·x_cgo_init_call(SB), X5
16- MOV (X5), X516+ MOV (X5), X5
17- JALR RA, 0(X5)17+ CALL X5
18 RET18 RET
19 19
20 TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $820 TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8
21- MOV X10, 8(SP)21+ MOV X10, 8(SP)
22- MOV ·x_cgo_thread_start_call(SB), X522+ MOV ·x_cgo_thread_start_call(SB), X5
23- MOV (X5), X523+ MOV (X5), X5
24- JALR RA, 0(X5)24+ CALL X5
25 RET25 RET
26 26
27 TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $827 TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8
28- MOV X10, 8(SP)28+ MOV X10, 8(SP)
29- MOV ·x_cgo_setenv_call(SB), X529+ MOV ·x_cgo_setenv_call(SB), X5
30- MOV (X5), X530+ MOV (X5), X5
31- JALR RA, 0(X5)31+ CALL X5
32 RET32 RET
33 33
34 TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $834 TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8
35- MOV X10, 8(SP)35+ MOV X10, 8(SP)
36- MOV ·x_cgo_unsetenv_call(SB), X536+ MOV ·x_cgo_unsetenv_call(SB), X5
37- MOV (X5), X537+ MOV (X5), X5
38- JALR RA, 0(X5)38+ CALL X5
39 RET39 RET
40 40
41 TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $041 TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0
42- CALL ·x_cgo_notify_runtime_init_done(SB)42+ CALL ·x_cgo_notify_runtime_init_done(SB)
43 RET43 RET
44 44
45 TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $045 TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0
46- CALL ·x_cgo_bindm(SB)46+ CALL ·x_cgo_bindm(SB)
47 RET47 RET
48 48
49 // func setg_trampoline(setg uintptr, g uintptr)49 // func setg_trampoline(setg uintptr, g uintptr)
50 TEXT ·setg_trampoline(SB), NOSPLIT, $050 TEXT ·setg_trampoline(SB), NOSPLIT, $0
51- MOV gp+8(FP), X1051+ MOV gp+8(FP), X10
52- MOV setg+0(FP), X552+ MOV setg+0(FP), X5
53- JALR RA, 0(X5)53+ CALL X5
54 RET54 RET
55 55
56 TEXT threadentry_trampoline(SB), NOSPLIT, $1656 TEXT threadentry_trampoline(SB), NOSPLIT, $16
57- MOV X10, 8(SP)57+ MOV X10, 8(SP)
58- MOV ·threadentry_call(SB), X558+ MOV ·threadentry_call(SB), X5
59- MOV (X5), X559+ MOV (X5), X5
60- JALR RA, 0(X5)60+ CALL X5
61 RET61 RET
62 62
63 TEXT ·call5(SB), NOSPLIT, $0-4863 TEXT ·call5(SB), NOSPLIT, $0-48
64- MOV fn+0(FP), X564+ MOV fn+0(FP), X5
65- MOV a1+8(FP), X1065+ MOV a1+8(FP), X10
66- MOV a2+16(FP), X1166+ MOV a2+16(FP), X11
67- MOV a3+24(FP), X1267+ MOV a3+24(FP), X12
68- MOV a4+32(FP), X1368+ MOV a4+32(FP), X13
69- MOV a5+40(FP), X1469+ MOV a5+40(FP), X14
70- JALR RA, 0(X5)70+ CALL X5
71- MOV X10, ret+48(FP)71+ MOV X10, ret+48(FP)
72 RET72 RET
M sys_loong64.s +43 -43
@@ -39,58 +39,58 @@ GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8
3939 DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)
4040 TEXT syscall15X(SB), NOSPLIT, $0
4141 // push structure pointer
42- SUBV $STACK_SIZE, R3
43- MOVV R4, PTR_ADDRESS(R3)
44- MOVV R4, R13
42+ SUBV $STACK_SIZE, R3
43+ MOVV R4, PTR_ADDRESS(R3)
44+ MOVV R4, R13
4545
46- MOVD syscall15Args_f1(R13), F0 // f1
47- MOVD syscall15Args_f2(R13), F1 // f2
48- MOVD syscall15Args_f3(R13), F2 // f3
49- MOVD syscall15Args_f4(R13), F3 // f4
50- MOVD syscall15Args_f5(R13), F4 // f5
51- MOVD syscall15Args_f6(R13), F5 // f6
52- MOVD syscall15Args_f7(R13), F6 // f7
53- MOVD syscall15Args_f8(R13), F7 // f8
46+ MOVD syscall15Args_f1(R13), F0 // f1
47+ MOVD syscall15Args_f2(R13), F1 // f2
48+ MOVD syscall15Args_f3(R13), F2 // f3
49+ MOVD syscall15Args_f4(R13), F3 // f4
50+ MOVD syscall15Args_f5(R13), F4 // f5
51+ MOVD syscall15Args_f6(R13), F5 // f6
52+ MOVD syscall15Args_f7(R13), F6 // f7
53+ MOVD syscall15Args_f8(R13), F7 // f8
5454
55- MOVV syscall15Args_a1(R13), R4 // a1
56- MOVV syscall15Args_a2(R13), R5 // a2
57- MOVV syscall15Args_a3(R13), R6 // a3
58- MOVV syscall15Args_a4(R13), R7 // a4
59- MOVV syscall15Args_a5(R13), R8 // a5
60- MOVV syscall15Args_a6(R13), R9 // a6
61- MOVV syscall15Args_a7(R13), R10 // a7
62- MOVV syscall15Args_a8(R13), R11 // a8
55+ MOVV syscall15Args_a1(R13), R4 // a1
56+ MOVV syscall15Args_a2(R13), R5 // a2
57+ MOVV syscall15Args_a3(R13), R6 // a3
58+ MOVV syscall15Args_a4(R13), R7 // a4
59+ MOVV syscall15Args_a5(R13), R8 // a5
60+ MOVV syscall15Args_a6(R13), R9 // a6
61+ MOVV syscall15Args_a7(R13), R10 // a7
62+ MOVV syscall15Args_a8(R13), R11 // a8
6363
6464 // push a9-a15 onto stack
65- MOVV syscall15Args_a9(R13), R12
66- MOVV R12, 0(R3)
67- MOVV syscall15Args_a10(R13), R12
68- MOVV R12, 8(R3)
69- MOVV syscall15Args_a11(R13), R12
70- MOVV R12, 16(R3)
71- MOVV syscall15Args_a12(R13), R12
72- MOVV R12, 24(R3)
73- MOVV syscall15Args_a13(R13), R12
74- MOVV R12, 32(R3)
75- MOVV syscall15Args_a14(R13), R12
76- MOVV R12, 40(R3)
77- MOVV syscall15Args_a15(R13), R12
78- MOVV R12, 48(R3)
65+ MOVV syscall15Args_a9(R13), R12
66+ MOVV R12, 0(R3)
67+ MOVV syscall15Args_a10(R13), R12
68+ MOVV R12, 8(R3)
69+ MOVV syscall15Args_a11(R13), R12
70+ MOVV R12, 16(R3)
71+ MOVV syscall15Args_a12(R13), R12
72+ MOVV R12, 24(R3)
73+ MOVV syscall15Args_a13(R13), R12
74+ MOVV R12, 32(R3)
75+ MOVV syscall15Args_a14(R13), R12
76+ MOVV R12, 40(R3)
77+ MOVV syscall15Args_a15(R13), R12
78+ MOVV R12, 48(R3)
7979
80- MOVV syscall15Args_fn(R13), R12
81- JAL (R12)
80+ MOVV syscall15Args_fn(R13), R12
81+ JAL (R12)
8282
8383 // pop structure pointer
84- MOVV PTR_ADDRESS(R3), R13
85- ADDV $STACK_SIZE, R3
84+ MOVV PTR_ADDRESS(R3), R13
85+ ADDV $STACK_SIZE, R3
8686
8787 // save R4, R5
88- MOVV R4, syscall15Args_a1(R13)
89- MOVV R5, syscall15Args_a2(R13)
88+ MOVV R4, syscall15Args_a1(R13)
89+ MOVV R5, syscall15Args_a2(R13)
9090
9191 // save f0-f3
92- MOVD F0, syscall15Args_f1(R13)
93- MOVD F1, syscall15Args_f2(R13)
94- MOVD F2, syscall15Args_f3(R13)
95- MOVD F3, syscall15Args_f4(R13)
92+ MOVD F0, syscall15Args_f1(R13)
93+ MOVD F1, syscall15Args_f2(R13)
94+ MOVD F2, syscall15Args_f3(R13)
95+ MOVD F3, syscall15Args_f4(R13)
9696 RET
@@ -39,58 +39,58 @@ GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8
39 DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)39 DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)
40 TEXT syscall15X(SB), NOSPLIT, $040 TEXT syscall15X(SB), NOSPLIT, $0
41 // push structure pointer41 // push structure pointer
42- SUBV $STACK_SIZE, R342+ SUBV $STACK_SIZE, R3
43- MOVV R4, PTR_ADDRESS(R3)43+ MOVV R4, PTR_ADDRESS(R3)
44- MOVV R4, R1344+ MOVV R4, R13
45 45
46- MOVD syscall15Args_f1(R13), F0 // f146+ MOVD syscall15Args_f1(R13), F0 // f1
47- MOVD syscall15Args_f2(R13), F1 // f247+ MOVD syscall15Args_f2(R13), F1 // f2
48- MOVD syscall15Args_f3(R13), F2 // f348+ MOVD syscall15Args_f3(R13), F2 // f3
49- MOVD syscall15Args_f4(R13), F3 // f449+ MOVD syscall15Args_f4(R13), F3 // f4
50- MOVD syscall15Args_f5(R13), F4 // f550+ MOVD syscall15Args_f5(R13), F4 // f5
51- MOVD syscall15Args_f6(R13), F5 // f651+ MOVD syscall15Args_f6(R13), F5 // f6
52- MOVD syscall15Args_f7(R13), F6 // f752+ MOVD syscall15Args_f7(R13), F6 // f7
53- MOVD syscall15Args_f8(R13), F7 // f853+ MOVD syscall15Args_f8(R13), F7 // f8
54 54
55- MOVV syscall15Args_a1(R13), R4 // a155+ MOVV syscall15Args_a1(R13), R4 // a1
56- MOVV syscall15Args_a2(R13), R5 // a256+ MOVV syscall15Args_a2(R13), R5 // a2
57- MOVV syscall15Args_a3(R13), R6 // a357+ MOVV syscall15Args_a3(R13), R6 // a3
58- MOVV syscall15Args_a4(R13), R7 // a458+ MOVV syscall15Args_a4(R13), R7 // a4
59- MOVV syscall15Args_a5(R13), R8 // a559+ MOVV syscall15Args_a5(R13), R8 // a5
60- MOVV syscall15Args_a6(R13), R9 // a660+ MOVV syscall15Args_a6(R13), R9 // a6
61- MOVV syscall15Args_a7(R13), R10 // a761+ MOVV syscall15Args_a7(R13), R10 // a7
62- MOVV syscall15Args_a8(R13), R11 // a862+ MOVV syscall15Args_a8(R13), R11 // a8
63 63
64 // push a9-a15 onto stack64 // push a9-a15 onto stack
65- MOVV syscall15Args_a9(R13), R1265+ MOVV syscall15Args_a9(R13), R12
66- MOVV R12, 0(R3)66+ MOVV R12, 0(R3)
67- MOVV syscall15Args_a10(R13), R1267+ MOVV syscall15Args_a10(R13), R12
68- MOVV R12, 8(R3)68+ MOVV R12, 8(R3)
69- MOVV syscall15Args_a11(R13), R1269+ MOVV syscall15Args_a11(R13), R12
70- MOVV R12, 16(R3)70+ MOVV R12, 16(R3)
71- MOVV syscall15Args_a12(R13), R1271+ MOVV syscall15Args_a12(R13), R12
72- MOVV R12, 24(R3)72+ MOVV R12, 24(R3)
73- MOVV syscall15Args_a13(R13), R1273+ MOVV syscall15Args_a13(R13), R12
74- MOVV R12, 32(R3)74+ MOVV R12, 32(R3)
75- MOVV syscall15Args_a14(R13), R1275+ MOVV syscall15Args_a14(R13), R12
76- MOVV R12, 40(R3)76+ MOVV R12, 40(R3)
77- MOVV syscall15Args_a15(R13), R1277+ MOVV syscall15Args_a15(R13), R12
78- MOVV R12, 48(R3)78+ MOVV R12, 48(R3)
79 79
80- MOVV syscall15Args_fn(R13), R1280+ MOVV syscall15Args_fn(R13), R12
81- JAL (R12)81+ JAL (R12)
82 82
83 // pop structure pointer83 // pop structure pointer
84- MOVV PTR_ADDRESS(R3), R1384+ MOVV PTR_ADDRESS(R3), R13
85- ADDV $STACK_SIZE, R385+ ADDV $STACK_SIZE, R3
86 86
87 // save R4, R587 // save R4, R5
88- MOVV R4, syscall15Args_a1(R13)88+ MOVV R4, syscall15Args_a1(R13)
89- MOVV R5, syscall15Args_a2(R13)89+ MOVV R5, syscall15Args_a2(R13)
90 90
91 // save f0-f391 // save f0-f3
92- MOVD F0, syscall15Args_f1(R13)92+ MOVD F0, syscall15Args_f1(R13)
93- MOVD F1, syscall15Args_f2(R13)93+ MOVD F1, syscall15Args_f2(R13)
94- MOVD F2, syscall15Args_f3(R13)94+ MOVD F2, syscall15Args_f3(R13)
95- MOVD F3, syscall15Args_f4(R13)95+ MOVD F3, syscall15Args_f4(R13)
96 RET96 RET
M sys_riscv64.s +49 -49
@@ -25,77 +25,77 @@ DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)
2525
2626 TEXT syscall15X(SB), NOSPLIT, $0
2727 // Allocate stack frame (keeps 16-byte alignment)
28- SUB $STACK_SIZE, SP
28+ SUB $STACK_SIZE, SP
2929
3030 // Save callee-saved regs we clobber + return address
31- MOV X1, SAVE_RA(SP)
32- MOV X9, SAVE_X9(SP)
33- MOV X18, SAVE_X18(SP)
31+ MOV X1, SAVE_RA(SP)
32+ MOV X9, SAVE_X9(SP)
33+ MOV X18, SAVE_X18(SP)
3434
3535 // Save original args pointer (in a0/X10)
36- MOV X10, SAVE_ARGP(SP)
36+ MOV X10, SAVE_ARGP(SP)
3737
3838 // X9 := args pointer (syscall15Args*)
39- MOV X10, X9
39+ MOV X10, X9
4040
4141 // Load float args into fa0-fa7 (F10-F17)
42- MOVD syscall15Args_f1(X9), F10
43- MOVD syscall15Args_f2(X9), F11
44- MOVD syscall15Args_f3(X9), F12
45- MOVD syscall15Args_f4(X9), F13
46- MOVD syscall15Args_f5(X9), F14
47- MOVD syscall15Args_f6(X9), F15
48- MOVD syscall15Args_f7(X9), F16
49- MOVD syscall15Args_f8(X9), F17
42+ MOVD syscall15Args_f1(X9), F10
43+ MOVD syscall15Args_f2(X9), F11
44+ MOVD syscall15Args_f3(X9), F12
45+ MOVD syscall15Args_f4(X9), F13
46+ MOVD syscall15Args_f5(X9), F14
47+ MOVD syscall15Args_f6(X9), F15
48+ MOVD syscall15Args_f7(X9), F16
49+ MOVD syscall15Args_f8(X9), F17
5050
5151 // Load integer args into a0-a7 (X10-X17)
52- MOV syscall15Args_a1(X9), X10
53- MOV syscall15Args_a2(X9), X11
54- MOV syscall15Args_a3(X9), X12
55- MOV syscall15Args_a4(X9), X13
56- MOV syscall15Args_a5(X9), X14
57- MOV syscall15Args_a6(X9), X15
58- MOV syscall15Args_a7(X9), X16
59- MOV syscall15Args_a8(X9), X17
52+ MOV syscall15Args_a1(X9), X10
53+ MOV syscall15Args_a2(X9), X11
54+ MOV syscall15Args_a3(X9), X12
55+ MOV syscall15Args_a4(X9), X13
56+ MOV syscall15Args_a5(X9), X14
57+ MOV syscall15Args_a6(X9), X15
58+ MOV syscall15Args_a7(X9), X16
59+ MOV syscall15Args_a8(X9), X17
6060
6161 // Spill a9-a15 onto the stack (C ABI)
62- MOV syscall15Args_a9(X9), X18
63- MOV X18, 0(SP)
64- MOV syscall15Args_a10(X9), X18
65- MOV X18, 8(SP)
66- MOV syscall15Args_a11(X9), X18
67- MOV X18, 16(SP)
68- MOV syscall15Args_a12(X9), X18
69- MOV X18, 24(SP)
70- MOV syscall15Args_a13(X9), X18
71- MOV X18, 32(SP)
72- MOV syscall15Args_a14(X9), X18
73- MOV X18, 40(SP)
74- MOV syscall15Args_a15(X9), X18
75- MOV X18, 48(SP)
62+ MOV syscall15Args_a9(X9), X18
63+ MOV X18, 0(SP)
64+ MOV syscall15Args_a10(X9), X18
65+ MOV X18, 8(SP)
66+ MOV syscall15Args_a11(X9), X18
67+ MOV X18, 16(SP)
68+ MOV syscall15Args_a12(X9), X18
69+ MOV X18, 24(SP)
70+ MOV syscall15Args_a13(X9), X18
71+ MOV X18, 32(SP)
72+ MOV syscall15Args_a14(X9), X18
73+ MOV X18, 40(SP)
74+ MOV syscall15Args_a15(X9), X18
75+ MOV X18, 48(SP)
7676
7777 // Call fn
7878 // IMPORTANT: preserve RA across this call (we saved it above)
79- MOV syscall15Args_fn(X9), X18
80- JALR RA, X18
79+ MOV syscall15Args_fn(X9), X18
80+ CALL X18
8181
8282 // Restore args pointer (syscall15Args*) for storing results
83- MOV SAVE_ARGP(SP), X9
83+ MOV SAVE_ARGP(SP), X9
8484
8585 // Store results back
86- MOV X10, syscall15Args_a1(X9)
87- MOV X11, syscall15Args_a2(X9)
86+ MOV X10, syscall15Args_a1(X9)
87+ MOV X11, syscall15Args_a2(X9)
8888
8989 // Store back float return regs if used by your ABI contract
90- MOVD F10, syscall15Args_f1(X9)
91- MOVD F11, syscall15Args_f2(X9)
92- MOVD F12, syscall15Args_f3(X9)
93- MOVD F13, syscall15Args_f4(X9)
90+ MOVD F10, syscall15Args_f1(X9)
91+ MOVD F11, syscall15Args_f2(X9)
92+ MOVD F12, syscall15Args_f3(X9)
93+ MOVD F13, syscall15Args_f4(X9)
9494
9595 // Restore callee-saved regs and return address
96- MOV SAVE_X18(SP), X18
97- MOV SAVE_X9(SP), X9
98- MOV SAVE_RA(SP), X1
96+ MOV SAVE_X18(SP), X18
97+ MOV SAVE_X9(SP), X9
98+ MOV SAVE_RA(SP), X1
9999
100- ADD $STACK_SIZE, SP
100+ ADD $STACK_SIZE, SP
101101 RET
@@ -25,77 +25,77 @@ DATA ·syscall15XABI0(SB)/8, $syscall15X(SB)
25 25
26 TEXT syscall15X(SB), NOSPLIT, $026 TEXT syscall15X(SB), NOSPLIT, $0
27 // Allocate stack frame (keeps 16-byte alignment)27 // Allocate stack frame (keeps 16-byte alignment)
28- SUB $STACK_SIZE, SP28+ SUB $STACK_SIZE, SP
29 29
30 // Save callee-saved regs we clobber + return address30 // Save callee-saved regs we clobber + return address
31- MOV X1, SAVE_RA(SP)31+ MOV X1, SAVE_RA(SP)
32- MOV X9, SAVE_X9(SP)32+ MOV X9, SAVE_X9(SP)
33- MOV X18, SAVE_X18(SP)33+ MOV X18, SAVE_X18(SP)
34 34
35 // Save original args pointer (in a0/X10)35 // Save original args pointer (in a0/X10)
36- MOV X10, SAVE_ARGP(SP)36+ MOV X10, SAVE_ARGP(SP)
37 37
38 // X9 := args pointer (syscall15Args*)38 // X9 := args pointer (syscall15Args*)
39- MOV X10, X939+ MOV X10, X9
40 40
41 // Load float args into fa0-fa7 (F10-F17)41 // Load float args into fa0-fa7 (F10-F17)
42- MOVD syscall15Args_f1(X9), F1042+ MOVD syscall15Args_f1(X9), F10
43- MOVD syscall15Args_f2(X9), F1143+ MOVD syscall15Args_f2(X9), F11
44- MOVD syscall15Args_f3(X9), F1244+ MOVD syscall15Args_f3(X9), F12
45- MOVD syscall15Args_f4(X9), F1345+ MOVD syscall15Args_f4(X9), F13
46- MOVD syscall15Args_f5(X9), F1446+ MOVD syscall15Args_f5(X9), F14
47- MOVD syscall15Args_f6(X9), F1547+ MOVD syscall15Args_f6(X9), F15
48- MOVD syscall15Args_f7(X9), F1648+ MOVD syscall15Args_f7(X9), F16
49- MOVD syscall15Args_f8(X9), F1749+ MOVD syscall15Args_f8(X9), F17
50 50
51 // Load integer args into a0-a7 (X10-X17)51 // Load integer args into a0-a7 (X10-X17)
52- MOV syscall15Args_a1(X9), X1052+ MOV syscall15Args_a1(X9), X10
53- MOV syscall15Args_a2(X9), X1153+ MOV syscall15Args_a2(X9), X11
54- MOV syscall15Args_a3(X9), X1254+ MOV syscall15Args_a3(X9), X12
55- MOV syscall15Args_a4(X9), X1355+ MOV syscall15Args_a4(X9), X13
56- MOV syscall15Args_a5(X9), X1456+ MOV syscall15Args_a5(X9), X14
57- MOV syscall15Args_a6(X9), X1557+ MOV syscall15Args_a6(X9), X15
58- MOV syscall15Args_a7(X9), X1658+ MOV syscall15Args_a7(X9), X16
59- MOV syscall15Args_a8(X9), X1759+ MOV syscall15Args_a8(X9), X17
60 60
61 // Spill a9-a15 onto the stack (C ABI)61 // Spill a9-a15 onto the stack (C ABI)
62- MOV syscall15Args_a9(X9), X1862+ MOV syscall15Args_a9(X9), X18
63- MOV X18, 0(SP)63+ MOV X18, 0(SP)
64- MOV syscall15Args_a10(X9), X1864+ MOV syscall15Args_a10(X9), X18
65- MOV X18, 8(SP)65+ MOV X18, 8(SP)
66- MOV syscall15Args_a11(X9), X1866+ MOV syscall15Args_a11(X9), X18
67- MOV X18, 16(SP)67+ MOV X18, 16(SP)
68- MOV syscall15Args_a12(X9), X1868+ MOV syscall15Args_a12(X9), X18
69- MOV X18, 24(SP)69+ MOV X18, 24(SP)
70- MOV syscall15Args_a13(X9), X1870+ MOV syscall15Args_a13(X9), X18
71- MOV X18, 32(SP)71+ MOV X18, 32(SP)
72- MOV syscall15Args_a14(X9), X1872+ MOV syscall15Args_a14(X9), X18
73- MOV X18, 40(SP)73+ MOV X18, 40(SP)
74- MOV syscall15Args_a15(X9), X1874+ MOV syscall15Args_a15(X9), X18
75- MOV X18, 48(SP)75+ MOV X18, 48(SP)
76 76
77 // Call fn77 // Call fn
78 // IMPORTANT: preserve RA across this call (we saved it above)78 // IMPORTANT: preserve RA across this call (we saved it above)
79- MOV syscall15Args_fn(X9), X1879+ MOV syscall15Args_fn(X9), X18
80- JALR RA, X1880+ CALL X18
81 81
82 // Restore args pointer (syscall15Args*) for storing results82 // Restore args pointer (syscall15Args*) for storing results
83- MOV SAVE_ARGP(SP), X983+ MOV SAVE_ARGP(SP), X9
84 84
85 // Store results back85 // Store results back
86- MOV X10, syscall15Args_a1(X9)86+ MOV X10, syscall15Args_a1(X9)
87- MOV X11, syscall15Args_a2(X9)87+ MOV X11, syscall15Args_a2(X9)
88 88
89 // Store back float return regs if used by your ABI contract89 // Store back float return regs if used by your ABI contract
90- MOVD F10, syscall15Args_f1(X9)90+ MOVD F10, syscall15Args_f1(X9)
91- MOVD F11, syscall15Args_f2(X9)91+ MOVD F11, syscall15Args_f2(X9)
92- MOVD F12, syscall15Args_f3(X9)92+ MOVD F12, syscall15Args_f3(X9)
93- MOVD F13, syscall15Args_f4(X9)93+ MOVD F13, syscall15Args_f4(X9)
94 94
95 // Restore callee-saved regs and return address95 // Restore callee-saved regs and return address
96- MOV SAVE_X18(SP), X1896+ MOV SAVE_X18(SP), X18
97- MOV SAVE_X9(SP), X997+ MOV SAVE_X9(SP), X9
98- MOV SAVE_RA(SP), X198+ MOV SAVE_RA(SP), X1
99 99
100- ADD $STACK_SIZE, SP100+ ADD $STACK_SIZE, SP
101 RET101 RET
M sys_unix_loong64.s +34 -34
@@ -11,26 +11,26 @@
1111 TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0
1212 NO_LOCAL_POINTERS
1313
14- SUBV $(16*8), R3, R14
15- MOVD F0, 0(R14)
16- MOVD F1, 8(R14)
17- MOVD F2, 16(R14)
18- MOVD F3, 24(R14)
19- MOVD F4, 32(R14)
20- MOVD F5, 40(R14)
21- MOVD F6, 48(R14)
22- MOVD F7, 56(R14)
23- MOVV R4, 64(R14)
24- MOVV R5, 72(R14)
25- MOVV R6, 80(R14)
26- MOVV R7, 88(R14)
27- MOVV R8, 96(R14)
28- MOVV R9, 104(R14)
29- MOVV R10, 112(R14)
30- MOVV R11, 120(R14)
14+ SUBV $(16*8), R3, R14
15+ MOVD F0, 0(R14)
16+ MOVD F1, 8(R14)
17+ MOVD F2, 16(R14)
18+ MOVD F3, 24(R14)
19+ MOVD F4, 32(R14)
20+ MOVD F5, 40(R14)
21+ MOVD F6, 48(R14)
22+ MOVD F7, 56(R14)
23+ MOVV R4, 64(R14)
24+ MOVV R5, 72(R14)
25+ MOVV R6, 80(R14)
26+ MOVV R7, 88(R14)
27+ MOVV R8, 96(R14)
28+ MOVV R9, 104(R14)
29+ MOVV R10, 112(R14)
30+ MOVV R11, 120(R14)
3131
3232 // Adjust SP by frame size.
33- SUBV $(22*8), R3
33+ SUBV $(22*8), R3
3434
3535 // It is important to save R30 because the go assembler
3636 // uses it for move instructions for a variable.
@@ -44,32 +44,32 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0
4444 // restore it at the end of this function.
4545 // R1 is the link register. crosscall2 doesn't save it
4646 // so it's saved here.
47- MOVV R1, 0(R3)
48- MOVV R30, 8(R3)
47+ MOVV R1, 0(R3)
48+ MOVV R30, 8(R3)
4949
5050 // Create a struct callbackArgs on our stack.
51- MOVV $(callbackArgs__size)(R3), R13
52- MOVV R12, callbackArgs_index(R13) // callback index
53- MOVV R14, callbackArgs_args(R13) // address of args vector
54- MOVV $0, callbackArgs_result(R13) // result
51+ MOVV $(callbackArgs__size)(R3), R13
52+ MOVV R12, callbackArgs_index(R13) // callback index
53+ MOVV R14, callbackArgs_args(R13) // address of args vector
54+ MOVV $0, callbackArgs_result(R13) // result
5555
5656 // Move parameters into registers
5757 // Get the ABIInternal function pointer
5858 // without <ABIInternal> by using a closure.
59- MOVV ·callbackWrap_call(SB), R4
60- MOVV (R4), R4 // fn unsafe.Pointer
61- MOVV R13, R5 // frame (&callbackArgs{...})
62- MOVV $0, R7 // ctxt uintptr
59+ MOVV ·callbackWrap_call(SB), R4
60+ MOVV (R4), R4 // fn unsafe.Pointer
61+ MOVV R13, R5 // frame (&callbackArgs{...})
62+ MOVV $0, R7 // ctxt uintptr
6363
64- JAL crosscall2(SB)
64+ JAL crosscall2(SB)
6565
6666 // Get callback result.
67- MOVV $(callbackArgs__size)(R3), R13
68- MOVV callbackArgs_result(R13), R4
67+ MOVV $(callbackArgs__size)(R3), R13
68+ MOVV callbackArgs_result(R13), R4
6969
7070 // Restore LR and R30
71- MOVV 0(R3), R1
72- MOVV 8(R3), R30
73- ADDV $(22*8), R3
71+ MOVV 0(R3), R1
72+ MOVV 8(R3), R30
73+ ADDV $(22*8), R3
7474
7575 RET
@@ -11,26 +11,26 @@
11 TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $011 TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0
12 NO_LOCAL_POINTERS12 NO_LOCAL_POINTERS
13 13
14- SUBV $(16*8), R3, R1414+ SUBV $(16*8), R3, R14
15- MOVD F0, 0(R14)15+ MOVD F0, 0(R14)
16- MOVD F1, 8(R14)16+ MOVD F1, 8(R14)
17- MOVD F2, 16(R14)17+ MOVD F2, 16(R14)
18- MOVD F3, 24(R14)18+ MOVD F3, 24(R14)
19- MOVD F4, 32(R14)19+ MOVD F4, 32(R14)
20- MOVD F5, 40(R14)20+ MOVD F5, 40(R14)
21- MOVD F6, 48(R14)21+ MOVD F6, 48(R14)
22- MOVD F7, 56(R14)22+ MOVD F7, 56(R14)
23- MOVV R4, 64(R14)23+ MOVV R4, 64(R14)
24- MOVV R5, 72(R14)24+ MOVV R5, 72(R14)
25- MOVV R6, 80(R14)25+ MOVV R6, 80(R14)
26- MOVV R7, 88(R14)26+ MOVV R7, 88(R14)
27- MOVV R8, 96(R14)27+ MOVV R8, 96(R14)
28- MOVV R9, 104(R14)28+ MOVV R9, 104(R14)
29- MOVV R10, 112(R14)29+ MOVV R10, 112(R14)
30- MOVV R11, 120(R14)30+ MOVV R11, 120(R14)
31 31
32 // Adjust SP by frame size.32 // Adjust SP by frame size.
33- SUBV $(22*8), R333+ SUBV $(22*8), R3
34 34
35 // It is important to save R30 because the go assembler35 // It is important to save R30 because the go assembler
36 // uses it for move instructions for a variable.36 // uses it for move instructions for a variable.
@@ -44,32 +44,32 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0
44 // restore it at the end of this function.44 // restore it at the end of this function.
45 // R1 is the link register. crosscall2 doesn't save it45 // R1 is the link register. crosscall2 doesn't save it
46 // so it's saved here.46 // so it's saved here.
47- MOVV R1, 0(R3)47+ MOVV R1, 0(R3)
48- MOVV R30, 8(R3)48+ MOVV R30, 8(R3)
49 49
50 // Create a struct callbackArgs on our stack.50 // Create a struct callbackArgs on our stack.
51- MOVV $(callbackArgs__size)(R3), R1351+ MOVV $(callbackArgs__size)(R3), R13
52- MOVV R12, callbackArgs_index(R13) // callback index52+ MOVV R12, callbackArgs_index(R13) // callback index
53- MOVV R14, callbackArgs_args(R13) // address of args vector53+ MOVV R14, callbackArgs_args(R13) // address of args vector
54- MOVV $0, callbackArgs_result(R13) // result54+ MOVV $0, callbackArgs_result(R13) // result
55 55
56 // Move parameters into registers56 // Move parameters into registers
57 // Get the ABIInternal function pointer57 // Get the ABIInternal function pointer
58 // without <ABIInternal> by using a closure.58 // without <ABIInternal> by using a closure.
59- MOVV ·callbackWrap_call(SB), R459+ MOVV ·callbackWrap_call(SB), R4
60- MOVV (R4), R4 // fn unsafe.Pointer60+ MOVV (R4), R4 // fn unsafe.Pointer
61- MOVV R13, R5 // frame (&callbackArgs{...})61+ MOVV R13, R5 // frame (&callbackArgs{...})
62- MOVV $0, R7 // ctxt uintptr62+ MOVV $0, R7 // ctxt uintptr
63 63
64- JAL crosscall2(SB)64+ JAL crosscall2(SB)
65 65
66 // Get callback result.66 // Get callback result.
67- MOVV $(callbackArgs__size)(R3), R1367+ MOVV $(callbackArgs__size)(R3), R13
68- MOVV callbackArgs_result(R13), R468+ MOVV callbackArgs_result(R13), R4
69 69
70 // Restore LR and R3070 // Restore LR and R30
71- MOVV 0(R3), R171+ MOVV 0(R3), R1
72- MOVV 8(R3), R3072+ MOVV 8(R3), R30
73- ADDV $(22*8), R373+ ADDV $(22*8), R3
74 74
75 RET75 RET
M sys_unix_riscv64.s +36 -36
@@ -16,64 +16,64 @@ TEXT callbackasm1(SB), NOFRAME, $0
1616 // Save callback register arguments X10-X17 and F10-F17.
1717 // Stack args (if any) are at 0(SP), 8(SP), etc.
1818 // We save register args at SP-128, making them contiguous with stack args.
19- ADD $-(16*8), SP, X6
20-
19+ ADD $-(16*8), SP, X6
20+
2121 // Save float arg regs fa0-fa7 (F10-F17)
22- MOVD F10, 0(X6)
23- MOVD F11, 8(X6)
24- MOVD F12, 16(X6)
25- MOVD F13, 24(X6)
26- MOVD F14, 32(X6)
27- MOVD F15, 40(X6)
28- MOVD F16, 48(X6)
29- MOVD F17, 56(X6)
30-
22+ MOVD F10, 0(X6)
23+ MOVD F11, 8(X6)
24+ MOVD F12, 16(X6)
25+ MOVD F13, 24(X6)
26+ MOVD F14, 32(X6)
27+ MOVD F15, 40(X6)
28+ MOVD F16, 48(X6)
29+ MOVD F17, 56(X6)
30+
3131 // Save integer arg regs a0-a7 (X10-X17)
32- MOV X10, 64(X6)
33- MOV X11, 72(X6)
34- MOV X12, 80(X6)
35- MOV X13, 88(X6)
36- MOV X14, 96(X6)
37- MOV X15, 104(X6)
38- MOV X16, 112(X6)
39- MOV X17, 120(X6)
32+ MOV X10, 64(X6)
33+ MOV X11, 72(X6)
34+ MOV X12, 80(X6)
35+ MOV X13, 88(X6)
36+ MOV X14, 96(X6)
37+ MOV X15, 104(X6)
38+ MOV X16, 112(X6)
39+ MOV X17, 120(X6)
4040
4141 // Allocate space on stack for RA, saved regs, and callbackArgs.
4242 // We need: 8 (RA) + 8 (X9 callee-saved) + 24 (callbackArgs) = 40, round to 176 (22*8)
4343 // to match loong64 and ensure we don't overlap with saved register args.
4444 // The saved regs end at SP-8 (original), so we need new SP below SP-128.
45- ADD $-(22*8), SP
45+ ADD $-(22*8), SP
4646
4747 // Save link register (RA/X1) and callee-saved register X9
4848 // (X9 is used by the assembler for some instructions)
49- MOV X1, 0(SP)
50- MOV X9, 8(SP)
49+ MOV X1, 0(SP)
50+ MOV X9, 8(SP)
5151
5252 // Create a struct callbackArgs on our stack.
5353 // callbackArgs struct: index(0), args(8), result(16)
5454 // Place it at 16(SP) to avoid overlap
55- ADD $16, SP, X9
56- MOV X7, 0(X9) // callback index
57- MOV X6, 8(X9) // address of args vector
58- MOV X0, 16(X9) // result = 0
55+ ADD $16, SP, X9
56+ MOV X7, 0(X9) // callback index
57+ MOV X6, 8(X9) // address of args vector
58+ MOV X0, 16(X9) // result = 0
5959
6060 // Call crosscall2 with arguments in registers
61- MOV ·callbackWrap_call(SB), X10 // Get the ABIInternal function pointer
62- MOV (X10), X10 // without <ABIInternal> by using a closure. X10 = fn
63- MOV X9, X11 // X11 = frame (address of callbackArgs)
64- MOV X0, X13 // X13 = ctxt = 0
61+ MOV ·callbackWrap_call(SB), X10 // Get the ABIInternal function pointer
62+ MOV (X10), X10 // without <ABIInternal> by using a closure. X10 = fn
63+ MOV X9, X11 // X11 = frame (address of callbackArgs)
64+ MOV X0, X13 // X13 = ctxt = 0
6565
66- CALL crosscall2(SB)
66+ CALL crosscall2(SB)
6767
6868 // Get callback result.
69- ADD $16, SP, X9
70- MOV 16(X9), X10
69+ ADD $16, SP, X9
70+ MOV 16(X9), X10
7171
7272 // Restore link register and callee-saved X9
73- MOV 8(SP), X9
74- MOV 0(SP), X1
73+ MOV 8(SP), X9
74+ MOV 0(SP), X1
7575
7676 // Restore stack pointer
77- ADD $(22*8), SP
77+ ADD $(22*8), SP
7878
7979 RET
@@ -16,64 +16,64 @@ TEXT callbackasm1(SB), NOFRAME, $0
16 // Save callback register arguments X10-X17 and F10-F17.16 // Save callback register arguments X10-X17 and F10-F17.
17 // Stack args (if any) are at 0(SP), 8(SP), etc.17 // Stack args (if any) are at 0(SP), 8(SP), etc.
18 // We save register args at SP-128, making them contiguous with stack args.18 // We save register args at SP-128, making them contiguous with stack args.
19- ADD $-(16*8), SP, X619+ ADD $-(16*8), SP, X6
20- 20+
21 // Save float arg regs fa0-fa7 (F10-F17)21 // Save float arg regs fa0-fa7 (F10-F17)
22- MOVD F10, 0(X6)22+ MOVD F10, 0(X6)
23- MOVD F11, 8(X6)23+ MOVD F11, 8(X6)
24- MOVD F12, 16(X6)24+ MOVD F12, 16(X6)
25- MOVD F13, 24(X6)25+ MOVD F13, 24(X6)
26- MOVD F14, 32(X6)26+ MOVD F14, 32(X6)
27- MOVD F15, 40(X6)27+ MOVD F15, 40(X6)
28- MOVD F16, 48(X6)28+ MOVD F16, 48(X6)
29- MOVD F17, 56(X6)29+ MOVD F17, 56(X6)
30- 30+
31 // Save integer arg regs a0-a7 (X10-X17)31 // Save integer arg regs a0-a7 (X10-X17)
32- MOV X10, 64(X6)32+ MOV X10, 64(X6)
33- MOV X11, 72(X6)33+ MOV X11, 72(X6)
34- MOV X12, 80(X6)34+ MOV X12, 80(X6)
35- MOV X13, 88(X6)35+ MOV X13, 88(X6)
36- MOV X14, 96(X6)36+ MOV X14, 96(X6)
37- MOV X15, 104(X6)37+ MOV X15, 104(X6)
38- MOV X16, 112(X6)38+ MOV X16, 112(X6)
39- MOV X17, 120(X6)39+ MOV X17, 120(X6)
40 40
41 // Allocate space on stack for RA, saved regs, and callbackArgs.41 // Allocate space on stack for RA, saved regs, and callbackArgs.
42 // We need: 8 (RA) + 8 (X9 callee-saved) + 24 (callbackArgs) = 40, round to 176 (22*8)42 // We need: 8 (RA) + 8 (X9 callee-saved) + 24 (callbackArgs) = 40, round to 176 (22*8)
43 // to match loong64 and ensure we don't overlap with saved register args.43 // to match loong64 and ensure we don't overlap with saved register args.
44 // The saved regs end at SP-8 (original), so we need new SP below SP-128.44 // The saved regs end at SP-8 (original), so we need new SP below SP-128.
45- ADD $-(22*8), SP45+ ADD $-(22*8), SP
46 46
47 // Save link register (RA/X1) and callee-saved register X947 // Save link register (RA/X1) and callee-saved register X9
48 // (X9 is used by the assembler for some instructions)48 // (X9 is used by the assembler for some instructions)
49- MOV X1, 0(SP)49+ MOV X1, 0(SP)
50- MOV X9, 8(SP)50+ MOV X9, 8(SP)
51 51
52 // Create a struct callbackArgs on our stack.52 // Create a struct callbackArgs on our stack.
53 // callbackArgs struct: index(0), args(8), result(16)53 // callbackArgs struct: index(0), args(8), result(16)
54 // Place it at 16(SP) to avoid overlap54 // Place it at 16(SP) to avoid overlap
55- ADD $16, SP, X955+ ADD $16, SP, X9
56- MOV X7, 0(X9) // callback index56+ MOV X7, 0(X9) // callback index
57- MOV X6, 8(X9) // address of args vector57+ MOV X6, 8(X9) // address of args vector
58- MOV X0, 16(X9) // result = 058+ MOV X0, 16(X9) // result = 0
59 59
60 // Call crosscall2 with arguments in registers60 // Call crosscall2 with arguments in registers
61- MOV ·callbackWrap_call(SB), X10 // Get the ABIInternal function pointer61+ MOV ·callbackWrap_call(SB), X10 // Get the ABIInternal function pointer
62- MOV (X10), X10 // without <ABIInternal> by using a closure. X10 = fn62+ MOV (X10), X10 // without <ABIInternal> by using a closure. X10 = fn
63- MOV X9, X11 // X11 = frame (address of callbackArgs)63+ MOV X9, X11 // X11 = frame (address of callbackArgs)
64- MOV X0, X13 // X13 = ctxt = 064+ MOV X0, X13 // X13 = ctxt = 0
65 65
66- CALL crosscall2(SB)66+ CALL crosscall2(SB)
67 67
68 // Get callback result.68 // Get callback result.
69- ADD $16, SP, X969+ ADD $16, SP, X9
70- MOV 16(X9), X1070+ MOV 16(X9), X10
71 71
72 // Restore link register and callee-saved X972 // Restore link register and callee-saved X9
73- MOV 8(SP), X973+ MOV 8(SP), X9
74- MOV 0(SP), X174+ MOV 0(SP), X1
75 75
76 // Restore stack pointer76 // Restore stack pointer
77- ADD $(22*8), SP77+ ADD $(22*8), SP
78 78
79 RET79 RET
M wincallback.go +17 -15
@@ -33,10 +33,10 @@ func genasmAmd64() {
3333 // which Go callback function is executed later on.
3434 #include "textflag.h"
3535
36-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0
36+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
3737 `)
3838 for i := 0; i < maxCallback; i++ {
39- buf.WriteString("\tCALL\tcallbackasm1(SB)\n")
39+ buf.WriteString("\tCALL callbackasm1(SB)\n")
4040 }
4141 if err := os.WriteFile("zcallback_amd64.s", buf.Bytes(), 0644); err != nil {
4242 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -60,11 +60,11 @@ func genasmArm() {
6060 // It then calls the Go implementation for that callback.
6161 #include "textflag.h"
6262
63-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0
63+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
6464 `)
6565 for i := 0; i < maxCallback; i++ {
66- fmt.Fprintf(&buf, "\tMOVW\t$%d, R12\n", i)
67- buf.WriteString("\tB\tcallbackasm1(SB)\n")
66+ fmt.Fprintf(&buf, "\tMOVW $%d, R12\n", i)
67+ buf.WriteString("\tB callbackasm1(SB)\n")
6868 }
6969 if err := os.WriteFile("zcallback_arm.s", buf.Bytes(), 0644); err != nil {
7070 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -88,11 +88,11 @@ func genasmArm64() {
8888 // It then calls the Go implementation for that callback.
8989 #include "textflag.h"
9090
91-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0
91+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
9292 `)
9393 for i := 0; i < maxCallback; i++ {
94- fmt.Fprintf(&buf, "\tMOVD\t$%d, R12\n", i)
95- buf.WriteString("\tB\tcallbackasm1(SB)\n")
94+ fmt.Fprintf(&buf, "\tMOVD $%d, R12\n", i)
95+ buf.WriteString("\tB callbackasm1(SB)\n")
9696 }
9797 if err := os.WriteFile("zcallback_arm64.s", buf.Bytes(), 0644); err != nil {
9898 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -116,11 +116,11 @@ func genasmLoong64() {
116116 // It then calls the Go implementation for that callback.
117117 #include "textflag.h"
118118
119-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0
119+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
120120 `)
121121 for i := 0; i < maxCallback; i++ {
122- fmt.Fprintf(&buf, "\tMOVV\t$%d, R12\n", i)
123- buf.WriteString("\tJMP\tcallbackasm1(SB)\n")
122+ fmt.Fprintf(&buf, "\tMOVV $%d, R12\n", i)
123+ buf.WriteString("\tJMP callbackasm1(SB)\n")
124124 }
125125 if err := os.WriteFile("zcallback_loong64.s", buf.Bytes(), 0644); err != nil {
126126 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -148,14 +148,16 @@ func genasmRiscv64() {
148148 // It then calls the Go implementation for that callback.
149149 #include "textflag.h"
150150
151-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0
151+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
152152 `)
153153 for i := 0; i < maxCallback; i++ {
154+ space := " "
154155 if i <= 32 {
155- fmt.Fprintf(&buf, "\tPCALIGN\t$8\n")
156+ fmt.Fprintf(&buf, "\tPCALIGN $8\n")
157+ space = " "
156158 }
157- fmt.Fprintf(&buf, "\tMOV\t$%d, X7\n", i)
158- buf.WriteString("\tJMP\tcallbackasm1(SB)\n")
159+ fmt.Fprintf(&buf, "\tMOV%s$%d, X7\n", space, i)
160+ fmt.Fprintf(&buf, "\tJMP%scallbackasm1(SB)\n", space)
159161 }
160162 if err := os.WriteFile("zcallback_riscv64.s", buf.Bytes(), 0644); err != nil {
161163 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -33,10 +33,10 @@ func genasmAmd64() {
33 // which Go callback function is executed later on.33 // which Go callback function is executed later on.
34 #include "textflag.h"34 #include "textflag.h"
35 35
36-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$036+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
37 `)37 `)
38 for i := 0; i < maxCallback; i++ {38 for i := 0; i < maxCallback; i++ {
39- buf.WriteString("\tCALL\tcallbackasm1(SB)\n")39+ buf.WriteString("\tCALL callbackasm1(SB)\n")
40 }40 }
41 if err := os.WriteFile("zcallback_amd64.s", buf.Bytes(), 0644); err != nil {41 if err := os.WriteFile("zcallback_amd64.s", buf.Bytes(), 0644); err != nil {
42 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)42 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -60,11 +60,11 @@ func genasmArm() {
60 // It then calls the Go implementation for that callback.60 // It then calls the Go implementation for that callback.
61 #include "textflag.h"61 #include "textflag.h"
62 62
63-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$063+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
64 `)64 `)
65 for i := 0; i < maxCallback; i++ {65 for i := 0; i < maxCallback; i++ {
66- fmt.Fprintf(&buf, "\tMOVW\t$%d, R12\n", i)66+ fmt.Fprintf(&buf, "\tMOVW $%d, R12\n", i)
67- buf.WriteString("\tB\tcallbackasm1(SB)\n")67+ buf.WriteString("\tB callbackasm1(SB)\n")
68 }68 }
69 if err := os.WriteFile("zcallback_arm.s", buf.Bytes(), 0644); err != nil {69 if err := os.WriteFile("zcallback_arm.s", buf.Bytes(), 0644); err != nil {
70 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)70 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -88,11 +88,11 @@ func genasmArm64() {
88 // It then calls the Go implementation for that callback.88 // It then calls the Go implementation for that callback.
89 #include "textflag.h"89 #include "textflag.h"
90 90
91-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$091+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
92 `)92 `)
93 for i := 0; i < maxCallback; i++ {93 for i := 0; i < maxCallback; i++ {
94- fmt.Fprintf(&buf, "\tMOVD\t$%d, R12\n", i)94+ fmt.Fprintf(&buf, "\tMOVD $%d, R12\n", i)
95- buf.WriteString("\tB\tcallbackasm1(SB)\n")95+ buf.WriteString("\tB callbackasm1(SB)\n")
96 }96 }
97 if err := os.WriteFile("zcallback_arm64.s", buf.Bytes(), 0644); err != nil {97 if err := os.WriteFile("zcallback_arm64.s", buf.Bytes(), 0644); err != nil {
98 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)98 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -116,11 +116,11 @@ func genasmLoong64() {
116 // It then calls the Go implementation for that callback.116 // It then calls the Go implementation for that callback.
117 #include "textflag.h"117 #include "textflag.h"
118 118
119-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0119+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
120 `)120 `)
121 for i := 0; i < maxCallback; i++ {121 for i := 0; i < maxCallback; i++ {
122- fmt.Fprintf(&buf, "\tMOVV\t$%d, R12\n", i)122+ fmt.Fprintf(&buf, "\tMOVV $%d, R12\n", i)
123- buf.WriteString("\tJMP\tcallbackasm1(SB)\n")123+ buf.WriteString("\tJMP callbackasm1(SB)\n")
124 }124 }
125 if err := os.WriteFile("zcallback_loong64.s", buf.Bytes(), 0644); err != nil {125 if err := os.WriteFile("zcallback_loong64.s", buf.Bytes(), 0644); err != nil {
126 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)126 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
@@ -148,14 +148,16 @@ func genasmRiscv64() {
148 // It then calls the Go implementation for that callback.148 // It then calls the Go implementation for that callback.
149 #include "textflag.h"149 #include "textflag.h"
150 150
151-TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0151+TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0
152 `)152 `)
153 for i := 0; i < maxCallback; i++ {153 for i := 0; i < maxCallback; i++ {
154+ space := " "
154 if i <= 32 {155 if i <= 32 {
155- fmt.Fprintf(&buf, "\tPCALIGN\t$8\n")156+ fmt.Fprintf(&buf, "\tPCALIGN $8\n")
157+ space = " "
156 }158 }
157- fmt.Fprintf(&buf, "\tMOV\t$%d, X7\n", i)159+ fmt.Fprintf(&buf, "\tMOV%s$%d, X7\n", space, i)
158- buf.WriteString("\tJMP\tcallbackasm1(SB)\n")160+ fmt.Fprintf(&buf, "\tJMP%scallbackasm1(SB)\n", space)
159 }161 }
160 if err := os.WriteFile("zcallback_riscv64.s", buf.Bytes(), 0644); err != nil {162 if err := os.WriteFile("zcallback_riscv64.s", buf.Bytes(), 0644); err != nil {
161 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)163 fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
M zcallback_amd64.s +2001 -2001 large diff (4002 lines changed): collapsed
M zcallback_arm64.s +4001 -4001 large diff (8002 lines changed): collapsed
M zcallback_loong64.s +4001 -4001 large diff (8002 lines changed): collapsed
M zcallback_riscv64.s +4034 -4034 large diff (8068 lines changed): collapsed

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 102

↑↓ moveenter openesc close