[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