summaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-26 00:51:14 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-26 00:51:14 +0000
commite051aa149e8ebf7904372578305284945674f6ec (patch)
tree1aae3ef33166342b584dde15d93a18e829caac8b /gcc/expmed.c
parent6028be81364271a5a64113fe9dc2f810156152d5 (diff)
downloadgcc-e051aa149e8ebf7904372578305284945674f6ec.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113265 138bc75d-0d04-0410-961f-82ee72b054a4
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 31b8241f29b..5a32366cc64 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;