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>
4 files changed