> 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