@@ -1650,22 +1650,40 @@
})
-(define_insn "insn_cmpne_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r")
- (ne:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "rO")))]
+(define_insn "insn_cmpne_di<I48MODE:mode>"
+ [(set (match_operand:I48MODE 0 "register_operand" "=r")
+ (ne:I48MODE (match_operand:DI 1 "reg_or_0_operand" "rO")
+ (match_operand:DI 2 "reg_or_cint_operand" "rO")))]
""
"cmpne\t%0, %r1, %r2")
-(define_insn "insn_cmpeq_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
- (eq:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
+(define_insn "insn_cmpne_si<I48MODE:mode>"
+ [(set (match_operand:I48MODE 0 "register_operand" "=r")
+ (ne:I48MODE (match_operand:SI 1 "reg_or_0_operand" "rO")
+ (match_operand:SI 2 "reg_or_cint_operand" "rO")))]
+ ""
+ "xor\t%0, %r1, %r2; bfextu\t%0, %0, 0, 31; cmpne\t%0, %0, zero"
+ [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_cmpeq_di<I48MODE:mode>"
+ [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
+ (eq:I48MODE (match_operand:DI 1 "reg_or_0_operand" "rO,rO")
+ (match_operand:DI 2 "reg_or_cint_operand" "I,rO")))]
""
"@
cmpeqi\t%0, %r1, %2
cmpeq\t%0, %r1, %r2")
+(define_insn "insn_cmpeq_si<I48MODE:mode>"
+ [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
+ (eq:I48MODE (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+ (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
+ ""
+ "@
+ xori\t%0, %r1, %2; bfextu\t%0, %0, 0, 31; cmpeqi\t%0, %0, 0
+ xor\t%0, %r1, %r2; bfextu\t%0, %0, 0, 31; cmpeqi\t%0, %0, 0"
+ [(set_attr "type" "cannot_bundle")])
+
(define_insn "insn_cmplts_<I48MODE:mode><I48MODE2:mode>"
[(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
(lt:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")