aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2003-11-15 21:36:49 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2003-11-15 21:36:49 +0000
commite40024ffaf03922f1f0cd4fe8e2fb78b7ed2179f (patch)
tree18f9de3ab8f0914c628ec5d3d8a2fb43ae406345
parent4cd0866d1da8f571a85bf01428912533ca145b1c (diff)
downloadgcc-e40024ffaf03922f1f0cd4fe8e2fb78b7ed2179f.zip
gcc-e40024ffaf03922f1f0cd4fe8e2fb78b7ed2179f.tar.gz
gcc-e40024ffaf03922f1f0cd4fe8e2fb78b7ed2179f.tar.bz2
lib1funcs.asm (divnorm): Store the sign in bit 3 of S2L.
* config/h8300/lib1funcs.asm (divnorm): Store the sign in bit 3 of S2L. (modnorm): Likewise. (exitdiv): Look at bit 3 of S2L only. From-SVN: r73635
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/h8300/lib1funcs.asm20
2 files changed, 14 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e6937a6..161f2ba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2003-11-15 Kazu Hirata <kazu@cs.umass.edu>
+ * config/h8300/lib1funcs.asm (divnorm): Store the sign in bit
+ 3 of S2L.
+ (modnorm): Likewise.
+ (exitdiv): Look at bit 3 of S2L only.
+
+2003-11-15 Kazu Hirata <kazu@cs.umass.edu>
+
* config/h8300/h8300.h (DO_GLOBAL_CTORS_BODY): Fix warnings.
(DO_GLOBAL_DTORS_BODY): Likewise.
diff --git a/gcc/config/h8300/lib1funcs.asm b/gcc/config/h8300/lib1funcs.asm
index 744d402..381b764 100644
--- a/gcc/config/h8300/lib1funcs.asm
+++ b/gcc/config/h8300/lib1funcs.asm
@@ -323,8 +323,8 @@ setbit: inc A0L ; do insert bit
#ifdef __H8300__
divnorm:
- mov.b #0,S2L ; keep the sign in S2
mov.b A0H,A0H ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
bge postive
; negate arg
@@ -337,8 +337,6 @@ divnorm:
addx #0,A1H
addx #0,A0L
addx #0,A0H
-
- mov.b #1,S2L ; the sign will be -ve
postive:
mov.b A2H,A2H ; is the denominator -ve
bge postive2
@@ -350,15 +348,15 @@ postive:
addx #0,A3H
addx #0,A2L
addx #0,A2H
- xor #1,S2L ; toggle result sign
+ xor.b #0x08,S2L ; toggle the result sign
postive2:
rts
;; Basically the same, except that the sign of the divisor determines
;; the sign.
modnorm:
- mov.b #0,S2L ; keep the sign in S2
mov.b A0H,A0H ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
bge mpostive
; negate arg
@@ -371,8 +369,6 @@ modnorm:
addx #0,A1H
addx #0,A0L
addx #0,A0H
-
- mov.b #1,S2L ; the sign will be -ve
mpostive:
mov.b A2H,A2H ; is the denominator -ve
bge mpostive2
@@ -390,19 +386,18 @@ mpostive2:
#else /* __H8300H__ */
divnorm:
- mov.b #0,S2L ; keep the sign in S2
mov.l A0P,A0P ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
bge postive
neg.l A0P ; negate arg
- mov.b #1,S2L ; the sign will be -ve
postive:
mov.l A1P,A1P ; is the denominator -ve
bge postive2
neg.l A1P ; negate arg
- xor.b #1,S2L ; toggle result sign
+ xor.b #0x08,S2L ; toggle the result sign
postive2:
rts
@@ -410,12 +405,11 @@ postive2:
;; Basically the same, except that the sign of the divisor determines
;; the sign.
modnorm:
- mov.b #0,S2L ; keep the sign in S2
mov.l A0P,A0P ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
bge mpostive
neg.l A0P ; negate arg
- mov.b #1,S2L ; the sign will be -ve
mpostive:
mov.l A1P,A1P ; is the denominator -ve
@@ -493,7 +487,7 @@ ___divsi3:
; examine what the sign should be
exitdiv:
- or S2L,S2L
+ btst #3,S2L
beq reti
; should be -ve