Lines 9250-9263
(define_split
Link Here
|
9250 |
}) |
9250 |
}) |
9251 |
|
9251 |
|
9252 |
(define_insn "*andndi3_doubleword" |
9252 |
(define_insn "*andndi3_doubleword" |
9253 |
[(set (match_operand:DI 0 "register_operand" "=r,&r") |
9253 |
[(set (match_operand:DI 0 "register_operand" "=r,r,&r") |
9254 |
(and:DI |
9254 |
(and:DI |
9255 |
(not:DI (match_operand:DI 1 "register_operand" "r,0")) |
9255 |
(not:DI (match_operand:DI 1 "register_operand" "r,0,r")) |
9256 |
(match_operand:DI 2 "nonimmediate_operand" "rm,rm"))) |
9256 |
(match_operand:DI 2 "nonimmediate_operand" "r,rm,m"))) |
9257 |
(clobber (reg:CC FLAGS_REG))] |
9257 |
(clobber (reg:CC FLAGS_REG))] |
9258 |
"!TARGET_64BIT && TARGET_STV && TARGET_SSE2" |
9258 |
"!TARGET_64BIT && TARGET_STV && TARGET_SSE2" |
9259 |
"#" |
9259 |
"#" |
9260 |
[(set_attr "isa" "bmi,*")]) |
9260 |
[(set_attr "isa" "bmi,*,bmi")]) |
9261 |
|
9261 |
|
9262 |
(define_split |
9262 |
(define_split |
9263 |
[(set (match_operand:DI 0 "register_operand") |
9263 |
[(set (match_operand:DI 0 "register_operand") |
Lines 9273-9279
(define_split
Link Here
|
9273 |
(parallel [(set (match_dup 3) |
9273 |
(parallel [(set (match_dup 3) |
9274 |
(and:SI (not:SI (match_dup 4)) (match_dup 5))) |
9274 |
(and:SI (not:SI (match_dup 4)) (match_dup 5))) |
9275 |
(clobber (reg:CC FLAGS_REG))])] |
9275 |
(clobber (reg:CC FLAGS_REG))])] |
9276 |
"split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);") |
9276 |
{ |
|
|
9277 |
split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]); |
9278 |
/* For the =r <- (r, r) alternative of *andndi3_doubleword, there could |
9279 |
be overlap between the output and input registers. If the output |
9280 |
is equal to one of the input operands, this is fine, if there is |
9281 |
partial overlap, we can resolve it by swapping the two instructions. */ |
9282 |
if (reg_overlap_mentioned_p (operands[0], operands[4]) |
9283 |
|| reg_overlap_mentioned_p (operands[0], operands[5])) |
9284 |
{ |
9285 |
std::swap (operands[0], operands[3]); |
9286 |
std::swap (operands[1], operands[4]); |
9287 |
std::swap (operands[2], operands[5]); |
9288 |
gcc_assert (!reg_overlap_mentioned_p (operands[0], operands[4]) |
9289 |
&& !reg_overlap_mentioned_p (operands[0], operands[5])); |
9290 |
} |
9291 |
}) |
9277 |
|
9292 |
|
9278 |
(define_split |
9293 |
(define_split |
9279 |
[(set (match_operand:DI 0 "register_operand") |
9294 |
[(set (match_operand:DI 0 "register_operand") |