Commit 15b19a7d by Olivier Hainque Committed by Richard Kenner

expr.c (store_field): Force usage of bitfield instructions when the field position requires it...

        * expr.c (store_field): Force usage of bitfield instructions when
        the field position requires it, whatever SLOW_UNALIGNED_ACCESS.
        (expand_expr, case BIT_FIELD_REF): likewise.

From-SVN: r65701
parent f2d80e7e
2003-04-16 Olivier Hainque <hainque@act-europe.fr>
* expr.c (store_field): Force usage of bitfield instructions when
the field position requires it, whatever SLOW_UNALIGNED_ACCESS.
(expand_expr, case BIT_FIELD_REF): likewise.
2003-04-16 Mark Mitchell <mark@codesourcery.com> 2003-04-16 Mark Mitchell <mark@codesourcery.com>
PR middle-end/8866 PR middle-end/8866
......
...@@ -5564,8 +5564,9 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode, unsignedp, type, ...@@ -5564,8 +5564,9 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode, unsignedp, type,
|| GET_CODE (target) == SUBREG || GET_CODE (target) == SUBREG
/* If the field isn't aligned enough to store as an ordinary memref, /* If the field isn't aligned enough to store as an ordinary memref,
store it as a bit field. */ store it as a bit field. */
|| (mode != BLKmode && SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (target)) || (mode != BLKmode
&& (MEM_ALIGN (target) < GET_MODE_ALIGNMENT (mode) && ((SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (target))
&& (MEM_ALIGN (target) < GET_MODE_ALIGNMENT (mode)))
|| bitpos % GET_MODE_ALIGNMENT (mode))) || bitpos % GET_MODE_ALIGNMENT (mode)))
/* If the RHS and field are a constant size and the size of the /* If the RHS and field are a constant size and the size of the
RHS isn't the same size as the bitfield, we must use bitfield RHS isn't the same size as the bitfield, we must use bitfield
...@@ -7504,9 +7505,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7504,9 +7505,8 @@ expand_expr (exp, target, tmode, modifier)
/* If the field isn't aligned enough to fetch as a memref, /* If the field isn't aligned enough to fetch as a memref,
fetch it as a bit field. */ fetch it as a bit field. */
|| (mode1 != BLKmode || (mode1 != BLKmode
&& SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0)) && ((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode)
&& ((TYPE_ALIGN (TREE_TYPE (tem)) && SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0)))
< GET_MODE_ALIGNMENT (mode))
|| (bitpos % GET_MODE_ALIGNMENT (mode) != 0))) || (bitpos % GET_MODE_ALIGNMENT (mode) != 0)))
/* If the type and the field are a constant size and the /* If the type and the field are a constant size and the
size of the type isn't the same size as the bitfield, size of the type isn't the same size as the bitfield,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment