------- Comment #8 from dje at gcc dot gnu dot org 2006-02-09 19:30 ------- Try adding the legitimize_reload_address fragment for unaligned offset from gcc-4.X:
/* Force ld/std non-word aligned offset into base register by wrapping in offset 0. */ if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == REG && REGNO (XEXP (x, 0)) < 32 && REG_MODE_OK_FOR_BASE_P (XEXP (x, 0), mode) && GET_CODE (XEXP (x, 1)) == CONST_INT && (INTVAL (XEXP (x, 1)) & 3) != 0 && !ALTIVEC_VECTOR_MODE (mode) && GET_MODE_SIZE (mode) >= UNITS_PER_WORD && TARGET_POWERPC64) { x = gen_rtx_PLUS (GET_MODE (x), x, GEN_INT (0)); push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0, opnum, (enum reload_type) type); *win = 1; return x; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21616