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 Unverified
B5690EEEBB952194The key is unknown
13 files · +14331 -14329
M internal/fakecgo/asm_loong64.s +17 -17
| @@ -9,32 +9,32 @@ | |||
| 9 | 9 | // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) | |
| 10 | 10 | // Saves C callee-saved registers and calls cgocallback with three arguments. | |
| 11 | 11 | // 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 | |
| 24 | 24 | ||
| 25 | 25 | SAVE_R22_TO_R31((4*8)) | |
| 26 | 26 | SAVE_F24_TO_F31((14*8)) | |
| 27 | - | MOVV R1, (22*8)(R3) | |
| 27 | + | MOVV R1, (22*8)(R3) | |
| 28 | 28 | ||
| 29 | 29 | // 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 | 34 | RESTORE_R22_TO_R31((4*8)) | |
| 35 | 35 | RESTORE_F24_TO_F31((14*8)) | |
| 36 | - | MOVV (22*8)(R3), R1 | |
| 36 | + | MOVV (22*8)(R3), R1 | |
| 37 | 37 | ||
| 38 | - | ADDV $(23*8), R3 | |
| 38 | + | ADDV $(23*8), R3 | |
| 39 | 39 | ||
| 40 | 40 | 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,$0 | 12 | + | TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 |
| 13 | - | /* | 13 | + | /* |
| 14 | - | * We still need to save all callee save register as before, and then | 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. | 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 | 16 | + | * 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), R3 | 20 | + | ADDV $(-23*8), R3 |
| 21 | - | MOVV R4, (1*8)(R3) // fn unsafe.Pointer | 21 | + | MOVV R4, (1*8)(R3) // fn unsafe.Pointer |
| 22 | - | MOVV R5, (2*8)(R3) // a unsafe.Pointer | 22 | + | MOVV R5, (2*8)(R3) // a unsafe.Pointer |
| 23 | - | MOVV R7, (3*8)(R3) // ctxt uintptr | 23 | + | 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 environment | 29 | // 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), R1 | 36 | + | MOVV (22*8)(R3), R1 |
| 37 | 37 | ||||
| 38 | - | ADDV $(23*8), R3 | 38 | + | ADDV $(23*8), R3 |
| 39 | 39 | ||||
| 40 | RET | 40 | RET | ||
M internal/fakecgo/asm_riscv64.s +63 -63
| @@ -8,71 +8,71 @@ | |||
| 8 | 8 | // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) | |
| 9 | 9 | // Saves C callee-saved registers and calls cgocallback with three arguments. | |
| 10 | 10 | // 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) | |
| 46 | 46 | ||
| 47 | 47 | // 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) | |
| 50 | 50 | ||
| 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 | |
| 77 | 77 | ||
| 78 | 78 | 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,$0 | 11 | + | TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0 |
| 12 | - | /* | 12 | + | /* |
| 13 | - | * Push arguments for fn (X10, X11, X13), along with all callee-save | 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 | 14 | + | * registers. Note that at procedure entry the first argument is at |
| 15 | - | * 8(X2). | 15 | + | * 8(X2). |
| 16 | - | */ | 16 | + | */ |
| 17 | - | ADD $(-8*29), X2 | 17 | + | ADD $(-8*29), X2 |
| 18 | - | MOV X10, (8*1)(X2) // fn unsafe.Pointer | 18 | + | MOV X10, (8*1)(X2) // fn unsafe.Pointer |
| 19 | - | MOV X11, (8*2)(X2) // a unsafe.Pointer | 19 | + | MOV X11, (8*2)(X2) // a unsafe.Pointer |
| 20 | - | MOV X13, (8*3)(X2) // ctxt uintptr | 20 | + | 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 environment | 47 | // 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), X8 | 51 | + | MOV (8*4)(X2), X8 |
| 52 | - | MOV (8*5)(X2), X9 | 52 | + | MOV (8*5)(X2), X9 |
| 53 | - | MOV (8*6)(X2), X18 | 53 | + | MOV (8*6)(X2), X18 |
| 54 | - | MOV (8*7)(X2), X19 | 54 | + | MOV (8*7)(X2), X19 |
| 55 | - | MOV (8*8)(X2), X20 | 55 | + | MOV (8*8)(X2), X20 |
| 56 | - | MOV (8*9)(X2), X21 | 56 | + | MOV (8*9)(X2), X21 |
| 57 | - | MOV (8*10)(X2), X22 | 57 | + | MOV (8*10)(X2), X22 |
| 58 | - | MOV (8*11)(X2), X23 | 58 | + | MOV (8*11)(X2), X23 |
| 59 | - | MOV (8*12)(X2), X24 | 59 | + | MOV (8*12)(X2), X24 |
| 60 | - | MOV (8*13)(X2), X25 | 60 | + | MOV (8*13)(X2), X25 |
| 61 | - | MOV (8*14)(X2), X26 | 61 | + | MOV (8*14)(X2), X26 |
| 62 | - | MOV (8*15)(X2), g | 62 | + | MOV (8*15)(X2), g |
| 63 | - | MOV (8*16)(X2), X1 | 63 | + | MOV (8*16)(X2), X1 |
| 64 | - | MOVD (8*17)(X2), F8 | 64 | + | MOVD (8*17)(X2), F8 |
| 65 | - | MOVD (8*18)(X2), F9 | 65 | + | MOVD (8*18)(X2), F9 |
| 66 | - | MOVD (8*19)(X2), F18 | 66 | + | MOVD (8*19)(X2), F18 |
| 67 | - | MOVD (8*20)(X2), F19 | 67 | + | MOVD (8*20)(X2), F19 |
| 68 | - | MOVD (8*21)(X2), F20 | 68 | + | MOVD (8*21)(X2), F20 |
| 69 | - | MOVD (8*22)(X2), F21 | 69 | + | MOVD (8*22)(X2), F21 |
| 70 | - | MOVD (8*23)(X2), F22 | 70 | + | MOVD (8*23)(X2), F22 |
| 71 | - | MOVD (8*24)(X2), F23 | 71 | + | MOVD (8*24)(X2), F23 |
| 72 | - | MOVD (8*25)(X2), F24 | 72 | + | MOVD (8*25)(X2), F24 |
| 73 | - | MOVD (8*26)(X2), F25 | 73 | + | MOVD (8*26)(X2), F25 |
| 74 | - | MOVD (8*27)(X2), F26 | 74 | + | MOVD (8*27)(X2), F26 |
| 75 | - | MOVD (8*28)(X2), F27 | 75 | + | MOVD (8*28)(X2), F27 |
| 76 | - | ADD $(8*29), X2 | 76 | + | ADD $(8*29), X2 |
| 77 | 77 | ||||
| 78 | RET | 78 | RET | ||
M internal/fakecgo/trampolines_arm64.s +1 -1
| @@ -63,7 +63,7 @@ TEXT threadentry_trampoline(SB), NOSPLIT, $0-0 | |||
| 63 | 63 | MOVD ·threadentry_call(SB), R9 | |
| 64 | 64 | MOVD (R9), R9 | |
| 65 | 65 | CALL R9 | |
| 66 | - | MOVD $0, R0 // TODO: get the return value from threadentry | |
| 66 | + | MOVD $0, R0 // TODO: get the return value from threadentry | |
| 67 | 67 | ||
| 68 | 68 | RESTORE_R19_TO_R28(8*4) | |
| 69 | 69 | RESTORE_F8_TO_F15(8*14) | |
| @@ -63,7 +63,7 @@ TEXT threadentry_trampoline(SB), NOSPLIT, $0-0 | |||||
| 63 | MOVD ·threadentry_call(SB), R9 | 63 | MOVD ·threadentry_call(SB), R9 | ||
| 64 | MOVD (R9), R9 | 64 | MOVD (R9), R9 | ||
| 65 | CALL R9 | 65 | CALL R9 | ||
| 66 | - | MOVD $0, R0 // TODO: get the return value from threadentry | 66 | + | 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 @@ | |||
| 10 | 10 | // X5 is used as temporary register. | |
| 11 | 11 | ||
| 12 | 12 | 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 | |
| 18 | 18 | RET | |
| 19 | 19 | ||
| 20 | 20 | 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 | |
| 25 | 25 | RET | |
| 26 | 26 | ||
| 27 | 27 | 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 | |
| 32 | 32 | RET | |
| 33 | 33 | ||
| 34 | 34 | 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 | |
| 39 | 39 | RET | |
| 40 | 40 | ||
| 41 | 41 | 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 | 43 | RET | |
| 44 | 44 | ||
| 45 | 45 | TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 | |
| 46 | - | CALL ·x_cgo_bindm(SB) | |
| 46 | + | CALL ·x_cgo_bindm(SB) | |
| 47 | 47 | RET | |
| 48 | 48 | ||
| 49 | 49 | // func setg_trampoline(setg uintptr, g uintptr) | |
| 50 | 50 | 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 | |
| 54 | 54 | RET | |
| 55 | 55 | ||
| 56 | 56 | 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 | |
| 61 | 61 | RET | |
| 62 | 62 | ||
| 63 | 63 | 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) | |
| 72 | 72 | 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, $16 | 12 | 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), X5 | 15 | + | MOV ·x_cgo_init_call(SB), X5 |
| 16 | - | MOV (X5), X5 | 16 | + | MOV (X5), X5 |
| 17 | - | JALR RA, 0(X5) | 17 | + | CALL X5 |
| 18 | RET | 18 | RET | ||
| 19 | 19 | ||||
| 20 | TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8 | 20 | 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), X5 | 22 | + | MOV ·x_cgo_thread_start_call(SB), X5 |
| 23 | - | MOV (X5), X5 | 23 | + | MOV (X5), X5 |
| 24 | - | JALR RA, 0(X5) | 24 | + | CALL X5 |
| 25 | RET | 25 | RET | ||
| 26 | 26 | ||||
| 27 | TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8 | 27 | 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), X5 | 29 | + | MOV ·x_cgo_setenv_call(SB), X5 |
| 30 | - | MOV (X5), X5 | 30 | + | MOV (X5), X5 |
| 31 | - | JALR RA, 0(X5) | 31 | + | CALL X5 |
| 32 | RET | 32 | RET | ||
| 33 | 33 | ||||
| 34 | TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8 | 34 | 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), X5 | 36 | + | MOV ·x_cgo_unsetenv_call(SB), X5 |
| 37 | - | MOV (X5), X5 | 37 | + | MOV (X5), X5 |
| 38 | - | JALR RA, 0(X5) | 38 | + | CALL X5 |
| 39 | RET | 39 | RET | ||
| 40 | 40 | ||||
| 41 | TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 | 41 | 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 | RET | 43 | RET | ||
| 44 | 44 | ||||
| 45 | TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 | 45 | TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0 | ||
| 46 | - | CALL ·x_cgo_bindm(SB) | 46 | + | CALL ·x_cgo_bindm(SB) |
| 47 | RET | 47 | 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, $0 | 50 | TEXT ·setg_trampoline(SB), NOSPLIT, $0 | ||
| 51 | - | MOV gp+8(FP), X10 | 51 | + | MOV gp+8(FP), X10 |
| 52 | - | MOV setg+0(FP), X5 | 52 | + | MOV setg+0(FP), X5 |
| 53 | - | JALR RA, 0(X5) | 53 | + | CALL X5 |
| 54 | RET | 54 | RET | ||
| 55 | 55 | ||||
| 56 | TEXT threadentry_trampoline(SB), NOSPLIT, $16 | 56 | TEXT threadentry_trampoline(SB), NOSPLIT, $16 | ||
| 57 | - | MOV X10, 8(SP) | 57 | + | MOV X10, 8(SP) |
| 58 | - | MOV ·threadentry_call(SB), X5 | 58 | + | MOV ·threadentry_call(SB), X5 |
| 59 | - | MOV (X5), X5 | 59 | + | MOV (X5), X5 |
| 60 | - | JALR RA, 0(X5) | 60 | + | CALL X5 |
| 61 | RET | 61 | RET | ||
| 62 | 62 | ||||
| 63 | TEXT ·call5(SB), NOSPLIT, $0-48 | 63 | TEXT ·call5(SB), NOSPLIT, $0-48 | ||
| 64 | - | MOV fn+0(FP), X5 | 64 | + | MOV fn+0(FP), X5 |
| 65 | - | MOV a1+8(FP), X10 | 65 | + | MOV a1+8(FP), X10 |
| 66 | - | MOV a2+16(FP), X11 | 66 | + | MOV a2+16(FP), X11 |
| 67 | - | MOV a3+24(FP), X12 | 67 | + | MOV a3+24(FP), X12 |
| 68 | - | MOV a4+32(FP), X13 | 68 | + | MOV a4+32(FP), X13 |
| 69 | - | MOV a5+40(FP), X14 | 69 | + | 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 | RET | 72 | RET | ||
M sys_loong64.s +43 -43
| @@ -39,58 +39,58 @@ GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8 | |||
| 39 | 39 | DATA ·syscall15XABI0(SB)/8, $syscall15X(SB) | |
| 40 | 40 | TEXT syscall15X(SB), NOSPLIT, $0 | |
| 41 | 41 | // 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 | |
| 45 | 45 | ||
| 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 | |
| 54 | 54 | ||
| 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 | |
| 63 | 63 | ||
| 64 | 64 | // 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) | |
| 79 | 79 | ||
| 80 | - | MOVV syscall15Args_fn(R13), R12 | |
| 81 | - | JAL (R12) | |
| 80 | + | MOVV syscall15Args_fn(R13), R12 | |
| 81 | + | JAL (R12) | |
| 82 | 82 | ||
| 83 | 83 | // 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 | |
| 86 | 86 | ||
| 87 | 87 | // 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) | |
| 90 | 90 | ||
| 91 | 91 | // 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) | |
| 96 | 96 | 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, $0 | 40 | TEXT syscall15X(SB), NOSPLIT, $0 | ||
| 41 | // push structure pointer | 41 | // push structure pointer | ||
| 42 | - | SUBV $STACK_SIZE, R3 | 42 | + | SUBV $STACK_SIZE, R3 |
| 43 | - | MOVV R4, PTR_ADDRESS(R3) | 43 | + | MOVV R4, PTR_ADDRESS(R3) |
| 44 | - | MOVV R4, R13 | 44 | + | MOVV R4, R13 |
| 45 | 45 | ||||
| 46 | - | MOVD syscall15Args_f1(R13), F0 // f1 | 46 | + | MOVD syscall15Args_f1(R13), F0 // f1 |
| 47 | - | MOVD syscall15Args_f2(R13), F1 // f2 | 47 | + | MOVD syscall15Args_f2(R13), F1 // f2 |
| 48 | - | MOVD syscall15Args_f3(R13), F2 // f3 | 48 | + | MOVD syscall15Args_f3(R13), F2 // f3 |
| 49 | - | MOVD syscall15Args_f4(R13), F3 // f4 | 49 | + | MOVD syscall15Args_f4(R13), F3 // f4 |
| 50 | - | MOVD syscall15Args_f5(R13), F4 // f5 | 50 | + | MOVD syscall15Args_f5(R13), F4 // f5 |
| 51 | - | MOVD syscall15Args_f6(R13), F5 // f6 | 51 | + | MOVD syscall15Args_f6(R13), F5 // f6 |
| 52 | - | MOVD syscall15Args_f7(R13), F6 // f7 | 52 | + | MOVD syscall15Args_f7(R13), F6 // f7 |
| 53 | - | MOVD syscall15Args_f8(R13), F7 // f8 | 53 | + | MOVD syscall15Args_f8(R13), F7 // f8 |
| 54 | 54 | ||||
| 55 | - | MOVV syscall15Args_a1(R13), R4 // a1 | 55 | + | MOVV syscall15Args_a1(R13), R4 // a1 |
| 56 | - | MOVV syscall15Args_a2(R13), R5 // a2 | 56 | + | MOVV syscall15Args_a2(R13), R5 // a2 |
| 57 | - | MOVV syscall15Args_a3(R13), R6 // a3 | 57 | + | MOVV syscall15Args_a3(R13), R6 // a3 |
| 58 | - | MOVV syscall15Args_a4(R13), R7 // a4 | 58 | + | MOVV syscall15Args_a4(R13), R7 // a4 |
| 59 | - | MOVV syscall15Args_a5(R13), R8 // a5 | 59 | + | MOVV syscall15Args_a5(R13), R8 // a5 |
| 60 | - | MOVV syscall15Args_a6(R13), R9 // a6 | 60 | + | MOVV syscall15Args_a6(R13), R9 // a6 |
| 61 | - | MOVV syscall15Args_a7(R13), R10 // a7 | 61 | + | MOVV syscall15Args_a7(R13), R10 // a7 |
| 62 | - | MOVV syscall15Args_a8(R13), R11 // a8 | 62 | + | MOVV syscall15Args_a8(R13), R11 // a8 |
| 63 | 63 | ||||
| 64 | // push a9-a15 onto stack | 64 | // push a9-a15 onto stack | ||
| 65 | - | MOVV syscall15Args_a9(R13), R12 | 65 | + | MOVV syscall15Args_a9(R13), R12 |
| 66 | - | MOVV R12, 0(R3) | 66 | + | MOVV R12, 0(R3) |
| 67 | - | MOVV syscall15Args_a10(R13), R12 | 67 | + | MOVV syscall15Args_a10(R13), R12 |
| 68 | - | MOVV R12, 8(R3) | 68 | + | MOVV R12, 8(R3) |
| 69 | - | MOVV syscall15Args_a11(R13), R12 | 69 | + | MOVV syscall15Args_a11(R13), R12 |
| 70 | - | MOVV R12, 16(R3) | 70 | + | MOVV R12, 16(R3) |
| 71 | - | MOVV syscall15Args_a12(R13), R12 | 71 | + | MOVV syscall15Args_a12(R13), R12 |
| 72 | - | MOVV R12, 24(R3) | 72 | + | MOVV R12, 24(R3) |
| 73 | - | MOVV syscall15Args_a13(R13), R12 | 73 | + | MOVV syscall15Args_a13(R13), R12 |
| 74 | - | MOVV R12, 32(R3) | 74 | + | MOVV R12, 32(R3) |
| 75 | - | MOVV syscall15Args_a14(R13), R12 | 75 | + | MOVV syscall15Args_a14(R13), R12 |
| 76 | - | MOVV R12, 40(R3) | 76 | + | MOVV R12, 40(R3) |
| 77 | - | MOVV syscall15Args_a15(R13), R12 | 77 | + | MOVV syscall15Args_a15(R13), R12 |
| 78 | - | MOVV R12, 48(R3) | 78 | + | MOVV R12, 48(R3) |
| 79 | 79 | ||||
| 80 | - | MOVV syscall15Args_fn(R13), R12 | 80 | + | MOVV syscall15Args_fn(R13), R12 |
| 81 | - | JAL (R12) | 81 | + | JAL (R12) |
| 82 | 82 | ||||
| 83 | // pop structure pointer | 83 | // pop structure pointer | ||
| 84 | - | MOVV PTR_ADDRESS(R3), R13 | 84 | + | MOVV PTR_ADDRESS(R3), R13 |
| 85 | - | ADDV $STACK_SIZE, R3 | 85 | + | ADDV $STACK_SIZE, R3 |
| 86 | 86 | ||||
| 87 | // save R4, R5 | 87 | // 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-f3 | 91 | // 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 | RET | 96 | RET | ||
M sys_riscv64.s +49 -49
| @@ -25,77 +25,77 @@ DATA ·syscall15XABI0(SB)/8, $syscall15X(SB) | |||
| 25 | 25 | ||
| 26 | 26 | TEXT syscall15X(SB), NOSPLIT, $0 | |
| 27 | 27 | // Allocate stack frame (keeps 16-byte alignment) | |
| 28 | - | SUB $STACK_SIZE, SP | |
| 28 | + | SUB $STACK_SIZE, SP | |
| 29 | 29 | ||
| 30 | 30 | // 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) | |
| 34 | 34 | ||
| 35 | 35 | // Save original args pointer (in a0/X10) | |
| 36 | - | MOV X10, SAVE_ARGP(SP) | |
| 36 | + | MOV X10, SAVE_ARGP(SP) | |
| 37 | 37 | ||
| 38 | 38 | // X9 := args pointer (syscall15Args*) | |
| 39 | - | MOV X10, X9 | |
| 39 | + | MOV X10, X9 | |
| 40 | 40 | ||
| 41 | 41 | // 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 | |
| 50 | 50 | ||
| 51 | 51 | // 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 | |
| 60 | 60 | ||
| 61 | 61 | // 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) | |
| 76 | 76 | ||
| 77 | 77 | // Call fn | |
| 78 | 78 | // 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 | |
| 81 | 81 | ||
| 82 | 82 | // Restore args pointer (syscall15Args*) for storing results | |
| 83 | - | MOV SAVE_ARGP(SP), X9 | |
| 83 | + | MOV SAVE_ARGP(SP), X9 | |
| 84 | 84 | ||
| 85 | 85 | // 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) | |
| 88 | 88 | ||
| 89 | 89 | // 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) | |
| 94 | 94 | ||
| 95 | 95 | // 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 | |
| 99 | 99 | ||
| 100 | - | ADD $STACK_SIZE, SP | |
| 100 | + | ADD $STACK_SIZE, SP | |
| 101 | 101 | RET | |
| @@ -25,77 +25,77 @@ DATA ·syscall15XABI0(SB)/8, $syscall15X(SB) | |||||
| 25 | 25 | ||||
| 26 | TEXT syscall15X(SB), NOSPLIT, $0 | 26 | 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, SP | 28 | + | SUB $STACK_SIZE, SP |
| 29 | 29 | ||||
| 30 | // Save callee-saved regs we clobber + return address | 30 | // 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, X9 | 39 | + | 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), F10 | 42 | + | MOVD syscall15Args_f1(X9), F10 |
| 43 | - | MOVD syscall15Args_f2(X9), F11 | 43 | + | MOVD syscall15Args_f2(X9), F11 |
| 44 | - | MOVD syscall15Args_f3(X9), F12 | 44 | + | MOVD syscall15Args_f3(X9), F12 |
| 45 | - | MOVD syscall15Args_f4(X9), F13 | 45 | + | MOVD syscall15Args_f4(X9), F13 |
| 46 | - | MOVD syscall15Args_f5(X9), F14 | 46 | + | MOVD syscall15Args_f5(X9), F14 |
| 47 | - | MOVD syscall15Args_f6(X9), F15 | 47 | + | MOVD syscall15Args_f6(X9), F15 |
| 48 | - | MOVD syscall15Args_f7(X9), F16 | 48 | + | MOVD syscall15Args_f7(X9), F16 |
| 49 | - | MOVD syscall15Args_f8(X9), F17 | 49 | + | 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), X10 | 52 | + | MOV syscall15Args_a1(X9), X10 |
| 53 | - | MOV syscall15Args_a2(X9), X11 | 53 | + | MOV syscall15Args_a2(X9), X11 |
| 54 | - | MOV syscall15Args_a3(X9), X12 | 54 | + | MOV syscall15Args_a3(X9), X12 |
| 55 | - | MOV syscall15Args_a4(X9), X13 | 55 | + | MOV syscall15Args_a4(X9), X13 |
| 56 | - | MOV syscall15Args_a5(X9), X14 | 56 | + | MOV syscall15Args_a5(X9), X14 |
| 57 | - | MOV syscall15Args_a6(X9), X15 | 57 | + | MOV syscall15Args_a6(X9), X15 |
| 58 | - | MOV syscall15Args_a7(X9), X16 | 58 | + | MOV syscall15Args_a7(X9), X16 |
| 59 | - | MOV syscall15Args_a8(X9), X17 | 59 | + | 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), X18 | 62 | + | MOV syscall15Args_a9(X9), X18 |
| 63 | - | MOV X18, 0(SP) | 63 | + | MOV X18, 0(SP) |
| 64 | - | MOV syscall15Args_a10(X9), X18 | 64 | + | MOV syscall15Args_a10(X9), X18 |
| 65 | - | MOV X18, 8(SP) | 65 | + | MOV X18, 8(SP) |
| 66 | - | MOV syscall15Args_a11(X9), X18 | 66 | + | MOV syscall15Args_a11(X9), X18 |
| 67 | - | MOV X18, 16(SP) | 67 | + | MOV X18, 16(SP) |
| 68 | - | MOV syscall15Args_a12(X9), X18 | 68 | + | MOV syscall15Args_a12(X9), X18 |
| 69 | - | MOV X18, 24(SP) | 69 | + | MOV X18, 24(SP) |
| 70 | - | MOV syscall15Args_a13(X9), X18 | 70 | + | MOV syscall15Args_a13(X9), X18 |
| 71 | - | MOV X18, 32(SP) | 71 | + | MOV X18, 32(SP) |
| 72 | - | MOV syscall15Args_a14(X9), X18 | 72 | + | MOV syscall15Args_a14(X9), X18 |
| 73 | - | MOV X18, 40(SP) | 73 | + | MOV X18, 40(SP) |
| 74 | - | MOV syscall15Args_a15(X9), X18 | 74 | + | MOV syscall15Args_a15(X9), X18 |
| 75 | - | MOV X18, 48(SP) | 75 | + | MOV X18, 48(SP) |
| 76 | 76 | ||||
| 77 | // Call fn | 77 | // 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), X18 | 79 | + | MOV syscall15Args_fn(X9), X18 |
| 80 | - | JALR RA, X18 | 80 | + | CALL X18 |
| 81 | 81 | ||||
| 82 | // Restore args pointer (syscall15Args*) for storing results | 82 | // Restore args pointer (syscall15Args*) for storing results | ||
| 83 | - | MOV SAVE_ARGP(SP), X9 | 83 | + | MOV SAVE_ARGP(SP), X9 |
| 84 | 84 | ||||
| 85 | // Store results back | 85 | // 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 contract | 89 | // 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 address | 95 | // Restore callee-saved regs and return address | ||
| 96 | - | MOV SAVE_X18(SP), X18 | 96 | + | MOV SAVE_X18(SP), X18 |
| 97 | - | MOV SAVE_X9(SP), X9 | 97 | + | MOV SAVE_X9(SP), X9 |
| 98 | - | MOV SAVE_RA(SP), X1 | 98 | + | MOV SAVE_RA(SP), X1 |
| 99 | 99 | ||||
| 100 | - | ADD $STACK_SIZE, SP | 100 | + | ADD $STACK_SIZE, SP |
| 101 | RET | 101 | RET | ||
M sys_unix_loong64.s +34 -34
| @@ -11,26 +11,26 @@ | |||
| 11 | 11 | TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |
| 12 | 12 | NO_LOCAL_POINTERS | |
| 13 | 13 | ||
| 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) | |
| 31 | 31 | ||
| 32 | 32 | // Adjust SP by frame size. | |
| 33 | - | SUBV $(22*8), R3 | |
| 33 | + | SUBV $(22*8), R3 | |
| 34 | 34 | ||
| 35 | 35 | // It is important to save R30 because the go assembler | |
| 36 | 36 | // uses it for move instructions for a variable. | |
| @@ -44,32 +44,32 @@ TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | |||
| 44 | 44 | // restore it at the end of this function. | |
| 45 | 45 | // R1 is the link register. crosscall2 doesn't save it | |
| 46 | 46 | // 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) | |
| 49 | 49 | ||
| 50 | 50 | // 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 | |
| 55 | 55 | ||
| 56 | 56 | // Move parameters into registers | |
| 57 | 57 | // Get the ABIInternal function pointer | |
| 58 | 58 | // 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 | |
| 63 | 63 | ||
| 64 | - | JAL crosscall2(SB) | |
| 64 | + | JAL crosscall2(SB) | |
| 65 | 65 | ||
| 66 | 66 | // 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 | |
| 69 | 69 | ||
| 70 | 70 | // 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 | |
| 74 | 74 | ||
| 75 | 75 | RET | |
| @@ -11,26 +11,26 @@ | |||||
| 11 | TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | 11 | TEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0 | ||
| 12 | NO_LOCAL_POINTERS | 12 | NO_LOCAL_POINTERS | ||
| 13 | 13 | ||||
| 14 | - | SUBV $(16*8), R3, R14 | 14 | + | 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), R3 | 33 | + | SUBV $(22*8), R3 |
| 34 | 34 | ||||
| 35 | // It is important to save R30 because the go assembler | 35 | // 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 it | 45 | // 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), R13 | 51 | + | MOVV $(callbackArgs__size)(R3), R13 |
| 52 | - | MOVV R12, callbackArgs_index(R13) // callback index | 52 | + | MOVV R12, callbackArgs_index(R13) // callback index |
| 53 | - | MOVV R14, callbackArgs_args(R13) // address of args vector | 53 | + | MOVV R14, callbackArgs_args(R13) // address of args vector |
| 54 | - | MOVV $0, callbackArgs_result(R13) // result | 54 | + | MOVV $0, callbackArgs_result(R13) // result |
| 55 | 55 | ||||
| 56 | // Move parameters into registers | 56 | // Move parameters into registers | ||
| 57 | // Get the ABIInternal function pointer | 57 | // Get the ABIInternal function pointer | ||
| 58 | // without <ABIInternal> by using a closure. | 58 | // without <ABIInternal> by using a closure. | ||
| 59 | - | MOVV ·callbackWrap_call(SB), R4 | 59 | + | MOVV ·callbackWrap_call(SB), R4 |
| 60 | - | MOVV (R4), R4 // fn unsafe.Pointer | 60 | + | MOVV (R4), R4 // fn unsafe.Pointer |
| 61 | - | MOVV R13, R5 // frame (&callbackArgs{...}) | 61 | + | MOVV R13, R5 // frame (&callbackArgs{...}) |
| 62 | - | MOVV $0, R7 // ctxt uintptr | 62 | + | 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), R13 | 67 | + | MOVV $(callbackArgs__size)(R3), R13 |
| 68 | - | MOVV callbackArgs_result(R13), R4 | 68 | + | MOVV callbackArgs_result(R13), R4 |
| 69 | 69 | ||||
| 70 | // Restore LR and R30 | 70 | // Restore LR and R30 | ||
| 71 | - | MOVV 0(R3), R1 | 71 | + | MOVV 0(R3), R1 |
| 72 | - | MOVV 8(R3), R30 | 72 | + | MOVV 8(R3), R30 |
| 73 | - | ADDV $(22*8), R3 | 73 | + | ADDV $(22*8), R3 |
| 74 | 74 | ||||
| 75 | RET | 75 | RET | ||
M sys_unix_riscv64.s +36 -36
| @@ -16,64 +16,64 @@ TEXT callbackasm1(SB), NOFRAME, $0 | |||
| 16 | 16 | // Save callback register arguments X10-X17 and F10-F17. | |
| 17 | 17 | // Stack args (if any) are at 0(SP), 8(SP), etc. | |
| 18 | 18 | // 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 | + | ||
| 21 | 21 | // 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 | + | ||
| 31 | 31 | // 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) | |
| 40 | 40 | ||
| 41 | 41 | // Allocate space on stack for RA, saved regs, and callbackArgs. | |
| 42 | 42 | // We need: 8 (RA) + 8 (X9 callee-saved) + 24 (callbackArgs) = 40, round to 176 (22*8) | |
| 43 | 43 | // to match loong64 and ensure we don't overlap with saved register args. | |
| 44 | 44 | // 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 | |
| 46 | 46 | ||
| 47 | 47 | // Save link register (RA/X1) and callee-saved register X9 | |
| 48 | 48 | // (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) | |
| 51 | 51 | ||
| 52 | 52 | // Create a struct callbackArgs on our stack. | |
| 53 | 53 | // callbackArgs struct: index(0), args(8), result(16) | |
| 54 | 54 | // 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 | |
| 59 | 59 | ||
| 60 | 60 | // 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 | |
| 65 | 65 | ||
| 66 | - | CALL crosscall2(SB) | |
| 66 | + | CALL crosscall2(SB) | |
| 67 | 67 | ||
| 68 | 68 | // Get callback result. | |
| 69 | - | ADD $16, SP, X9 | |
| 70 | - | MOV 16(X9), X10 | |
| 69 | + | ADD $16, SP, X9 | |
| 70 | + | MOV 16(X9), X10 | |
| 71 | 71 | ||
| 72 | 72 | // 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 | |
| 75 | 75 | ||
| 76 | 76 | // Restore stack pointer | |
| 77 | - | ADD $(22*8), SP | |
| 77 | + | ADD $(22*8), SP | |
| 78 | 78 | ||
| 79 | 79 | 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, X6 | 19 | + | 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), SP | 45 | + | ADD $-(22*8), SP |
| 46 | 46 | ||||
| 47 | // Save link register (RA/X1) and callee-saved register X9 | 47 | // 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 overlap | 54 | // Place it at 16(SP) to avoid overlap | ||
| 55 | - | ADD $16, SP, X9 | 55 | + | ADD $16, SP, X9 |
| 56 | - | MOV X7, 0(X9) // callback index | 56 | + | MOV X7, 0(X9) // callback index |
| 57 | - | MOV X6, 8(X9) // address of args vector | 57 | + | MOV X6, 8(X9) // address of args vector |
| 58 | - | MOV X0, 16(X9) // result = 0 | 58 | + | MOV X0, 16(X9) // result = 0 |
| 59 | 59 | ||||
| 60 | // Call crosscall2 with arguments in registers | 60 | // Call crosscall2 with arguments in registers | ||
| 61 | - | MOV ·callbackWrap_call(SB), X10 // Get the ABIInternal function pointer | 61 | + | MOV ·callbackWrap_call(SB), X10 // Get the ABIInternal function pointer |
| 62 | - | MOV (X10), X10 // without <ABIInternal> by using a closure. X10 = fn | 62 | + | 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 = 0 | 64 | + | 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, X9 | 69 | + | ADD $16, SP, X9 |
| 70 | - | MOV 16(X9), X10 | 70 | + | MOV 16(X9), X10 |
| 71 | 71 | ||||
| 72 | // Restore link register and callee-saved X9 | 72 | // Restore link register and callee-saved X9 | ||
| 73 | - | MOV 8(SP), X9 | 73 | + | MOV 8(SP), X9 |
| 74 | - | MOV 0(SP), X1 | 74 | + | MOV 0(SP), X1 |
| 75 | 75 | ||||
| 76 | // Restore stack pointer | 76 | // Restore stack pointer | ||
| 77 | - | ADD $(22*8), SP | 77 | + | ADD $(22*8), SP |
| 78 | 78 | ||||
| 79 | RET | 79 | RET | ||
M wincallback.go +17 -15
| @@ -33,10 +33,10 @@ func genasmAmd64() { | |||
| 33 | 33 | // which Go callback function is executed later on. | |
| 34 | 34 | #include "textflag.h" | |
| 35 | 35 | ||
| 36 | - | TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0 | |
| 36 | + | TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0 | |
| 37 | 37 | `) | |
| 38 | 38 | for i := 0; i < maxCallback; i++ { | |
| 39 | - | buf.WriteString("\tCALL\tcallbackasm1(SB)\n") | |
| 39 | + | buf.WriteString("\tCALL callbackasm1(SB)\n") | |
| 40 | 40 | } | |
| 41 | 41 | if err := os.WriteFile("zcallback_amd64.s", buf.Bytes(), 0644); err != nil { | |
| 42 | 42 | fmt.Fprintf(os.Stderr, "wincallback: %s\n", err) | |
| @@ -60,11 +60,11 @@ func genasmArm() { | |||
| 60 | 60 | // It then calls the Go implementation for that callback. | |
| 61 | 61 | #include "textflag.h" | |
| 62 | 62 | ||
| 63 | - | TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0 | |
| 63 | + | TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0 | |
| 64 | 64 | `) | |
| 65 | 65 | 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") | |
| 68 | 68 | } | |
| 69 | 69 | if err := os.WriteFile("zcallback_arm.s", buf.Bytes(), 0644); err != nil { | |
| 70 | 70 | fmt.Fprintf(os.Stderr, "wincallback: %s\n", err) | |
| @@ -88,11 +88,11 @@ func genasmArm64() { | |||
| 88 | 88 | // It then calls the Go implementation for that callback. | |
| 89 | 89 | #include "textflag.h" | |
| 90 | 90 | ||
| 91 | - | TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0 | |
| 91 | + | TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0 | |
| 92 | 92 | `) | |
| 93 | 93 | 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") | |
| 96 | 96 | } | |
| 97 | 97 | if err := os.WriteFile("zcallback_arm64.s", buf.Bytes(), 0644); err != nil { | |
| 98 | 98 | fmt.Fprintf(os.Stderr, "wincallback: %s\n", err) | |
| @@ -116,11 +116,11 @@ func genasmLoong64() { | |||
| 116 | 116 | // It then calls the Go implementation for that callback. | |
| 117 | 117 | #include "textflag.h" | |
| 118 | 118 | ||
| 119 | - | TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0 | |
| 119 | + | TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0 | |
| 120 | 120 | `) | |
| 121 | 121 | 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") | |
| 124 | 124 | } | |
| 125 | 125 | if err := os.WriteFile("zcallback_loong64.s", buf.Bytes(), 0644); err != nil { | |
| 126 | 126 | fmt.Fprintf(os.Stderr, "wincallback: %s\n", err) | |
| @@ -148,14 +148,16 @@ func genasmRiscv64() { | |||
| 148 | 148 | // It then calls the Go implementation for that callback. | |
| 149 | 149 | #include "textflag.h" | |
| 150 | 150 | ||
| 151 | - | TEXT callbackasm(SB),NOSPLIT|NOFRAME,$0 | |
| 151 | + | TEXT callbackasm(SB), NOSPLIT|NOFRAME, $0 | |
| 152 | 152 | `) | |
| 153 | 153 | for i := 0; i < maxCallback; i++ { | |
| 154 | + | space := " " | |
| 154 | 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) | |
| 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) | |
| 159 | 161 | } | |
| 160 | 162 | if err := os.WriteFile("zcallback_riscv64.s", buf.Bytes(), 0644); err != nil { | |
| 161 | 163 | 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,$0 | 36 | + | 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,$0 | 63 | + | 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,$0 | 91 | + | 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,$0 | 119 | + | 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,$0 | 151 | + | 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) | ||