Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 645776 | Differences between
and this patch

Collapse All | Expand All

(-)gcc/config/i386/i386.md.jj (-5 / +20 lines)
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")

Return to bug 645776