summaryrefslogtreecommitdiff
path: root/sysdeps/sparc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-12-15 14:06:07 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-12-15 14:06:07 +0000
commit174edbde7e4eb056cc273127e045404067682b57 (patch)
tree0b424a7ecc0429cf7b1e1969b5e2c1189b0d995a /sysdeps/sparc
parent1e36806fb8589050350ececfade454c13f75e5aa (diff)
Update SPARC divrem generation to match output.
While working on another patch I noticed that (a) sysdeps/sparc/sparc32/Makefile is the only place with special realclean settings, apart from po/, and (b) the generated files with a rule in that Makefile to generate them (using m4) had been patched manually so no longer corresponded with the output of the generator - so if the timestamps were wrong, a build would result in changes to the files in the source directory. (They also didn't correspond because of changes in make 3.81 to how make handles whitespace at the start of a line in a sequence of backslash-newline continuation lines within a recipe.) This patch fixes the generation and output files to match. The issue with make and whitespace at start of continuation lines is fixed by putting those newlines outside of arguments to echo, so the number of spaces in the argument matches the number in the existing generated files. Then divrem.m4 is changed to avoid generating whitespace-only lines (my fix to the outputs from 2013; this fix to the generator also changes the indentation of a label in the output files) and to generate an alias in udiv.S (Adhemerval's fix from March). build-many-glibcs.py doesn't have a non-v9 SPARC configuration, because non-v9 32-bit SPARC didn't build when I set up build-many-glibcs.py but sparcv9 did build. Whether or not non-v9 32-bit SPARC now builds (or indeed whether or not support for it is obsolete), I tested by removing the sparcv8 and sparcv9 versions of the four files in question, so forcing the generated files to be built and used, and the compilation parts of the glibc testsuite passed. * sysdeps/sparc/sparc32/Makefile ($(divrem:%=$(sysdep_dir)/sparc/sparc32/%.S)): Do not include start-of-line whitespace in argument of echo. * sysdeps/sparc/sparc32/divrem.m4: Avoid generating lines starting with whitespace. Generate __wrap_.udiv alias. * sysdeps/sparc/sparc32/rem.S: Regenerated. * sysdeps/sparc/sparc32/sdiv.S: Likewise. * sysdeps/sparc/sparc32/udiv.S: Likewise. * sysdeps/sparc/sparc32/urem.S: Likewise.
Diffstat (limited to 'sysdeps/sparc')
-rw-r--r--sysdeps/sparc/sparc32/Makefile8
-rw-r--r--sysdeps/sparc/sparc32/divrem.m48
-rw-r--r--sysdeps/sparc/sparc32/rem.S2
-rw-r--r--sysdeps/sparc/sparc32/sdiv.S2
-rw-r--r--sysdeps/sparc/sparc32/udiv.S2
-rw-r--r--sysdeps/sparc/sparc32/urem.S2
6 files changed, 13 insertions, 11 deletions
diff --git a/sysdeps/sparc/sparc32/Makefile b/sysdeps/sparc/sparc32/Makefile
index 14d6e03c6f..eb0438ae50 100644
--- a/sysdeps/sparc/sparc32/Makefile
+++ b/sysdeps/sparc/sparc32/Makefile
@@ -37,10 +37,10 @@ divrem := sdiv udiv rem urem
+divrem-S-udiv := false
+divrem-S-urem := false
$(divrem:%=$(sysdep_dir)/sparc/sparc32/%.S): $(sysdep_dir)/sparc/sparc32/divrem.m4
- (echo "define(NAME,\`.$(+divrem-NAME)')\
- define(OP,\`$(+divrem-OP-$(+divrem-NAME))')\
- define(S,\`$(+divrem-S-$(+divrem-NAME))')\
- /* This file is generated from divrem.m4; DO NOT EDIT! */"; \
+ (echo -n "define(NAME,\`.$(+divrem-NAME)')"; \
+ echo -n " define(OP,\`$(+divrem-OP-$(+divrem-NAME))')"; \
+ echo -n " define(S,\`$(+divrem-S-$(+divrem-NAME))')"; \
+ echo " /* This file is generated from divrem.m4; DO NOT EDIT! */"; \
cat $<) | $(M4) > $@-tmp
# Make it unwritable so noone will edit it by mistake.
-chmod a-w $@-tmp
diff --git a/sysdeps/sparc/sparc32/divrem.m4 b/sysdeps/sparc/sparc32/divrem.m4
index 30d532ad77..c08c530020 100644
--- a/sysdeps/sparc/sparc32/divrem.m4
+++ b/sysdeps/sparc/sparc32/divrem.m4
@@ -72,15 +72,15 @@ define(DEVELOP_QUOTIENT_BITS,
ifelse($1, N,
` b 9f
add Q, ($2*2+1), Q
- ', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2+1)')')
+', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2+1)')')
LOC($1.eval(2**N+$2)):
! remainder is negative
addcc R,V,R
ifelse($1, N,
` b 9f
add Q, ($2*2-1), Q
- ', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2-1)')')
- ifelse($1, 1, `9:')')dnl
+', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2-1)')')
+ifelse($1, 1, `9:')')dnl
#include <sysdep.h>
#include <sys/trap.h>
@@ -230,3 +230,5 @@ ifelse(S, `true',
ifelse(OP, `div', `mov Q, %o0', `mov R, %o0')
END(NAME)
+ifelse(OP, `div', ifelse(S, `false', `strong_alias (.udiv, __wrap_.udiv)
+'))dnl
diff --git a/sysdeps/sparc/sparc32/rem.S b/sysdeps/sparc/sparc32/rem.S
index 349d7c0115..79e09a9ef8 100644
--- a/sysdeps/sparc/sparc32/rem.S
+++ b/sysdeps/sparc/sparc32/rem.S
@@ -341,7 +341,7 @@ LOC(4.9):
- 9:
+9:
LOC(end_regular_divide):
subcc %o4, 1, %o4
bge LOC(divloop)
diff --git a/sysdeps/sparc/sparc32/sdiv.S b/sysdeps/sparc/sparc32/sdiv.S
index d1d4ee31f8..ab29718827 100644
--- a/sysdeps/sparc/sparc32/sdiv.S
+++ b/sysdeps/sparc/sparc32/sdiv.S
@@ -341,7 +341,7 @@ LOC(4.9):
- 9:
+9:
LOC(end_regular_divide):
subcc %o4, 1, %o4
bge LOC(divloop)
diff --git a/sysdeps/sparc/sparc32/udiv.S b/sysdeps/sparc/sparc32/udiv.S
index ade0afdf40..1db6796431 100644
--- a/sysdeps/sparc/sparc32/udiv.S
+++ b/sysdeps/sparc/sparc32/udiv.S
@@ -328,7 +328,7 @@ LOC(4.9):
- 9:
+9:
LOC(end_regular_divide):
subcc %o4, 1, %o4
bge LOC(divloop)
diff --git a/sysdeps/sparc/sparc32/urem.S b/sysdeps/sparc/sparc32/urem.S
index d3a1a441fd..83fb4c242e 100644
--- a/sysdeps/sparc/sparc32/urem.S
+++ b/sysdeps/sparc/sparc32/urem.S
@@ -328,7 +328,7 @@ LOC(4.9):
- 9:
+9:
LOC(end_regular_divide):
subcc %o4, 1, %o4
bge LOC(divloop)