From d08d33f38904b182b528f7006a4635b96fd5ede0 Mon Sep 17 00:00:00 2001 From: Kai Backman Date: Thu, 10 Dec 2009 11:42:01 -0800 Subject: [PATCH] fix calling convention and make memmove restore the g and m registers. R=rsc https://golang.org/cl/166049 --- src/pkg/runtime/arm/memmove.s | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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