Unaligned block moves and MEM_ALIGN re-broken

Richard Kenner kenner@vlsi1.ultra.nyu.edu
Fri Jan 25 17:58:00 GMT 2002


Does this fix it for you?

*** rtl.h	2002/01/22 14:33:33	1.326
--- rtl.h	2002/01/26 00:03:33
*************** do {						\
*** 927,936 ****
   : 0)
  
! /* For a MEM rtx, the alignment in bits.  */
  #define MEM_ALIGN(RTX)							\
  (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->align				\
   : GET_MODE (RTX) != BLKmode ? GET_MODE_ALIGNMENT (GET_MODE (RTX))	\
   : BITS_PER_UNIT)
! 
  
  /* Copy the attributes that apply to memory locations from RHS to LHS.  */
--- 927,941 ----
   : 0)
  
! /* For a MEM rtx, the alignment in bits.  We can use the alignment of the
!    mode as a default when STRICT_ALIGNMENT, but not if not.  */
! #ifdef STRICT_ALIGNMENT
  #define MEM_ALIGN(RTX)							\
  (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->align				\
   : GET_MODE (RTX) != BLKmode ? GET_MODE_ALIGNMENT (GET_MODE (RTX))	\
   : BITS_PER_UNIT)
! #else
! #define MEM_ALIGN(RTX)							\
! (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->align : BITS_PER_UNIT)
! #endif
  
  /* Copy the attributes that apply to memory locations from RHS to LHS.  */
*** emit-rtl.c	2002/01/24 12:30:37	1.243
--- emit-rtl.c	2002/01/26 00:03:37
*************** get_mem_attrs (alias, expr, offset, size
*** 293,297 ****
  	  || (mode != BLKmode && GET_MODE_SIZE (mode) == INTVAL (size)))
        && (align == BITS_PER_UNIT
! 	  || (mode != BLKmode && align == GET_MODE_ALIGNMENT (mode))))
      return 0;
  
--- 293,300 ----
  	  || (mode != BLKmode && GET_MODE_SIZE (mode) == INTVAL (size)))
        && (align == BITS_PER_UNIT
! #ifdef STRICT_ALIGNMENT
! 	  || (mode != BLKmode && align == GET_MODE_ALIGNMENT (mode))
! #endif
! 	  ))
      return 0;
  



More information about the Gcc mailing list