From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id C5E223858425 for ; Sat, 12 Nov 2022 06:51:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C5E223858425 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [10.20.4.52]) by gateway (Coremail) with SMTP id _____8Dxfbd5Qm9jhFwGAA--.14574S3; Sat, 12 Nov 2022 14:51:38 +0800 (CST) Received: from [10.20.4.52] (unknown [10.20.4.52]) by localhost.localdomain (Coremail) with SMTP id AQAAf8BxV1d3Qm9jE1MRAA--.29197S2; Sat, 12 Nov 2022 14:51:35 +0800 (CST) Subject: Re: [PATCH v2 4/4] LoongArch: Add flogb.{s,d} instructions and expand logb{sf,df}2 To: Xi Ruoyao , gcc-patches@gcc.gnu.org Cc: Wang Xuerui , Chenghua Xu , Xiaolin Tang References: <20221109135329.952128-1-xry111@xry111.site> <20221109135329.952128-5-xry111@xry111.site> From: Lulu Cheng Message-ID: <41dd4f29-2b9c-9217-77d6-22777a8fbd53@loongson.cn> Date: Sat, 12 Nov 2022 14:51:35 +0800 User-Agent: Mozilla/5.0 (X11; Linux mips64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20221109135329.952128-5-xry111@xry111.site> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-CM-TRANSID:AQAAf8BxV1d3Qm9jE1MRAA--.29197S2 X-CM-SenderInfo: xfkh0wpoxo3qxorr0wxvrqhubq/ X-Coremail-Antispam: 1Uk129KBjvJXoWxArykXw48Ww4rZrW8Kw1fXrb_yoWrXFWkp3 97C3Z5tF48G3s7G3Z7Ka45Jr43Wrs7Gr17uws3GryIkFWjgFn7XF4rKa42gFW5Cws8Xr1I vFWrua45uFWUC37anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU bxxYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_Jr0_Jr4l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVWUJVWUCwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwA2z4 x0Y4vEx4A2jsIE14v26r4j6F4UM28EF7xvwVC2z280aVCY1x0267AKxVW8JVW8Jr1le2I2 62IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27wAqx4xG64xvF2IEw4 CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvj eVCFs4IE7xkEbVWUJVW8JwACjcxG0xvEwIxGrwCYjI0SjxkI62AI1cAE67vIY487MxAIw2 8IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4l x2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwIxGrw CI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwCI 42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z2 80aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxUzsqWUUUUU X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_NUMSUBJECT,KAM_SHORT,MIME_CHARSET_FARAWAY,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: LGTM! Thanks. ÔÚ 2022/11/9 ÏÂÎç9:53, Xi Ruoyao дµÀ: > On LoongArch, flogb instructions extract the exponent of a non-negative > floating point value, but produces NaN for negative values. So we need > to add a fabs instruction when we expand logb. > > gcc/ChangeLog: > > * config/loongarch/loongarch.md (UNSPEC_FLOGB): New unspec. > (type): Add flogb. > (logb_non_negative2): New instruction template. > (logb2): New define_expand. > > gcc/testsuite/ChangeLog: > > * gcc.target/loongarch/flogb.c: New test. > --- > gcc/config/loongarch/loongarch.md | 35 ++++++++++++++++++++-- > gcc/testsuite/gcc.target/loongarch/flogb.c | 18 +++++++++++ > 2 files changed, 51 insertions(+), 2 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/loongarch/flogb.c > > diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md > index c141c9adde2..682ab961741 100644 > --- a/gcc/config/loongarch/loongarch.md > +++ b/gcc/config/loongarch/loongarch.md > @@ -42,6 +42,7 @@ (define_c_enum "unspec" [ > UNSPEC_FTINTRM > UNSPEC_FTINTRP > UNSPEC_FSCALEB > + UNSPEC_FLOGB > > ;; Override return address for exception handling. > UNSPEC_EH_RETURN > @@ -217,6 +218,7 @@ (define_attr "qword_mode" "no,yes" > ;; fdiv floating point divide > ;; frdiv floating point reciprocal divide > ;; fabs floating point absolute value > +;; flogb floating point exponent extract > ;; fneg floating point negation > ;; fcmp floating point compare > ;; fcopysign floating point copysign > @@ -233,8 +235,8 @@ (define_attr "type" > "unknown,branch,jump,call,load,fpload,fpidxload,store,fpstore,fpidxstore, > prefetch,prefetchx,condmove,mgtf,mftg,const,arith,logical, > shift,slt,signext,clz,trap,imul,idiv,move, > - fmove,fadd,fmul,fmadd,fdiv,frdiv,fabs,fneg,fcmp,fcopysign,fcvt,fscaleb, > - fsqrt,frsqrt,accext,accmod,multi,atomic,syncloop,nop,ghost" > + fmove,fadd,fmul,fmadd,fdiv,frdiv,fabs,flogb,fneg,fcmp,fcopysign,fcvt, > + fscaleb,fsqrt,frsqrt,accext,accmod,multi,atomic,syncloop,nop,ghost" > (cond [(eq_attr "jirl" "!unset") (const_string "call") > (eq_attr "got" "load") (const_string "load") > > @@ -1039,6 +1041,35 @@ (define_insn "ldexp3" > (set_attr "mode" "")]) > > ;; > +;; .................... > +;; > +;; FLOATING POINT EXPONENT EXTRACT > +;; > +;; .................... > + > +(define_insn "logb_non_negative2" > + [(set (match_operand:ANYF 0 "register_operand" "=f") > + (unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")] > + UNSPEC_FLOGB))] > + "TARGET_HARD_FLOAT" > + "flogb.\t%0,%1" > + [(set_attr "type" "flogb") > + (set_attr "mode" "")]) > + > +(define_expand "logb2" > + [(set (match_operand:ANYF 0 "register_operand") > + (unspec:ANYF [(abs:ANYF (match_operand:ANYF 1 "register_operand"))] > + UNSPEC_FLOGB))] > + "TARGET_HARD_FLOAT" > +{ > + rtx tmp = gen_reg_rtx (mode); > + > + emit_insn (gen_abs2 (tmp, operands[1])); > + emit_insn (gen_logb_non_negative2 (operands[0], tmp)); > + DONE; > +}) > + > +;; > ;; ................... > ;; > ;; Count leading zeroes. > diff --git a/gcc/testsuite/gcc.target/loongarch/flogb.c b/gcc/testsuite/gcc.target/loongarch/flogb.c > new file mode 100644 > index 00000000000..1daefe54e13 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/loongarch/flogb.c > @@ -0,0 +1,18 @@ > +/* { dg-do compile } */ > +/* { dg-options "-mdouble-float -fno-math-errno" } */ > +/* { dg-final { scan-assembler "fabs\\.s" } } */ > +/* { dg-final { scan-assembler "fabs\\.d" } } */ > +/* { dg-final { scan-assembler "flogb\\.s" } } */ > +/* { dg-final { scan-assembler "flogb\\.d" } } */ > + > +double > +my_logb (double a) > +{ > + return __builtin_logb (a); > +} > + > +float > +my_logbf (float a) > +{ > + return __builtin_logbf (a); > +}