> Date: Fri, 11 Apr 2008 15:32:02 +0200
> From: Bernd Schmidt <[EMAIL PROTECTED]>
> Mohamed Shafi wrote:
> > In cris i saw this patten
> >
> > (define_insn "*andhi_lowpart"
> > [(set (strict_low_part
> > (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r"))
> > (and:HI (match_operand:HI 1 "register_operand" "%0,0, 0,0,0,r")
> > (match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))]
> >
> > Here = is used.
>
> This is incorrect since when the last alternative matches, nothing tells
> the compiler that operand 0 is also an input.
Oops, thanks for noticing. For consistency, I made all
strict_low_part constraints use "+", including those where all
alternatives had %0. Regtested cross to cris-elf and
crisv32-elf.
PS. I'm not a native speaker, but FWIW I agree with Joe Buck
regarding usage of the word "doubt", but I see it's quite common
with some non-native speakers, indicating the fault is at the
teaching level.
gcc:
* config/cris/cris.md ("*andhi_lowpart_non_v32", "*andhi_lowpart_v32")
("*andqi_lowpart_non_v32", "*andqi_lowpart_v32"): Use "+" for the
operand 0 constraint, not "=".
Index: config/cris/cris.md
===================================================================
--- config/cris/cris.md (revision 134224)
+++ config/cris/cris.md (working copy)
@@ -2958,7 +2958,7 @@ (define_insn "*expanded_andhi_v32"
(define_insn "*andhi_lowpart_non_v32"
[(set (strict_low_part
- (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r"))
+ (match_operand:HI 0 "register_operand" "+r,r, r,r,r,r"))
(and:HI (match_operand:HI 1 "register_operand" "%0,0, 0,0,0,r")
(match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))]
"!TARGET_V32"
@@ -2974,7 +2974,7 @@ (define_insn "*andhi_lowpart_non_v32"
(define_insn "*andhi_lowpart_v32"
[(set (strict_low_part
- (match_operand:HI 0 "register_operand" "=r,r,r,r,r"))
+ (match_operand:HI 0 "register_operand" "+r,r,r,r,r"))
(and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0")
(match_operand:HI 2 "general_operand" "r,Q>,L,O,g")))]
"TARGET_V32"
@@ -3025,7 +3025,7 @@ (define_insn "*andqi3_v32"
(define_insn "*andqi_lowpart_non_v32"
[(set (strict_low_part
- (match_operand:QI 0 "register_operand" "=r,r, r,r,r"))
+ (match_operand:QI 0 "register_operand" "+r,r, r,r,r"))
(and:QI (match_operand:QI 1 "register_operand" "%0,0, 0,0,r")
(match_operand:QI 2 "general_operand" "r,Q>,O,g,!To")))]
"!TARGET_V32"
@@ -3040,7 +3040,7 @@ (define_insn "*andqi_lowpart_non_v32"
(define_insn "*andqi_lowpart_v32"
[(set (strict_low_part
- (match_operand:QI 0 "register_operand" "=r,r,r,r"))
+ (match_operand:QI 0 "register_operand" "+r,r,r,r"))
(and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0")
(match_operand:QI 2 "general_operand" "r,Q>,O,g")))]
"TARGET_V32"
brgds, H-P