> 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
<seg...@kernel.crashing.org> 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

Reply via email to