aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1993-08-25 17:38:10 -0600
committerJeff Law <law@gcc.gnu.org>1993-08-25 17:38:10 -0600
commitbd5d175ab8f46a3bee7f9bec19d16ad32ea63900 (patch)
treedadcaacb464e7c2b2e9552e80afa7b66c6953d58 /gcc
parent673596d8b201cf7657a681a3968913baa023db7b (diff)
downloadgcc-bd5d175ab8f46a3bee7f9bec19d16ad32ea63900.zip
gcc-bd5d175ab8f46a3bee7f9bec19d16ad32ea63900.tar.gz
gcc-bd5d175ab8f46a3bee7f9bec19d16ad32ea63900.tar.bz2
expmed.c (store_bit_field): Do not use bitfield instructions for STRICT_ALIGNMENT machines if...
* expmed.c (store_bit_field): Do not use bitfield instructions for STRICT_ALIGNMENT machines if the MEM's alignment isn't as big as the MEM's mode. From-SVN: r5213
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expmed.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 1739e70..c8e2f22 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -389,7 +389,8 @@ store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size)
else
bestmode = GET_MODE (op0);
- if (bestmode == VOIDmode)
+ if (bestmode == VOIDmode
+ || (STRICT_ALIGNMENT && GET_MODE_SIZE (bestmode) > align))
goto insv_loses;
/* Adjust address to point to the containing unit of that mode. */
@@ -959,7 +960,8 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
else
bestmode = GET_MODE (xop0);
- if (bestmode == VOIDmode)
+ if (bestmode == VOIDmode
+ || (STRICT_ALIGNMENT && GET_MODE_SIZE (bestmode) > align))
goto extzv_loses;
/* Compute offset as multiple of this unit,
@@ -1092,7 +1094,8 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
else
bestmode = GET_MODE (xop0);
- if (bestmode == VOIDmode)
+ if (bestmode == VOIDmode
+ || (STRICT_ALIGNMENT && GET_MODE_SIZE (bestmode) > align))
goto extv_loses;
/* Compute offset as multiple of this unit,