aboutsummaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-04-26 00:51:14 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-04-26 00:51:14 +0000
commitf7acbf4c824c9486072210648c86a7df28eb8f3e (patch)
tree1aae3ef33166342b584dde15d93a18e829caac8b /gcc/expmed.c
parenta22b8ac1e4cae83b56d649add7f54be84f000453 (diff)
downloadgcc-f7acbf4c824c9486072210648c86a7df28eb8f3e.zip
gcc-f7acbf4c824c9486072210648c86a7df28eb8f3e.tar.gz
gcc-f7acbf4c824c9486072210648c86a7df28eb8f3e.tar.bz2
expmed.c (store_bit_field): Also check whether the bitsize is valid for the machine's "insv" instruction...
* expmed.c (store_bit_field): Also check whether the bitsize is valid for the machine's "insv" instruction before moving the target into a pseudo for use with the insv. * config/i386/predicates.md (const8_operand): New predicate. * config/i386/i386.md (extv, extzv, insv): Use the new const8_operand predicate where appropriate. From-SVN: r113265
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r--gcc/expmed.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 31b8241..5a32366 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -636,7 +636,9 @@ store_bit_field (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
&& bitsize > 0
&& GET_MODE_BITSIZE (op_mode) >= bitsize
&& ! ((REG_P (op0) || GET_CODE (op0) == SUBREG)
- && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode))))
+ && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode)))
+ && insn_data[CODE_FOR_insv].operand[1].predicate (GEN_INT (bitsize),
+ VOIDmode))
{
int xbitpos = bitpos;
rtx value1;