> This does almost exactly the same as what the proposed float_narrow
> would do. Instead, write it as
>
> (define_insn "add_truncdfsf3"
> [(set (match_operand:SF 0 "gpc_reg_operand" "=<Ff>,wa")
> (unspec:SF [(match_operand:DF 1 "gpc_reg_operand" "%<Ff>,wa")
> (match_operand:DF 2 "gpc_reg_operand" "<Ff>,wa")]
> UNSPEC_ADD_TRUNCATE)]
> "TARGET_HARD_FLOAT"
> "@
> fadds %0,%1,%2
> xsaddsp %x0,%x1,%x2"
> [(set_attr "type" "fp")
> (set_attr "isa" "*,p8v")])
Yes, I tried basically every combination I could think of, just not
with the "isa attr". Now, I have the following code and it is still
seems not to be working. Am I missing any options to pass?
(define_insn "add_truncdfsf3"
[(set (match_operand:SF 0 "gpc_reg_operand" "=f,wa")
(unspec:SF [(match_operand:DF 1 "gpc_reg_operand" "%d,wa")
(match_operand:DF 2 "gpc_reg_operand" "d,wa")]
UNSPEC_ADD_NARROWING))]
"TARGET_HARD_FLOAT"
"@
fadds %0,%1,%2
xsaddsp %x0,%x1,%x2"
[(set_attr "type" "fp")
(set_attr "isa" "*,p8v")])
with the code, I pass -O2 foo.c :
float
foo (double x, double y)
{
return __builtin_fadd (x, y);
}
Thanks,
Tejas
On Thu, 22 Aug 2019 at 00:47, Segher Boessenkool
<[email protected]> wrote:
>
> On Wed, Aug 21, 2019 at 01:28:52PM -0500, Segher Boessenkool wrote:
> > (define_insn "add_truncdfsf3"
> > [(set (match_operand:SF 0 "gpc_reg_operand" "=<Ff>,wa")
> > (unspec:SF [(match_operand:DF 1 "gpc_reg_operand" "%<Ff>,wa")
> > (match_operand:DF 2 "gpc_reg_operand" "<Ff>,wa")]
> > UNSPEC_ADD_TRUNCATE)]
> > "TARGET_HARD_FLOAT"
> > "@
> > fadds %0,%1,%2
> > xsaddsp %x0,%x1,%x2"
> > [(set_attr "type" "fp")
> > (set_attr "isa" "*,p8v")])
>
> And not <Ff>... f, d, d respectively (f for SF, d for DF).
>
>
> Segher