diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-12-01 18:59:18 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-12-03 08:21:02 -0800 |
commit | cd34d5f2c40f3c65407f4b0bee0b49fc84e4a4ab (patch) | |
tree | 843df1c1321bbc66e1bee850fa8513c54dd25dc8 /libgo | |
parent | 65af6bc9f87bc6b329fb7a16e3f736dd0a042bf5 (diff) | |
download | gcc-cd34d5f2c40f3c65407f4b0bee0b49fc84e4a4ab.zip gcc-cd34d5f2c40f3c65407f4b0bee0b49fc84e4a4ab.tar.gz gcc-cd34d5f2c40f3c65407f4b0bee0b49fc84e4a4ab.tar.bz2 |
compiler: defer to middle-end for complex division
Go used to use slightly different semantics than C99 for complex division,
so we used runtime routines to handle the different. The gc compiler
has changes its behavior to match C99, so changes ours as well.
For golang/go#14644
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/274213
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/Makefile.am | 1 | ||||
-rw-r--r-- | libgo/Makefile.in | 15 | ||||
-rw-r--r-- | libgo/runtime/go-cdiv.c | 49 |
3 files changed, 5 insertions, 60 deletions
diff --git a/libgo/Makefile.am b/libgo/Makefile.am index f7a163e..4d3e54e 100644 --- a/libgo/Makefile.am +++ b/libgo/Makefile.am @@ -439,7 +439,6 @@ runtime_files = \ runtime/go-assert.c \ runtime/go-caller.c \ runtime/go-callers.c \ - runtime/go-cdiv.c \ runtime/go-cgo.c \ runtime/go-construct-map.c \ runtime/go-ffi.c \ diff --git a/libgo/Makefile.in b/libgo/Makefile.in index ba202a6..d6ac066 100644 --- a/libgo/Makefile.in +++ b/libgo/Makefile.in @@ -240,12 +240,11 @@ am__objects_2 = $(am__objects_1) @LIBGO_IS_RTEMS_TRUE@am__objects_3 = \ @LIBGO_IS_RTEMS_TRUE@ runtime/rtems-task-variable-add.lo am__objects_4 = runtime/aeshash.lo runtime/go-assert.lo \ - runtime/go-caller.lo runtime/go-callers.lo runtime/go-cdiv.lo \ - runtime/go-cgo.lo runtime/go-construct-map.lo \ - runtime/go-ffi.lo runtime/go-fieldtrack.lo \ - runtime/go-matherr.lo runtime/go-memclr.lo \ - runtime/go-memequal.lo runtime/go-nanotime.lo \ - runtime/go-now.lo runtime/go-nosys.lo \ + runtime/go-caller.lo runtime/go-callers.lo runtime/go-cgo.lo \ + runtime/go-construct-map.lo runtime/go-ffi.lo \ + runtime/go-fieldtrack.lo runtime/go-matherr.lo \ + runtime/go-memclr.lo runtime/go-memequal.lo \ + runtime/go-nanotime.lo runtime/go-now.lo runtime/go-nosys.lo \ runtime/go-reflect-call.lo runtime/go-setenv.lo \ runtime/go-signal.lo runtime/go-unsafe-pointer.lo \ runtime/go-unsetenv.lo runtime/go-unwind.lo \ @@ -892,7 +891,6 @@ runtime_files = \ runtime/go-assert.c \ runtime/go-caller.c \ runtime/go-callers.c \ - runtime/go-cdiv.c \ runtime/go-cgo.c \ runtime/go-construct-map.c \ runtime/go-ffi.c \ @@ -1343,8 +1341,6 @@ runtime/go-caller.lo: runtime/$(am__dirstamp) \ runtime/$(DEPDIR)/$(am__dirstamp) runtime/go-callers.lo: runtime/$(am__dirstamp) \ runtime/$(DEPDIR)/$(am__dirstamp) -runtime/go-cdiv.lo: runtime/$(am__dirstamp) \ - runtime/$(DEPDIR)/$(am__dirstamp) runtime/go-cgo.lo: runtime/$(am__dirstamp) \ runtime/$(DEPDIR)/$(am__dirstamp) runtime/go-construct-map.lo: runtime/$(am__dirstamp) \ @@ -1417,7 +1413,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-assert.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-caller.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-callers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-cdiv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-cgo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-construct-map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-context.Plo@am__quote@ diff --git a/libgo/runtime/go-cdiv.c b/libgo/runtime/go-cdiv.c deleted file mode 100644 index 0355e26..0000000 --- a/libgo/runtime/go-cdiv.c +++ /dev/null @@ -1,49 +0,0 @@ -/* go-cdiv.c -- complex division routines - - Copyright 2013 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 <complex.h> -#include <math.h> - -/* Calls to these functions are generated by the Go frontend for - division of complex64 or complex128. We use these because Go's - complex division expects slightly different results from the GCC - default. When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but - GCC generates NaN+Infi. NaN+Infi seems wrong seems the rules of - C99 Annex G specify that if either side of a complex number is Inf, - the the whole number is Inf, but an operation involving NaN ought - to result in NaN, not Inf. */ - -complex float -__go_complex64_div (complex float a, complex float b) -{ - if (__builtin_expect (b == 0, 0)) - { - if (!isinf (crealf (a)) - && !isinf (cimagf (a)) - && (isnan (crealf (a)) || isnan (cimagf (a)))) - { - /* Pass "1" to nanf to match math/bits.go. */ - return nanf("1") + nanf("1")*I; - } - } - return a / b; -} - -complex double -__go_complex128_div (complex double a, complex double b) -{ - if (__builtin_expect (b == 0, 0)) - { - if (!isinf (creal (a)) - && !isinf (cimag (a)) - && (isnan (creal (a)) || isnan (cimag (a)))) - { - /* Pass "1" to nan to match math/bits.go. */ - return nan("1") + nan("1")*I; - } - } - return a / b; -} |