https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61577
--- Comment #217 from John Buddery <jvb at cyberscience dot com> ---
Thanks very much for adding the binutils patch.
Sorry, I'm new to .md definitions, so I've probably got this wrong. Did you
mean something like:
(define_insn "call_nogp_longcall"
[(call (mem:DI (match_operand:DI 0 "call_operand" "?b,s"))
(const_int 0))
(clobber (match_operand:DI 1 "register_operand" "=b,b"))]
"TARGET_HPUX && ia64_tune == PROCESSOR_ITANIUM2"
"@
br.call%+.many %1 = %0
brl.call%+.many %1 = %0"
[(set_attr "itanium_class" "br,scall")])
(define_insn "call_nogp"
[(call (mem:DI (match_operand:DI 0 "call_operand" "?b,s"))
(const_int 0))
(clobber (match_operand:DI 1 "register_operand" "=b,b"))]
""
"br.call%+.many %1 = %0"
[(set_attr "itanium_class" "br,scall")])
I assume you need a second instruction to catch the case where the condition
doesn't match ?
Itanium 1 support seems to have been dropped at some point, so -mtune only
accepts options mapping to Itanium2. So, I couldn't test the br case on HP.