This is the mail archive of the gcc@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]

Re: md description for intruction that modifies multiple operands


> (1) The above entry only tells the compiler that the first operand is an output
> operand, so I tried changing it to something like:
> 
> 	(define_insn "block4"
> 	  [(set (match_operand:SI 0 "register_operand" "+d")
> 	        (unspec:SI [(match_operand:SI 1 "register_operand" "+d")
> 	                    (match_operand:SI 2 "register_operand" "+d")
> 	                    (match_operand:SI 3 "register_operand" "+d")] 123))]
> 	  "TARGET_FOO"
> 	  "block4\\t%0 # %0,%1,%2,%3")
> 
> to let it know that all operands are both read/write.  I'm not
> entirely sure this is the correct approach.

That didn't seem to work.  I also tried something like:

	(define_insn "block4"
	  [(set (match_operand:SI 0 "register_operand" "+d")
	        (unspec:SI [(match_operand:SI 1 "register_operand" "+d")
	                    (match_operand:SI 2 "register_operand" "+d")
	                    (match_operand:SI 3 "register_operand" "+d")] 123))
	   (set (match_dup 1) (unspec:SI [(match_dup 0) (match_dup 2) (match_dup 3)] 124))
	   (set (match_dup 2) (unspec:SI [(match_dup 0) (match_dup 1) (match_dup 3)] 125))
	   (set (match_dup 3) (unspec:SI [(match_dup 0) (match_dup 1) (match_dup 2)] 126))]
	  "TARGET_FOO"
	  "block4\\t%0 # %0,%1,%2,%3")

which works a little better, but still seems to have some problems
with the compiler recognizing that every operand is both an input and
output.

Am I totally off track here?

Thanks.

-Fred


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