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
This commit is contained in:
parent
a22b8ac1e4
commit
f7acbf4c82
|
@ -1,3 +1,12 @@
|
|||
2006-04-25 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2006-04-25 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* doc/install.texi (Specific): Clarify that this is not a list of
|
||||
|
|
|
@ -12501,8 +12501,8 @@
|
|||
(define_expand "extv"
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(sign_extract:SI (match_operand:SI 1 "register_operand" "")
|
||||
(match_operand:SI 2 "immediate_operand" "")
|
||||
(match_operand:SI 3 "immediate_operand" "")))]
|
||||
(match_operand:SI 2 "const8_operand" "")
|
||||
(match_operand:SI 3 "const8_operand" "")))]
|
||||
""
|
||||
{
|
||||
/* Handle extractions from %ah et al. */
|
||||
|
@ -12518,8 +12518,8 @@
|
|||
(define_expand "extzv"
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(zero_extract:SI (match_operand 1 "ext_register_operand" "")
|
||||
(match_operand:SI 2 "immediate_operand" "")
|
||||
(match_operand:SI 3 "immediate_operand" "")))]
|
||||
(match_operand:SI 2 "const8_operand" "")
|
||||
(match_operand:SI 3 "const8_operand" "")))]
|
||||
""
|
||||
{
|
||||
/* Handle extractions from %ah et al. */
|
||||
|
@ -12534,12 +12534,12 @@
|
|||
|
||||
(define_expand "insv"
|
||||
[(set (zero_extract (match_operand 0 "ext_register_operand" "")
|
||||
(match_operand 1 "immediate_operand" "")
|
||||
(match_operand 2 "immediate_operand" ""))
|
||||
(match_operand 1 "const8_operand" "")
|
||||
(match_operand 2 "const8_operand" ""))
|
||||
(match_operand 3 "register_operand" ""))]
|
||||
""
|
||||
{
|
||||
/* Handle extractions from %ah et al. */
|
||||
/* Handle insertions to %ah et al. */
|
||||
if (INTVAL (operands[1]) != 8 || INTVAL (operands[2]) != 8)
|
||||
FAIL;
|
||||
|
||||
|
|
|
@ -544,6 +544,11 @@
|
|||
(and (match_code "const_int")
|
||||
(match_test "op == const1_rtx")))
|
||||
|
||||
;; Match exactly eight.
|
||||
(define_predicate "const8_operand"
|
||||
(and (match_code "const_int")
|
||||
(match_test "INTVAL (op) == 8")))
|
||||
|
||||
;; Match 2, 4, or 8. Used for leal multiplicands.
|
||||
(define_predicate "const248_operand"
|
||||
(match_code "const_int")
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue