This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: md description for intruction that modifies multiple operands
- From: Eric Christopher <echristo at redhat dot com>
- To: fnf at intrinsity dot com
- Cc: gcc at gcc dot gnu dot org
- Date: 28 May 2003 17:06:12 -0700
- Subject: Re: md description for intruction that modifies multiple operands
- Organization:
- References: <20030526234729.C2A712F2980@beeville.vert.intrinsity.com>
> 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?
I don't think so. Though it looks like you might want to define a single
unspec number for the pattern and maybe use a parallel? *guesses*
-eric
--
Eric Christopher <echristo@redhat.com>