Commit 2b92d5c6 by Ian Lance Taylor

compiler: use builtin memcmp directly

    
    Instead of going through a C function __go_memcmp, we can just
    use __builtin_memcmp directly. This allows more optimizations in
    the compiler backend.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183537

From-SVN: r272620
parent 1e3d475e
1232eef628227ef855c5fa6d94b31778b2e74a85 338e4baf88a4ae676205dff601dbef2d31b19d2d
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.
...@@ -6199,7 +6199,8 @@ Binary_expression::lower_compare_to_memcmp(Gogo*, Statement_inserter* inserter) ...@@ -6199,7 +6199,8 @@ Binary_expression::lower_compare_to_memcmp(Gogo*, Statement_inserter* inserter)
TYPE_INFO_SIZE); TYPE_INFO_SIZE);
Expression* call = Runtime::make_call(Runtime::MEMCMP, loc, 3, a1, a2, len); Expression* call = Runtime::make_call(Runtime::MEMCMP, loc, 3, a1, a2, len);
Expression* zero = Expression::make_integer_ul(0, NULL, loc); Type* int32_type = Type::lookup_integer_type("int32");
Expression* zero = Expression::make_integer_ul(0, int32_type, loc);
return Expression::make_binary(this->op_, call, zero, loc); return Expression::make_binary(this->op_, call, zero, loc);
} }
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
// result types. // result types.
// The standard C memcmp function, used for struct comparisons. // The standard C memcmp function, used for struct comparisons.
DEF_GO_RUNTIME(MEMCMP, "__go_memcmp", P3(POINTER, POINTER, UINTPTR), R1(INT)) DEF_GO_RUNTIME(MEMCMP, "__builtin_memcmp", P3(POINTER, POINTER, UINTPTR), R1(INT32))
// Decode a non-ASCII rune from a string. // Decode a non-ASCII rune from a string.
DEF_GO_RUNTIME(DECODERUNE, "runtime.decoderune", P2(STRING, INT), DEF_GO_RUNTIME(DECODERUNE, "runtime.decoderune", P2(STRING, INT),
......
...@@ -459,7 +459,6 @@ runtime_files = \ ...@@ -459,7 +459,6 @@ runtime_files = \
runtime/go-fieldtrack.c \ runtime/go-fieldtrack.c \
runtime/go-matherr.c \ runtime/go-matherr.c \
runtime/go-memclr.c \ runtime/go-memclr.c \
runtime/go-memcmp.c \
runtime/go-memequal.c \ runtime/go-memequal.c \
runtime/go-nanotime.c \ runtime/go-nanotime.c \
runtime/go-now.c \ runtime/go-now.c \
......
...@@ -244,8 +244,8 @@ am__objects_3 = runtime/aeshash.lo runtime/go-assert.lo \ ...@@ -244,8 +244,8 @@ am__objects_3 = runtime/aeshash.lo runtime/go-assert.lo \
runtime/go-cgo.lo runtime/go-construct-map.lo \ runtime/go-cgo.lo runtime/go-construct-map.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-memequal.lo runtime/go-nanotime.lo \
runtime/go-nanotime.lo runtime/go-now.lo runtime/go-nosys.lo \ runtime/go-now.lo runtime/go-nosys.lo \
runtime/go-reflect-call.lo runtime/go-runtime-error.lo \ runtime/go-reflect-call.lo runtime/go-runtime-error.lo \
runtime/go-setenv.lo runtime/go-signal.lo \ runtime/go-setenv.lo runtime/go-signal.lo \
runtime/go-unsafe-pointer.lo runtime/go-unsetenv.lo \ runtime/go-unsafe-pointer.lo runtime/go-unsetenv.lo \
...@@ -892,7 +892,6 @@ runtime_files = \ ...@@ -892,7 +892,6 @@ runtime_files = \
runtime/go-fieldtrack.c \ runtime/go-fieldtrack.c \
runtime/go-matherr.c \ runtime/go-matherr.c \
runtime/go-memclr.c \ runtime/go-memclr.c \
runtime/go-memcmp.c \
runtime/go-memequal.c \ runtime/go-memequal.c \
runtime/go-nanotime.c \ runtime/go-nanotime.c \
runtime/go-now.c \ runtime/go-now.c \
...@@ -1343,8 +1342,6 @@ runtime/go-matherr.lo: runtime/$(am__dirstamp) \ ...@@ -1343,8 +1342,6 @@ runtime/go-matherr.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(am__dirstamp) runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-memclr.lo: runtime/$(am__dirstamp) \ runtime/go-memclr.lo: runtime/$(am__dirstamp) \
runtime/$(DEPDIR)/$(am__dirstamp) runtime/$(DEPDIR)/$(am__dirstamp)
runtime/go-memcmp.lo: runtime/$(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-nanotime.lo: runtime/$(am__dirstamp) \ runtime/go-nanotime.lo: runtime/$(am__dirstamp) \
...@@ -1436,7 +1433,6 @@ distclean-compile: ...@@ -1436,7 +1433,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-fieldtrack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-fieldtrack.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-matherr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-matherr.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-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-memequal.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@
......
/* go-memcmp.c -- the go memory comparison function.
Copyright 2012 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"
intgo
__go_memcmp (const void *p1, const void *p2, uintptr len)
{
return __builtin_memcmp (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