Re: Destructive comparison

2009-05-18 Thread Michael Hope
Yip, picked that up after I sent it. Thanks. 2009/5/19 Jim Wilson : > On Mon, 2009-05-18 at 19:58 +1200, Michael Hope wrote: >>   (set (match_operand:SI 3 "register_operand" "=1") >>       (not:SI (xor:SI (match_dup 1) (match_dup 2] > > not xor is aka xnor.  You probably want this without the

Re: Destructive comparison

2009-05-18 Thread Jim Wilson
On Mon, 2009-05-18 at 19:58 +1200, Michael Hope wrote: > (set (match_operand:SI 3 "register_operand" "=1") > (not:SI (xor:SI (match_dup 1) (match_dup 2] not xor is aka xnor. You probably want this without the two "not" operations. Jim

Re: Destructive comparison

2009-05-18 Thread Michael Hope
Thanks, that worked. I ended up using: (define_insn "cmpcc_xor" [(set (match_operand:CC 0 "register_operand" "=C") (compare:CC (not:SI (xor:SI (match_operand:SI 1 "register_operand" "%r") (match_operand:SI 2 "register_operand" "b"))) (const_int

Re: Destructive comparison

2009-05-17 Thread Jim Wilson
Michael Hope wrote: * Using a define_insn to mark it as both a destructive xor and compare in parallel, such as: When a compare is in a parallel, the compare must be the first operation. You have it second. This kind of pattern should work. You can find many examples of it in the sparc.md

Destructive comparison

2009-05-17 Thread Michael Hope
Hi there. I'm having trouble figuring out how to represent a destructive comparison on the port I'm attempting. The ISA is very simple and accumulator based, so to generate a compare of two registers you would do: ; Compare R10 and R11, destroying R11 and setting C LOADACC, R10 XOR,