IA64 floating point division question

Zack Weinberg zack@codesourcery.com
Wed Sep 1 00:10:00 GMT 2004


Steve Ellcey <sje@cup.hp.com> writes:

>> I'm fairly sure that your problem is with the "*recip_approx"
>> instruction, which is what is supposed to match this pattern.  The
>> catch is, it *only* allows XFmode operands, whereas you're trying to
>> feed it SFmode.
>
> No, I created some new versions of *recip_approx that "generate" SFmode
> or DFmode (as well as some new _alts instructions) so that I can refer
> to each register in only one mode. My new *recip_approx_sf instruction
> is:
>
> (define_insn "*recip_approx_sf"
>   [(set (match_operand:SF 0 "fr_register_operand" "=f")
>         (div:SF (const_int 1)
>                 (match_operand:SF 3 "fr_register_operand" "f")))
>    (set (match_operand:BI 1 "register_operand" "=c")
>         (unspec:BI [(match_operand:SF 2 "fr_register_operand" "f")
>                     (match_dup 3)] UNSPEC_FR_RECIP_APPROX))
>    (use (match_operand:SI 4 "const_int_operand" ""))]
>   ""
>   "frcpa.s%4 %0, %1 = %2, %3"
>   [(set_attr "itanium_class" "fmisc")
>    (set_attr "predicable" "no")])

Odd; that certainly ought to match the pattern you showed.  I have no
idea why it wouldn't.

zw



More information about the Gcc mailing list