]> Cypherpunks repositories - gostls13.git/commitdiff
fix calling convention and make memmove restore the g and m
authorKai Backman <kaib@golang.org>
Thu, 10 Dec 2009 19:42:01 +0000 (11:42 -0800)
committerKai Backman <kaib@golang.org>
Thu, 10 Dec 2009 19:42:01 +0000 (11:42 -0800)
registers.

R=rsc
https://golang.org/cl/166049

src/pkg/runtime/arm/memmove.s

index bf172680c1c207f0747e9c8e1e4fbf6e4418ee02..9f7dc1dd2c3a4983a8440b2cc410e8561c7a40da 100644 (file)
@@ -30,9 +30,14 @@ N = 3
 TMP = 3                                        /* N and TMP don't overlap */
 TMP1 = 4
 
-TEXT memmove(SB), 7, $-4
+// TODO(kaib): This can be done with the existing registers of LR is re-used. Same for memset.
+TEXT memmove(SB), 7, $8
+       // save g and m
+       MOVW    R9, 4(R13)
+       MOVW    R10, 8(R13)
+
 _memmove:
-       MOVW    R(TS), to+0(FP)         /* need to save for return value */
+       MOVW    to+0(FP), R(TS)
        MOVW    from+4(FP), R(FROM)
        MOVW    n+8(FP), R(N)
 
@@ -129,6 +134,9 @@ _f1tail:
        B       _f1tail
 
 _return:
+       // restore g and m
+       MOVW    4(R13), R9
+       MOVW    8(R13), R10
        MOVW    to+0(FP), R0
        RET