From 1d646a5a14c1ab00a514ae249f62517076b07abf Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 23 Jun 2022 17:23:39 -0700 Subject: [PATCH] doc/go1.19: Linux race detector now requires glibc 2.17 Fixes #53522 Change-Id: Ibed838d358a733d26a6c3d89446d7fadb1012961 Reviewed-on: https://go-review.googlesource.com/c/go/+/413876 Reviewed-by: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Auto-Submit: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gopher Robot --- src/math/hypot_arm64.s | 55 +++++++++++++++++++++++++++++++++++++++++ src/math/hypot_asm.go | 3 ++- src/math/hypot_noasm.go | 3 ++- 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/math/hypot_arm64.s diff --git a/src/math/hypot_arm64.s b/src/math/hypot_arm64.s new file mode 100644 index 00000000000..1563f7b92a0 --- /dev/null +++ b/src/math/hypot_arm64.s @@ -0,0 +1,55 @@ +// Copyright 2021 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 "textflag.h" + +#define PosInf 0x7FF0000000000000 +#define NaN 0x7FF8000000000001 + +// func archHypot(p, q float64) float64 +TEXT ·archHypot(SB), NOSPLIT, $0-24 + FMOVD p+0(FP), F0 + FMOVD q+8(FP), F1 + MOVD $PosInf, R0 + FMOVD R0, F30 // F30 is PosInf + + FABSD F0, F0 + FABSD F1, F1 + FCMPD F30, F0 + BGE isInf + FCMPD F30, F1 + BGE isInf + + FCMPED F0, F0 + BNE isNaN + FCMPED F1, F1 + BNE isNaN + + FMAXD F0, F1, F2 // p is greater + FMIND F0, F1, F3 // q is less + FCMPD F2, 0.0 + BEQ IsZero // if p == 0, return 0 + + // p q + FDIVD F2, F3, F3 + FMULD F3, F3, F3 + FMOVD $1.0, F4 + FADDD F4, F3, F3 + FSQRTD F3, F3 + FMULD F3, F2, F3 + FMOVD F3, ret+16(FP) + RET + +isNaN: + MOVD $NaN, R0 + FMOVD R0, F29 // F29 is NaN + FMOVD F29, ret+16(FP) // return NaN + RET +isInf: + FMOVD F30, ret+16(FP) // return +Inf + RET +isZero: + // R0 has been set to zero + MOVD R0, ret+16(FP) // return 0 + RET diff --git a/src/math/hypot_asm.go b/src/math/hypot_asm.go index 852691037f6..b493e555b3a 100644 --- a/src/math/hypot_asm.go +++ b/src/math/hypot_asm.go @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build 386 || amd64 +//go:build 386 || amd64 || arm64 +// +build 386 amd64 arm64 package math diff --git a/src/math/hypot_noasm.go b/src/math/hypot_noasm.go index 8b64812a1c1..3a48c1cc170 100644 --- a/src/math/hypot_noasm.go +++ b/src/math/hypot_noasm.go @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !386 && !amd64 +//go:build !386 && !amd64 && !arm64 +// +build !386,!amd64,!arm64 package math