]> Cypherpunks repositories - gostls13.git/commitdiff
runtime, runtime/cgo: save callee-saved FP registers on arm64
authorShenghou Ma <minux@golang.org>
Thu, 24 Mar 2016 23:35:10 +0000 (19:35 -0400)
committerMinux Ma <minux@golang.org>
Fri, 25 Mar 2016 23:04:44 +0000 (23:04 +0000)
For #14876.

Change-Id: I0992859264cbaf9c9b691fad53345bbb01b4cf3b
Reviewed-on: https://go-review.googlesource.com/21085
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/cgo/asm_arm64.s
src/runtime/rt0_darwin_arm64.s
src/runtime/rt0_linux_arm64.s

index 64043d025013268d327bf0e8d7c73bf682329688..9c2e834c0fa6b353974a8a37297976794eed208c 100644 (file)
@@ -16,7 +16,7 @@ TEXT crosscall2(SB),NOSPLIT,$-8
         *  first arg.
         * TODO(minux): use LDP/STP here if it matters.
         */
-       SUB     $128, RSP
+       SUB     $(8*24), RSP
        MOVD    R1, (8*1)(RSP)
        MOVD    R2, (8*2)(RSP)
        MOVD    R19, (8*3)(RSP)
@@ -31,6 +31,14 @@ TEXT crosscall2(SB),NOSPLIT,$-8
        MOVD    g, (8*12)(RSP)
        MOVD    R29, (8*13)(RSP)
        MOVD    R30, (8*14)(RSP)
+       FMOVD   F8, (8*15)(RSP)
+       FMOVD   F9, (8*16)(RSP)
+       FMOVD   F10, (8*17)(RSP)
+       FMOVD   F11, (8*18)(RSP)
+       FMOVD   F12, (8*19)(RSP)
+       FMOVD   F13, (8*20)(RSP)
+       FMOVD   F14, (8*21)(RSP)
+       FMOVD   F15, (8*22)(RSP)
 
        MOVD    R0, R19
 
@@ -53,5 +61,13 @@ TEXT crosscall2(SB),NOSPLIT,$-8
        MOVD    (8*12)(RSP), g
        MOVD    (8*13)(RSP), R29
        MOVD    (8*14)(RSP), R30
-       ADD     $128, RSP
+       FMOVD   (8*15)(RSP), F8
+       FMOVD   (8*16)(RSP), F9
+       FMOVD   (8*17)(RSP), F10
+       FMOVD   (8*18)(RSP), F11
+       FMOVD   (8*19)(RSP), F12
+       FMOVD   (8*20)(RSP), F13
+       FMOVD   (8*21)(RSP), F14
+       FMOVD   (8*22)(RSP), F15
+       ADD     $(8*24), RSP
        RET
index 0a1feb14a4ca32907a02ccbd8e41d417daefaa19..f607683d2c5efcf010030c161e263ad167d80d36 100644 (file)
@@ -16,7 +16,7 @@ TEXT _rt0_arm64_darwin(SB),NOSPLIT,$-8
 //
 // Note that all currently shipping darwin/arm64 platforms require
 // cgo and do not support c-shared.
-TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$88
+TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$168
        // Preserve callee-save registers.
        MOVD R19, 24(RSP)
        MOVD R20, 32(RSP)
@@ -27,6 +27,14 @@ TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$88
        MOVD R25, 72(RSP)
        MOVD R26, 80(RSP)
        MOVD R27, 88(RSP)
+       FMOVD F8, 96(RSP)
+       FMOVD F9, 104(RSP)
+       FMOVD F10, 112(RSP)
+       FMOVD F11, 120(RSP)
+       FMOVD F12, 128(RSP)
+       FMOVD F13, 136(RSP)
+       FMOVD F14, 144(RSP)
+       FMOVD F15, 152(RSP)
 
        MOVD  R0, _rt0_arm64_darwin_lib_argc<>(SB)
        MOVD  R1, _rt0_arm64_darwin_lib_argv<>(SB)
@@ -51,6 +59,14 @@ TEXT _rt0_arm64_darwin_lib(SB),NOSPLIT,$88
        MOVD 72(RSP), R25
        MOVD 80(RSP), R26
        MOVD 88(RSP), R27
+       FMOVD 96(RSP), F8
+       FMOVD 104(RSP), F9
+       FMOVD 112(RSP), F10
+       FMOVD 120(RSP), F11
+       FMOVD 128(RSP), F12
+       FMOVD 136(RSP), F13
+       FMOVD 144(RSP), F14
+       FMOVD 152(RSP), F15
        RET
 
 TEXT _rt0_arm64_darwin_lib_go(SB),NOSPLIT,$0
index 31c2367bcaf2cf84e0fa2ae34613159e913b697e..d01d415945a8c27d766a6e06a608280fd876d8a4 100644 (file)
@@ -11,7 +11,7 @@ TEXT _rt0_arm64_linux(SB),NOSPLIT,$-8
 
 // When building with -buildmode=c-shared, this symbol is called when the shared
 // library is loaded.
-TEXT _rt0_arm64_linux_lib(SB),NOSPLIT,$88
+TEXT _rt0_arm64_linux_lib(SB),NOSPLIT,$168
        // Preserve callee-save registers.
        MOVD R19, 24(RSP)
        MOVD R20, 32(RSP)
@@ -22,6 +22,14 @@ TEXT _rt0_arm64_linux_lib(SB),NOSPLIT,$88
        MOVD R25, 72(RSP)
        MOVD R26, 80(RSP)
        MOVD R27, 88(RSP)
+       FMOVD F8, 96(RSP)
+       FMOVD F9, 104(RSP)
+       FMOVD F10, 112(RSP)
+       FMOVD F11, 120(RSP)
+       FMOVD F12, 128(RSP)
+       FMOVD F13, 136(RSP)
+       FMOVD F14, 144(RSP)
+       FMOVD F15, 152(RSP)
 
        MOVD    R0, _rt0_arm64_linux_lib_argc<>(SB)
        MOVD    R1, _rt0_arm64_linux_lib_argv<>(SB)
@@ -58,6 +66,14 @@ restore:
        MOVD 72(RSP), R25
        MOVD 80(RSP), R26
        MOVD 88(RSP), R27
+       FMOVD 96(RSP), F8
+       FMOVD 104(RSP), F9
+       FMOVD 112(RSP), F10
+       FMOVD 120(RSP), F11
+       FMOVD 128(RSP), F12
+       FMOVD 136(RSP), F13
+       FMOVD 144(RSP), F14
+       FMOVD 152(RSP), F15
        RET
 
 TEXT _rt0_arm64_linux_lib_go(SB),NOSPLIT,$0