Commit fbe4e644 by Cherry Zhang Committed by Ian Lance Taylor

runtime: use builtin memmove directly

    
    We can use the intrinsic memmove directly, without going through
    C.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/170004

	* go-gcc.cc (Gcc_backend::Gcc_backend): Define memmove builtin.

From-SVN: r271016
parent 5345ac5a
2019-05-08 Cherry Zhang <cherryyz@google.com>
* go-gcc.cc (Gcc_backend::Gcc_backend): Define memmove builtin.
2019-05-07 Cherry Zhang <cherryyz@google.com> 2019-05-07 Cherry Zhang <cherryyz@google.com>
* lang.opt (-fgo-debug-optimization): New option. * lang.opt (-fgo-debug-optimization): New option.
......
...@@ -604,6 +604,15 @@ Gcc_backend::Gcc_backend() ...@@ -604,6 +604,15 @@ Gcc_backend::Gcc_backend()
NULL_TREE), NULL_TREE),
false, false); 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. // Used by runtime/internal/sys.
this->define_builtin(BUILT_IN_CTZ, "__builtin_ctz", "ctz", this->define_builtin(BUILT_IN_CTZ, "__builtin_ctz", "ctz",
build_function_type_list(integer_type_node, build_function_type_list(integer_type_node,
......
0b4cf8ded107ccbfbd4af7f4e056f23f941d0f86 3a9bccfbf4af1c756978c40967838d9f6a4e7a62
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -461,7 +461,6 @@ runtime_files = \ ...@@ -461,7 +461,6 @@ runtime_files = \
runtime/go-memclr.c \ runtime/go-memclr.c \
runtime/go-memcmp.c \ runtime/go-memcmp.c \
runtime/go-memequal.c \ runtime/go-memequal.c \
runtime/go-memmove.c \
runtime/go-nanotime.c \ runtime/go-nanotime.c \
runtime/go-now.c \ runtime/go-now.c \
runtime/go-nosys.c \ runtime/go-nosys.c \
......
...@@ -245,16 +245,15 @@ am__objects_3 = runtime/aeshash.lo runtime/go-assert.lo \ ...@@ -245,16 +245,15 @@ am__objects_3 = runtime/aeshash.lo runtime/go-assert.lo \
runtime/go-ffi.lo runtime/go-fieldtrack.lo \ runtime/go-ffi.lo runtime/go-fieldtrack.lo \
runtime/go-matherr.lo runtime/go-memclr.lo \ runtime/go-matherr.lo runtime/go-memclr.lo \
runtime/go-memcmp.lo runtime/go-memequal.lo \ runtime/go-memcmp.lo runtime/go-memequal.lo \
runtime/go-memmove.lo runtime/go-nanotime.lo runtime/go-now.lo \ runtime/go-nanotime.lo runtime/go-now.lo runtime/go-nosys.lo \
runtime/go-nosys.lo runtime/go-reflect-call.lo \ runtime/go-reflect-call.lo runtime/go-runtime-error.lo \
runtime/go-runtime-error.lo runtime/go-setenv.lo \ runtime/go-setenv.lo runtime/go-signal.lo \
runtime/go-signal.lo runtime/go-strslice.lo \ runtime/go-strslice.lo runtime/go-typedesc-equal.lo \
runtime/go-typedesc-equal.lo runtime/go-unsafe-pointer.lo \ runtime/go-unsafe-pointer.lo runtime/go-unsetenv.lo \
runtime/go-unsetenv.lo runtime/go-unwind.lo \ runtime/go-unwind.lo runtime/go-varargs.lo \
runtime/go-varargs.lo runtime/env_posix.lo runtime/panic.lo \ runtime/env_posix.lo runtime/panic.lo runtime/print.lo \
runtime/print.lo runtime/proc.lo runtime/runtime_c.lo \ runtime/proc.lo runtime/runtime_c.lo runtime/stack.lo \
runtime/stack.lo runtime/yield.lo $(am__objects_1) \ runtime/yield.lo $(am__objects_1) $(am__objects_2)
$(am__objects_2)
am_libgo_llgo_la_OBJECTS = $(am__objects_3) am_libgo_llgo_la_OBJECTS = $(am__objects_3)
libgo_llgo_la_OBJECTS = $(am_libgo_llgo_la_OBJECTS) libgo_llgo_la_OBJECTS = $(am_libgo_llgo_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@) AM_V_lt = $(am__v_lt_@AM_V@)
...@@ -882,7 +881,6 @@ runtime_files = \ ...@@ -882,7 +881,6 @@ runtime_files = \
runtime/go-memclr.c \ runtime/go-memclr.c \
runtime/go-memcmp.c \ runtime/go-memcmp.c \
runtime/go-memequal.c \ runtime/go-memequal.c \
runtime/go-memmove.c \
runtime/go-nanotime.c \ runtime/go-nanotime.c \
runtime/go-now.c \ runtime/go-now.c \
runtime/go-nosys.c \ runtime/go-nosys.c \
...@@ -1337,8 +1335,6 @@ runtime/go-memcmp.lo: runtime/$(am__dirstamp) \ ...@@ -1337,8 +1335,6 @@ runtime/go-memcmp.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(am__dirstamp) runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-memequal.lo: runtime/$(am__dirstamp) \ runtime/go-memequal.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(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/go-nanotime.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(am__dirstamp) runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-now.lo: runtime/$(am__dirstamp) \ runtime/go-now.lo: runtime/$(am__dirstamp) \
...@@ -1431,7 +1427,6 @@ distclean-compile: ...@@ -1431,7 +1427,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memclr.Plo@am__quote@ @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-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-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-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-nosys.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-now.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-now.Plo@am__quote@
......
...@@ -100,6 +100,7 @@ func reflect_memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) { ...@@ -100,6 +100,7 @@ func reflect_memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) {
// memmove copies n bytes from "from" to "to". // memmove copies n bytes from "from" to "to".
//go:noescape //go:noescape
//extern __builtin_memmove
func memmove(to, from unsafe.Pointer, n uintptr) func memmove(to, from unsafe.Pointer, n uintptr)
//go:linkname reflect_memmove reflect.memmove //go:linkname reflect_memmove reflect.memmove
......
/* 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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment