OSDN Git Service

(expand_expr, case COMPONENT_REF): Don't fetch unaligned
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 25 Feb 1995 01:45:43 +0000 (01:45 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 25 Feb 1995 01:45:43 +0000 (01:45 +0000)
field if we only want its address.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9069 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/expr.c

index d46498e..cd0472d 100644 (file)
@@ -4761,16 +4761,16 @@ expand_expr (exp, target, tmode, modifier)
           (which we know to be the width of a basic mode), then
           storing into memory, and changing the mode to BLKmode.  */
        if (mode1 == VOIDmode
-           || (mode1 != BLKmode && ! direct_load[(int) mode1]
-               && modifier != EXPAND_CONST_ADDRESS
-               && modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER)
            || GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG
-           /* If the field isn't aligned enough to fetch as a memref,
-              fetch it as a bit field.  */
-           || (SLOW_UNALIGNED_ACCESS
-               && TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode))
-           || (SLOW_UNALIGNED_ACCESS
-               && bitpos % GET_MODE_ALIGNMENT (mode) != 0))
+           || (modifier != EXPAND_CONST_ADDRESS
+               && modifier != EXPAND_SUM
+               && modifier != EXPAND_INITIALIZER
+               && ((mode1 != BLKmode && ! direct_load[(int) mode1])
+                   /* If the field isn't aligned enough to fetch as a memref,
+                      fetch it as a bit field.  */
+                   || (SLOW_UNALIGNED_ACCESS
+                       && ((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode))
+                           || (bitpos % GET_MODE_ALIGNMENT (mode) != 0))))))
          {
            enum machine_mode ext_mode = mode;