Skip to content

Commit a7f7a9c

Browse files
committed
runtime, runtime/cgo: save callee-saved FP registers on arm64
For golang#14876. Change-Id: I0992859264cbaf9c9b691fad53345bbb01b4cf3b Reviewed-on: https://go-review.googlesource.com/21085 Reviewed-by: Ian Lance Taylor <[email protected]> Run-TryBot: Ian Lance Taylor <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 7191643 commit a7f7a9c

3 files changed

Lines changed: 52 additions & 4 deletions

File tree

src/runtime/cgo/asm_arm64.s

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ TEXT crosscall2(SB),NOSPLIT,$-8
1616
* first arg.
1717
* TODO(minux): use LDP/STP here if it matters.
1818
*/
19-
SUB $128, RSP
19+
SUB $(8*24), RSP
2020
MOVD R1, (8*1)(RSP)
2121
MOVD R2, (8*2)(RSP)
2222
MOVD R19, (8*3)(RSP)
@@ -31,6 +31,14 @@ TEXT crosscall2(SB),NOSPLIT,$-8
3131
MOVD g, (8*12)(RSP)
3232
MOVD R29, (8*13)(RSP)
3333
MOVD R30, (8*14)(RSP)
34+
FMOVD F8, (8*15)(RSP)
35+
FMOVD F9, (8*16)(RSP)
36+
FMOVD F10, (8*17)(RSP)
37+
FMOVD F11, (8*18)(RSP)
38+
FMOVD F12, (8*19)(RSP)
39+
FMOVD F13, (8*20)(RSP)
40+
FMOVD F14, (8*21)(RSP)
41+
FMOVD F15, (8*22)(RSP)
3442

3543
MOVD R0, R19
3644

@@ -53,5 +61,13 @@ TEXT crosscall2(SB),NOSPLIT,$-8
5361
MOVD (8*12)(RSP), g
5462
MOVD (8*13)(RSP), R29
5563
MOVD (8*14)(RSP), R30
56-
ADD $128, RSP
64+
FMOVD (8*15)(RSP), F8
65+
FMOVD (8*16)(RSP), F9
66+
FMOVD (8*17)(RSP), F10
67+
FMOVD (8*18)(RSP), F11
68+
FMOVD (8*19)(RSP), F12
69+
FMOVD (8*20)(RSP), F13
70+
FMOVD (8*21)(RSP), F14
71+
FMOVD (8*22)(RSP), F15
72+
ADD $(8*24), RSP
5773
RET

src/runtime/rt0_darwin_arm64.s

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ TEXT _rt0_arm64_darwin(SB),NOSPLIT,$-8
1616
//
1717
// Note that all currently shipping darwin/arm64 platforms require
1818
// cgo and do not support c-shared.
19-
TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$88
19+
TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$168
2020
// Preserve callee-save registers.
2121
MOVD R19, 24(RSP)
2222
MOVD R20, 32(RSP)
@@ -27,6 +27,14 @@ TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$88
2727
MOVD R25, 72(RSP)
2828
MOVD R26, 80(RSP)
2929
MOVD R27, 88(RSP)
30+
FMOVD F8, 96(RSP)
31+
FMOVD F9, 104(RSP)
32+
FMOVD F10, 112(RSP)
33+
FMOVD F11, 120(RSP)
34+
FMOVD F12, 128(RSP)
35+
FMOVD F13, 136(RSP)
36+
FMOVD F14, 144(RSP)
37+
FMOVD F15, 152(RSP)
3038

3139
MOVD R0, _rt0_arm64_darwin_lib_argc<>(SB)
3240
MOVD R1, _rt0_arm64_darwin_lib_argv<>(SB)
@@ -51,6 +59,14 @@ TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$88
5159
MOVD 72(RSP), R25
5260
MOVD 80(RSP), R26
5361
MOVD 88(RSP), R27
62+
FMOVD 96(RSP), F8
63+
FMOVD 104(RSP), F9
64+
FMOVD 112(RSP), F10
65+
FMOVD 120(RSP), F11
66+
FMOVD 128(RSP), F12
67+
FMOVD 136(RSP), F13
68+
FMOVD 144(RSP), F14
69+
FMOVD 152(RSP), F15
5470
RET
5571

5672
TEXT _rt0_arm64_darwin_lib_go(SB),NOSPLIT,$0

src/runtime/rt0_linux_arm64.s

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ TEXT _rt0_arm64_linux(SB),NOSPLIT,$-8
1111

1212
// When building with -buildmode=c-shared, this symbol is called when the shared
1313
// library is loaded.
14-
TEXT _rt0_arm64_linux_lib(SB),NOSPLIT,$88
14+
TEXT _rt0_arm64_linux_lib(SB),NOSPLIT,$168
1515
// Preserve callee-save registers.
1616
MOVD R19, 24(RSP)
1717
MOVD R20, 32(RSP)
@@ -22,6 +22,14 @@ TEXT _rt0_arm64_linux_lib(SB),NOSPLIT,$88
2222
MOVD R25, 72(RSP)
2323
MOVD R26, 80(RSP)
2424
MOVD R27, 88(RSP)
25+
FMOVD F8, 96(RSP)
26+
FMOVD F9, 104(RSP)
27+
FMOVD F10, 112(RSP)
28+
FMOVD F11, 120(RSP)
29+
FMOVD F12, 128(RSP)
30+
FMOVD F13, 136(RSP)
31+
FMOVD F14, 144(RSP)
32+
FMOVD F15, 152(RSP)
2533

2634
MOVD R0, _rt0_arm64_linux_lib_argc<>(SB)
2735
MOVD R1, _rt0_arm64_linux_lib_argv<>(SB)
@@ -58,6 +66,14 @@ restore:
5866
MOVD 72(RSP), R25
5967
MOVD 80(RSP), R26
6068
MOVD 88(RSP), R27
69+
FMOVD 96(RSP), F8
70+
FMOVD 104(RSP), F9
71+
FMOVD 112(RSP), F10
72+
FMOVD 120(RSP), F11
73+
FMOVD 128(RSP), F12
74+
FMOVD 136(RSP), F13
75+
FMOVD 144(RSP), F14
76+
FMOVD 152(RSP), F15
6177
RET
6278

6379
TEXT _rt0_arm64_linux_lib_go(SB),NOSPLIT,$0

0 commit comments

Comments
 (0)