runtime: use builtin memmove directly
We can use the intrinsic memmove directly, without going through
C.
Corresponding GCC backend change:
Index: gcc/go/go-gcc.cc
===================================================================
--- gcc/go/go-gcc.cc (revision 269825)
+++ gcc/go/go-gcc.cc (working copy)
@@ -604,6 +604,15 @@
NULL_TREE),
false, false);
+ // We use __builtin_memmove for copying data.
+ this->define_builtin(BUILT_IN_MEMMOVE, "__builtin_memmove", "memmove",
+ build_function_type_list(void_type_node,
+ ptr_type_node,
+ const_ptr_type_node,
+ size_type_node,
+ NULL_TREE),
+ false, false);
+
// Used by runtime/internal/sys.
this->define_builtin(BUILT_IN_CTZ, "__builtin_ctz", "ctz",
build_function_type_list(integer_type_node,
Change-Id: Idaccf0a85da1d176555f1bfb11e849706d619bd1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/170004
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 1201cf5..ebbdee8 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -461,7 +461,6 @@
runtime/go-memclr.c \
runtime/go-memcmp.c \
runtime/go-memequal.c \
- runtime/go-memmove.c \
runtime/go-nanotime.c \
runtime/go-now.c \
runtime/go-nosys.c \
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 346683b..737b01e 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -245,16 +245,15 @@
runtime/go-ffi.lo runtime/go-fieldtrack.lo \
runtime/go-matherr.lo runtime/go-memclr.lo \
runtime/go-memcmp.lo runtime/go-memequal.lo \
- runtime/go-memmove.lo runtime/go-nanotime.lo runtime/go-now.lo \
- runtime/go-nosys.lo runtime/go-reflect-call.lo \
- runtime/go-runtime-error.lo runtime/go-setenv.lo \
- runtime/go-signal.lo runtime/go-strslice.lo \
- runtime/go-typedesc-equal.lo runtime/go-unsafe-pointer.lo \
- runtime/go-unsetenv.lo runtime/go-unwind.lo \
- runtime/go-varargs.lo runtime/env_posix.lo runtime/panic.lo \
- runtime/print.lo runtime/proc.lo runtime/runtime_c.lo \
- runtime/stack.lo runtime/yield.lo $(am__objects_1) \
- $(am__objects_2)
+ runtime/go-nanotime.lo runtime/go-now.lo runtime/go-nosys.lo \
+ runtime/go-reflect-call.lo runtime/go-runtime-error.lo \
+ runtime/go-setenv.lo runtime/go-signal.lo \
+ runtime/go-strslice.lo runtime/go-typedesc-equal.lo \
+ runtime/go-unsafe-pointer.lo runtime/go-unsetenv.lo \
+ runtime/go-unwind.lo runtime/go-varargs.lo \
+ runtime/env_posix.lo runtime/panic.lo runtime/print.lo \
+ runtime/proc.lo runtime/runtime_c.lo runtime/stack.lo \
+ runtime/yield.lo $(am__objects_1) $(am__objects_2)
am_libgo_llgo_la_OBJECTS = $(am__objects_3)
libgo_llgo_la_OBJECTS = $(am_libgo_llgo_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -882,7 +881,6 @@
runtime/go-memclr.c \
runtime/go-memcmp.c \
runtime/go-memequal.c \
- runtime/go-memmove.c \
runtime/go-nanotime.c \
runtime/go-now.c \
runtime/go-nosys.c \
@@ -1337,8 +1335,6 @@
runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-memequal.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(am__dirstamp)
-runtime/go-memmove.lo: runtime/$(am__dirstamp) \
- runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-nanotime.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-now.lo: runtime/$(am__dirstamp) \
@@ -1431,7 +1427,6 @@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memclr.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memcmp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memequal.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memmove.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-nanotime.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-nosys.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-now.Plo@am__quote@
diff --git a/libgo/go/runtime/stubs.go b/libgo/go/runtime/stubs.go
index dfdb38e..435cdf7 100644
--- a/libgo/go/runtime/stubs.go
+++ b/libgo/go/runtime/stubs.go
@@ -100,6 +100,7 @@
// memmove copies n bytes from "from" to "to".
//go:noescape
+//extern __builtin_memmove
func memmove(to, from unsafe.Pointer, n uintptr)
//go:linkname reflect_memmove reflect.memmove
diff --git a/libgo/runtime/go-memmove.c b/libgo/runtime/go-memmove.c
deleted file mode 100644
index a6fda08..0000000
--- a/libgo/runtime/go-memmove.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* go-memmove.c -- move one memory buffer to another
-
- Copyright 2016 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file. */
-
-#include "runtime.h"
-
-void move(void *, void *, uintptr)
- __asm__ (GOSYM_PREFIX "runtime.memmove");
-
-void
-move (void *p1, void *p2, uintptr len)
-{
- __builtin_memmove (p1, p2, len);
-}