Commit 9e5f281f by Olivier Hainque Committed by Richard Kenner

expr.c (expand_expr, [...]): Refine the test forcing usage of bitfield…

expr.c (expand_expr, [...]): Refine the test forcing usage of bitfield instructions for mode1 != BLKmode...

        * expr.c (expand_expr, case BIT_FIELD_REF): Refine the test forcing
        usage of bitfield instructions for mode1 != BLKmode, only ignoring
        SLOW_UNALIGNED_ACCESS if the field is not byte aligned.
        (store_field): Likewise.

From-SVN: r66492
parent f5119d10
2003-05-05 Olivier Hainque <hainque@act-europe.fr>
* expr.c (expand_expr, case BIT_FIELD_REF): Refine the test forcing
usage of bitfield instructions for mode1 != BLKmode, only ignoring
SLOW_UNALIGNED_ACCESS if the field is not byte aligned.
(store_field): Likewise.
2003-05-05 Aldy Hernandez <aldyh@redhat.com> 2003-05-05 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.c (rs6000_expand_binop_builtin): Add * config/rs6000/rs6000.c (rs6000_expand_binop_builtin): Add
......
...@@ -5626,9 +5626,10 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode, unsignedp, type, ...@@ -5626,9 +5626,10 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode, unsignedp, type,
/* 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 || (mode != BLKmode
&& ((SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (target)) && ((((MEM_ALIGN (target) < GET_MODE_ALIGNMENT (mode))
&& (MEM_ALIGN (target) < GET_MODE_ALIGNMENT (mode))) || bitpos % GET_MODE_ALIGNMENT (mode))
|| bitpos % GET_MODE_ALIGNMENT (mode))) && SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (target)))
|| (bitpos % BITS_PER_UNIT != 0)))
/* 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
operations. */ operations. */
...@@ -7571,9 +7572,10 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7571,9 +7572,10 @@ 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
&& ((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode) && (((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode)
|| (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
&& SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0))) && SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0)))
|| (bitpos % GET_MODE_ALIGNMENT (mode) != 0))) || (bitpos % BITS_PER_UNIT != 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,
we must use bitfield operations. */ we must use bitfield operations. */
......
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