This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed] Fix memory constraints in *and<mode>3_mips16


Like LWU, MIPS16 LBU and LHU only allow offset(base) addresses,
so they should use "W" rather than "o" as the memory constraint.
This fixes g++.dg/torture/vshuf-v8hi.C on mips64el-linux-gnu,
where the constraints matched a PC-relative address instead.

Tested on mips64el-linux-gnu and applied.

Richard


gcc/
	* config/mips/mips.md (*and<mode>3_mips16): Use the "W" constraint
	for the first two alternatives.

Index: gcc/config/mips/mips.md
===================================================================
--- gcc/config/mips/mips.md	2013-01-12 10:13:07.000000000 +0000
+++ gcc/config/mips/mips.md	2013-01-24 09:20:24.128211222 +0000
@@ -2898,7 +2898,7 @@ (define_insn "*and<mode>3"
 
 (define_insn "*and<mode>3_mips16"
   [(set (match_operand:GPR 0 "register_operand" "=d,d,d,d,d")
-	(and:GPR (match_operand:GPR 1 "nonimmediate_operand" "%o,o,W,d,0")
+	(and:GPR (match_operand:GPR 1 "nonimmediate_operand" "%W,W,W,d,0")
 		 (match_operand:GPR 2 "and_operand" "Yb,Yh,Yw,Yw,d")))]
   "TARGET_MIPS16 && and_operands_ok (<MODE>mode, operands[1], operands[2])"
 {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]