diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2003-11-15 21:36:49 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2003-11-15 21:36:49 +0000 |
commit | e40024ffaf03922f1f0cd4fe8e2fb78b7ed2179f (patch) | |
tree | 18f9de3ab8f0914c628ec5d3d8a2fb43ae406345 | |
parent | 4cd0866d1da8f571a85bf01428912533ca145b1c (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/h8300/lib1funcs.asm | 20 |
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 |