On 01/21/15 19:35, James Bowman wrote:
My target has a bit test (btst) instruction, so the C code:
if (x & 256)
can be efficiently coded as (for example):
btst $r0,256
jmp nz,.L1
However, with my current patterns, it generates an explicit "and" and
"compare" using a scratch:
and $r1,$r0,256
cmp $r1,0
jmp nz,.L1
Looking through targets with a similar instruction - arc, rx, s390,
i386 - I see several different approaches. They all seem quite
complicated.
What is the best way of implementing this? Thanks.
PA also has a bit test, both constant and variable position.
(define_insn ""
[(set (pc)
(if_then_else
(ne (zero_extract:SI (match_operand:SI 0 "register_operand" "r")
(const_int 1)
(match_operand:SI 1 "uint5_operand" ""))
(const_int 0))
(label_ref (match_operand 2 "" ""))
(pc)))]
That's the constant position test. There's a similar pattern for
testing at a variable position.
jeff