})
(define_insn_and_split "*concat<half><mode>3_5"
- [(set (match_operand:DWI 0 "nonimmediate_operand" "=ro")
+ [(set (match_operand:DWI 0 "nonimmediate_operand" "=r,o,o")
(any_or_plus:DWI
- (ashift:DWI (match_operand:DWI 1 "register_operand" "r")
+ (ashift:DWI (match_operand:DWI 1 "register_operand" "r,r,r")
(match_operand:DWI 2 "const_int_operand"))
- (match_operand:DWI 3 "const_scalar_int_operand")))]
+ (match_operand:DWI 3 "const_scalar_int_operand" "n,n,Wd")))]
"INTVAL (operands[2]) == <MODE_SIZE> * BITS_PER_UNIT / 2
&& (<MODE>mode == DImode
? CONST_INT_P (operands[3])
: CONST_INT_P (operands[3])
? INTVAL (operands[3]) >= 0
: CONST_WIDE_INT_NUNITS (operands[3]) == 2
- && CONST_WIDE_INT_ELT (operands[3], 1) == 0)"
+ && CONST_WIDE_INT_ELT (operands[3], 1) == 0)
+ && !(CONST_INT_P (operands[3])
+ ? ix86_endbr_immediate_operand (operands[3], VOIDmode)
+ : ix86_endbr_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (operands[3],
+ 0)),
+ VOIDmode))"
"#"
"&& reload_completed"
[(clobber (const_int 0))]
split_double_concat (<MODE>mode, operands[0], op3,
gen_lowpart (<HALF>mode, operands[1]));
DONE;
-})
+}
+ [(set_attr "isa" "*,nox64,x64")])
(define_insn_and_split "*concat<mode><dwi>3_6"
- [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r")
+ [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=r,o,o,r")
(any_or_plus:<DWI>
(ashift:<DWI>
(zero_extend:<DWI>
- (match_operand:DWIH 1 "nonimmediate_operand" "r,m"))
+ (match_operand:DWIH 1 "nonimmediate_operand" "r,r,r,m"))
(match_operand:<DWI> 2 "const_int_operand"))
- (match_operand:<DWI> 3 "const_scalar_int_operand")))]
+ (match_operand:<DWI> 3 "const_scalar_int_operand" "n,n,Wd,n")))]
"INTVAL (operands[2]) == <MODE_SIZE> * BITS_PER_UNIT
&& (<DWI>mode == DImode
? CONST_INT_P (operands[3])
: CONST_INT_P (operands[3])
? INTVAL (operands[3]) >= 0
: CONST_WIDE_INT_NUNITS (operands[3]) == 2
- && CONST_WIDE_INT_ELT (operands[3], 1) == 0)"
+ && CONST_WIDE_INT_ELT (operands[3], 1) == 0)
+ && !(CONST_INT_P (operands[3])
+ ? ix86_endbr_immediate_operand (operands[3], VOIDmode)
+ : ix86_endbr_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (operands[3],
+ 0)),
+ VOIDmode))"
"#"
"&& reload_completed"
[(clobber (const_int 0))]
rtx op3 = simplify_subreg (<MODE>mode, operands[3], <DWI>mode, 0);
split_double_concat (<DWI>mode, operands[0], op3, operands[1]);
DONE;
-})
+}
+ [(set_attr "isa" "*,nox64,x64,*")])
(define_insn_and_split "*concat<mode><dwi>3_7"
- [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r")
+ [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=r,o,o,r")
(any_or_plus:<DWI>
(zero_extend:<DWI>
- (match_operand:DWIH 1 "nonimmediate_operand" "r,m"))
- (match_operand:<DWI> 2 "const_scalar_int_operand")))]
+ (match_operand:DWIH 1 "nonimmediate_operand" "r,r,r,m"))
+ (match_operand:<DWI> 2 "const_scalar_int_operand" "n,n,Wd,n")))]
"<DWI>mode == DImode
? CONST_INT_P (operands[2])
&& (UINTVAL (operands[2]) & GET_MODE_MASK (SImode)) == 0
+ && !ix86_endbr_immediate_operand (operands[2], VOIDmode)
: CONST_WIDE_INT_P (operands[2])
&& CONST_WIDE_INT_NUNITS (operands[2]) == 2
- && CONST_WIDE_INT_ELT (operands[2], 0) == 0"
+ && CONST_WIDE_INT_ELT (operands[2], 0) == 0
+ && !ix86_endbr_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (operands[2],
+ 1)),
+ VOIDmode)"
"#"
"&& reload_completed"
[(clobber (const_int 0))]
op2 = gen_int_mode (CONST_WIDE_INT_ELT (operands[2], 1), <MODE>mode);
split_double_concat (<DWI>mode, operands[0], operands[1], op2);
DONE;
-})
+}
+ [(set_attr "isa" "*,nox64,x64,*")])
\f
;; Negation instructions