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