From: Kai Backman Date: Thu, 10 Dec 2009 19:42:01 +0000 (-0800) Subject: fix calling convention and make memmove restore the g and m X-Git-Tag: weekly.2009-12-22~103 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d08d33f38904b182b528f7006a4635b96fd5ede0;p=gostls13.git fix calling convention and make memmove restore the g and m registers. R=rsc https://golang.org/cl/166049 --- diff --git a/src/pkg/runtime/arm/memmove.s b/src/pkg/runtime/arm/memmove.s index bf172680c1..9f7dc1dd2c 100644 --- a/src/pkg/runtime/arm/memmove.s +++ b/src/pkg/runtime/arm/memmove.s @@ -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