[patch] h8300/lib1funcs.asm: Optimize udivsi3 and umodsi3.
Kazu Hirata
kazu@cs.umass.edu
Thu Nov 13 19:46:00 GMT 2003
Hi,
Attached is a patch to optimize udivsi3 and umodsi3.
It turns out that on H8/300H and H8S, two registers are saved/restored
unnecessarily. Also, for unsigned div/mod, we don't have to worry
about the sign, so we don't have to jump to exitdiv.
Tested on h8300 port. Committed.
Kazu Hirata
2003-11-13 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/lib1funcs.asm (udivsi3): Don't save/restore
unused registers. Don't jump to exitdiv.
(umodsi3): Likewise.
Index: lib1funcs.asm
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/h8300/lib1funcs.asm,v
retrieving revision 1.21
diff -c -r1.21 lib1funcs.asm
*** lib1funcs.asm 13 Nov 2003 17:10:23 -0000 1.21
--- lib1funcs.asm 13 Nov 2003 17:24:17 -0000
***************
*** 448,474 ****
.global ___udivsi3
___udivsi3:
PUSHP S2P
PUSHP S0P
PUSHP S1P
mov.b #0,S2L ; keep sign low
bsr divmodsi4
bra exitdiv
.global ___umodsi3
___umodsi3:
PUSHP S2P
PUSHP S0P
PUSHP S1P
mov.b #0,S2L ; keep sign low
bsr divmodsi4
- #ifdef __H8300__
mov S0,A0
mov S1,A1
#else
mov.l S0P,A0P
#endif
- bra exitdiv
.global ___divsi3
___divsi3:
--- 448,487 ----
.global ___udivsi3
___udivsi3:
+ #ifdef __H8300__
PUSHP S2P
PUSHP S0P
PUSHP S1P
mov.b #0,S2L ; keep sign low
bsr divmodsi4
bra exitdiv
+ #else
+ ;; H8/300H and H8S version of divmodsi4 does not clobber S1P or S2P.
+ PUSHP S0P
+ bsr divmodsi4
+ POPP S0P
+ rts
+ #endif
.global ___umodsi3
___umodsi3:
+ #ifdef __H8300__
PUSHP S2P
PUSHP S0P
PUSHP S1P
mov.b #0,S2L ; keep sign low
bsr divmodsi4
mov S0,A0
mov S1,A1
+ bra exitdiv
#else
+ ;; H8/300H and H8S version of divmodsi4 does not clobber S1P or S2P.
+ PUSHP S0P
+ bsr divmodsi4
mov.l S0P,A0P
+ POPP S0P
+ rts
#endif
.global ___divsi3
___divsi3:
More information about the Gcc-patches
mailing list