diff --git a/internal/buffer/runtime.go b/internal/buffer/runtime.go index 672c8a1..c0806fb 100644 --- a/internal/buffer/runtime.go +++ b/internal/buffer/runtime.go @@ -19,6 +19,8 @@ import "unsafe" //go:noescape // Zero the n bytes starting at p. +// +// REQUIRES: the region does not contain any Go pointers. func memclr(p unsafe.Pointer, n uintptr) //go:noescape diff --git a/internal/buffer/runtime_go1.8.s b/internal/buffer/runtime_go1.8.s new file mode 100644 index 0000000..201a511 --- /dev/null +++ b/internal/buffer/runtime_go1.8.s @@ -0,0 +1,37 @@ +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build amd64 arm64 ppc64 ppc64le +// +build go1.8 + +// Assembly code isn't subject to visibility restrictions, so we can jump +// directly into package runtime. +// +// Technique copied from here: +// https://github.com/golang/go/blob/d8c6dac/src/os/signal/sig.s + +#include "textflag.h" + +#ifdef GOARCH_ppc64 +#define JMP BR +#endif +#ifdef GOARCH_ppc64le +#define JMP BR +#endif + +TEXT ·memclr(SB),NOSPLIT,$0-16 + JMP runtime·memclrNoHeapPointers(SB) + +TEXT ·memmove(SB),NOSPLIT,$0-24 + JMP runtime·memmove(SB) diff --git a/internal/buffer/runtime.s b/internal/buffer/runtime_other.s similarity index 98% rename from internal/buffer/runtime.s rename to internal/buffer/runtime_other.s index f39415a..139cc65 100644 --- a/internal/buffer/runtime.s +++ b/internal/buffer/runtime_other.s @@ -13,6 +13,7 @@ // limitations under the License. // +build amd64 arm64 ppc64 ppc64le +// +build !go1.8 // Assembly code isn't subject to visibility restrictions, so we can jump // directly into package runtime.