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 7CAAA3858C00 for ; Sun, 6 Nov 2022 01:58:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7CAAA3858C00 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 _____8Dx_7eoFGdj1LoEAA--.14135S3; Sun, 06 Nov 2022 09:58:01 +0800 (CST) Received: from [10.20.4.52] (unknown [10.20.4.52]) by localhost.localdomain (Coremail) with SMTP id AQAAf8BxTuCmFGdjHuQNAA--.39195S2; Sun, 06 Nov 2022 09:57:59 +0800 (CST) Subject: Re: [PATCH] LoongArch: Add fcopysign instructions To: Xi Ruoyao , gcc-patches@gcc.gnu.org Cc: Wang Xuerui , Chenghua Xu , Xiaolin Tang References: <20221104143719.1709284-1-xry111@xry111.site> From: Lulu Cheng Message-ID: <490fbb16-36e1-aa12-6a9d-ead6fbd56c6e@loongson.cn> Date: Sun, 6 Nov 2022 09:57:58 +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: <20221104143719.1709284-1-xry111@xry111.site> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-CM-TRANSID:AQAAf8BxTuCmFGdjHuQNAA--.39195S2 X-CM-SenderInfo: xfkh0wpoxo3qxorr0wxvrqhubq/ X-Coremail-Antispam: 1Uk129KBjvJXoWxAF4xurWUCFW3Zr4fWrWruFg_yoW5KrWUp3 9rCa4rtF48JrnrJFnYga45Jrn8Xrs7Kr17uryfJFy8CFWjgFy7XF48KFy3WF43A3s8Jr1I q3yF9345WFWUAwUanT9S1TB71UUUUUDqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU bxxYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_JrI_Jryl8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVWUCVW8JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwA2z4 x0Y4vEx4A2jsIE14v26r4j6F4UM28EF7xvwVC2z280aVCY1x0267AKxVW8JVW8Jr1le2I2 62IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27wAqx4xG64xvF2IEw4 CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_JF0_Jw1lYx0Ex4A2jsIE14v26r1j6r4UMcvj eVCFs4IE7xkEbVWUJVW8JwACjcxG0xvEwIxGrwCYjI0SjxkI62AI1cAE67vIY487MxAIw2 8IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4l x2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUAVWUtwCIc40Y0x0EwIxGrw CI42IY6xIIjxv20xvE14v26r1I6r4UMIIF0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwCI 42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z2 80aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73UjIFyTuYvjxU7MmhUUUUU X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,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: ÔÚ 2022/11/4 ÏÂÎç10:37, Xi Ruoyao дµÀ: > Add fcopysign.{s,d} with the names copysign{sf,df}3 so GCC will expand > __builtin_copysign{f,} to a single instruction. > > Link: https://sourceware.org/pipermail/libc-alpha/2022-November/143177.html > > gcc/ChangeLog: > > * config/loongarch/loongarch.md (UNSPEC_FCOPYSIGN): New unspec. > (type): Add fcopysign. > (copysign3): New instruction template. > > gcc/testsuite/ChangeLog: > > * gcc.target/loongarch/fcopysign.c: New test. > --- > > Bootstrapped and regtested on loongarch64-linux-gnu. Ok for trunk? > > gcc/config/loongarch/loongarch.md | 22 ++++++++++++++++++- > .../gcc.target/loongarch/fcopysign.c | 16 ++++++++++++++ > 2 files changed, 37 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/loongarch/fcopysign.c > > diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md > index 214b14bddd3..042e6e74491 100644 > --- a/gcc/config/loongarch/loongarch.md > +++ b/gcc/config/loongarch/loongarch.md > @@ -37,6 +37,7 @@ (define_c_enum "unspec" [ > UNSPEC_FCLASS > UNSPEC_FMAX > UNSPEC_FMIN > + UNSPEC_FCOPYSIGN > > ;; Override return address for exception handling. > UNSPEC_EH_RETURN > @@ -214,6 +215,7 @@ (define_attr "qword_mode" "no,yes" > ;; fabs floating point absolute value > ;; fneg floating point negation > ;; fcmp floating point compare > +;; fcopysign floating point copysign > ;; fcvt floating point convert > ;; fsqrt floating point square root > ;; frsqrt floating point reciprocal square root > @@ -226,7 +228,7 @@ (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,fcvt,fsqrt, > + fmove,fadd,fmul,fmadd,fdiv,frdiv,fabs,fneg,fcmp,fcopysign,fcvt,fsqrt, > frsqrt,accext,accmod,multi,atomic,syncloop,nop,ghost" > (cond [(eq_attr "jirl" "!unset") (const_string "call") > (eq_attr "got" "load") (const_string "load") > @@ -976,6 +978,24 @@ (define_insn "abs2" > (set_attr "mode" "")]) > > ;; > +;; .................... > +;; > +;; FLOATING POINT COPYSIGN > +;; > +;; .................... > + > +(define_insn "copysign3" > + [(set (match_operand:ANYF 0 "register_operand" "=f") > + (unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f") > + (match_operand:ANYF 2 "register_operand" "f")] > + UNSPEC_FCOPYSIGN))] > + "" We need to add "TARGET_HARD_FLOAT" here. Otherwise LGTM. Thanks! > + "fcopysign.\t%0,%1,%2" > + [(set_attr "type" "fcopysign") > + (set_attr "mode" "")]) > + > + > +;; > ;; ................... > ;; > ;; Count leading zeroes. > diff --git a/gcc/testsuite/gcc.target/loongarch/fcopysign.c b/gcc/testsuite/gcc.target/loongarch/fcopysign.c > new file mode 100644 > index 00000000000..058ba2cf573 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/loongarch/fcopysign.c > @@ -0,0 +1,16 @@ > +/* { dg-do compile } */ > +/* { dg-options "-mdouble-float" } */ > +/* { dg-final { scan-assembler "fcopysign\\.s" } } */ > +/* { dg-final { scan-assembler "fcopysign\\.d" } } */ > + > +double > +my_copysign (double a, double b) > +{ > + return __builtin_copysign (a, b); > +} > + > +float > +my_copysignf (float a, float b) > +{ > + return __builtin_copysignf (a, b); > +}