config/m68k/lb1sf68.asm (udivsi3): Change jmi to jcs. Fix comments.

Jim Wilson wilson@cygnus.com
Mon Mar 1 15:11:00 GMT 1999


I have installed this patch.

This fixes some coldfire bugs found by PlumHall testing.
udivsi3/umodsi3 failed if the divisor had the most significant bit set.
An invalid addressing mode using an HImode index reg could be generated in
some cases.

Mon Mar  1 15:03:51 1999  Jim Wilson  <wilson@cygnus.com>

	* config/m68k/lb1sf68.asm (udivsi3): Change jmi to jcs.  Fix comments.
	* config/m68k/m68k.h (LEGITIMATE_INDEX_REG_P): Reject SIGN_EXTEND of
	HImode reg when TARGET_5200.

Index: lb1sf68.asm
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/m68k/lb1sf68.asm,v
retrieving revision 1.4
diff -p -r1.4 lb1sf68.asm
*** lb1sf68.asm	1998/12/16 21:06:45	1.4
--- lb1sf68.asm	1999/03/01 23:03:35
*************** L1:	addl	d0,d0		| shift reg pair (p,a) o
*** 382,390 ****
  	addxl	d2,d2
  	movl	d2,d3		| subtract b from p, store in tmp.
  	subl	d1,d3
! 	jmi	L2		| if the result is not is negative, set the
! 	bset	IMM (0),d0	| low order bit of a to 1 and store tmp in p.
! 	movl	d3,d2
  L2:	subql	IMM (1),d4
  	jcc	L1
  	moveml	sp@,d2-d4	| restore data registers
--- 382,390 ----
  	addxl	d2,d2
  	movl	d2,d3		| subtract b from p, store in tmp.
  	subl	d1,d3
! 	jcs	L2		| if no carry,
! 	bset	IMM (0),d0	| set the low order bit of a to 1,
! 	movl	d3,d2		| and store tmp in p.
  L2:	subql	IMM (1),d4
  	jcc	L1
  	moveml	sp@,d2-d4	| restore data registers
Index: m68k.h
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/config/m68k/m68k.h,v
retrieving revision 1.31
diff -p -r1.31 m68k.h
*** m68k.h	1999/02/19 01:20:28	1.31
--- m68k.h	1999/03/01 23:03:35
*************** __transfer_from_trampoline ()					\
*** 1463,1471 ****
  	  && (TARGET_68020 || (unsigned) INTVAL (XEXP (X, 0)) + 0x80 < 0x100))		\
  	{ rtx go_temp = XEXP (X, 1); GO_IF_INDEXING (go_temp, ADDR); } } }
  
  #define LEGITIMATE_INDEX_REG_P(X)   \
    ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))	\
!    || (GET_CODE (X) == SIGN_EXTEND			\
         && GET_CODE (XEXP (X, 0)) == REG			\
         && GET_MODE (XEXP (X, 0)) == HImode		\
         && REG_OK_FOR_INDEX_P (XEXP (X, 0)))		\
--- 1463,1473 ----
  	  && (TARGET_68020 || (unsigned) INTVAL (XEXP (X, 0)) + 0x80 < 0x100))		\
  	{ rtx go_temp = XEXP (X, 1); GO_IF_INDEXING (go_temp, ADDR); } } }
  
+ /* coldfire/5200 does not allow HImode index registers.  */
  #define LEGITIMATE_INDEX_REG_P(X)   \
    ((GET_CODE (X) == REG && REG_OK_FOR_INDEX_P (X))	\
!    || (! TARGET_5200					\
!        && GET_CODE (X) == SIGN_EXTEND			\
         && GET_CODE (XEXP (X, 0)) == REG			\
         && GET_MODE (XEXP (X, 0)) == HImode		\
         && REG_OK_FOR_INDEX_P (XEXP (X, 0)))		\


More information about the Gcc-patches mailing list