From patchwork Sat Jun 8 21:32:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 33055 Received: (qmail 113448 invoked by alias); 8 Jun 2019 21:32:45 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 113377 invoked by uid 89); 8 Jun 2019 21:32:45 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=dni, HX-Spam-Relays-External:209.85.215.196, H*RU:209.85.215.196, H*r:sk:mail-pg X-HELO: mail-pg1-f196.google.com Received: from mail-pg1-f196.google.com (HELO mail-pg1-f196.google.com) (209.85.215.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 08 Jun 2019 21:32:43 +0000 Received: by mail-pg1-f196.google.com with SMTP id l19so367424pgh.9; Sat, 08 Jun 2019 14:32:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Kp+tsgzgglrwm3z6nLBMg+QMX5B/9HZnVFme3gMtaJs=; b=gxLnDG5vmO0nTBdATu1Lqb4OqHdjdhB06jMe+WYz61IK4o3jLvMTV2PNlUq4DRstzJ wN3NdwTjul3B14TuA4U0Jh/1xT3+xKLzq+gIzWlpFdQMDqmMJTtbJEIvEOv4kNICTVDd 2L6safL9OnlNu9VTlEL+XctJcYGIUrxk1vurkjF7sqkg09yZcFbsRUhl+R4q1MupHLaE 5SHRq6ZXVBdo53QpZEEMXvAjdoTC85APPxs4uGAG9SqBCyZfjip4Jy20KgDy34rF40Ze kSDreqVoLLo3zday7tzCsAwnHDzx4IGF/nu+OpFGnI/HMvP4VFJ0wUtLCSxbBrZ+LlNB 8++A== Return-Path: Received: from localhost (g30.211-19-85.ppp.wakwak.ne.jp. [211.19.85.30]) by smtp.gmail.com with ESMTPSA id t5sm5817951pgh.46.2019.06.08.14.32.40 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sat, 08 Jun 2019 14:32:40 -0700 (PDT) From: Stafford Horne To: GDB patches , GNU Binutils Cc: Andrey Bacherov , Nick Clifton , Andrew Burgess , Richard Henderson , Openrisc , Stafford Horne Subject: [PATCH v3 02/11] cpu/or1k: Define unordered comparisons Date: Sun, 9 Jun 2019 06:32:18 +0900 Message-Id: <20190608213225.3230-3-shorne@gmail.com> In-Reply-To: <20190608213225.3230-1-shorne@gmail.com> References: <20190608213225.3230-1-shorne@gmail.com> MIME-Version: 1.0 X-IsSubscribed: yes Add support for new floating point unordered comparisons. These have been defined in OpenRISC architecture proposal 7[0] and are now included in the architecture specification 1.3. These new instructions provide the ability for floating point comparisons to detect NaNs. [0] https://openrisc.io/proposals/lfsf cpu/ChangeLog: yyyy-mm-dd Stafford Horne * or1korfpx.cpu (insn-opcode-float-regreg): Add SFUEQ_S, SFUNE_S, SFUGT_S, SFUGE_S, SFULT_S, SFULE_S, SFUN_S, SFUEQ_D, SFUNE_D, SFUGT_D, SFUGE_D, SFULT_D, SFULE_D, SFUN_D opcodes. (float-setflag-insn-base): New pmacro based on float-setflag-insn. (float-setflag-symantics, float-setflag-unordered-cmp-symantics, float-setflag-unordered-symantics): New pmacro for instruction symantics. (float-setflag-insn): Update to use float-setflag-insn-base. (float-setflag-unordered-insn): New pmacro for generating instructions. --- cpu/or1korfpx.cpu | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/cpu/or1korfpx.cpu b/cpu/or1korfpx.cpu index eb01f1ca66..5e33b82a44 100644 --- a/cpu/or1korfpx.cpu +++ b/cpu/or1korfpx.cpu @@ -54,6 +54,20 @@ ("SFGE_D" #x1b) ("SFLT_D" #x1c) ("SFLE_D" #x1d) + ("SFUEQ_S" #x28) + ("SFUNE_S" #x29) + ("SFUGT_S" #x2a) + ("SFUGE_S" #x2b) + ("SFULT_S" #x2c) + ("SFULE_S" #x2d) + ("SFUN_S" #x2e) + ("SFUEQ_D" #x38) + ("SFUNE_D" #x39) + ("SFUGT_D" #x3a) + ("SFUGE_D" #x3b) + ("SFULT_D" #x3c) + ("SFULE_D" #x3d) + ("SFUN_D" #x3e) ("CUST1_S" #xd0) ("CUST1_D" #xe0) ) @@ -252,14 +266,14 @@ () ) -(define-pmacro (float-setflag-insn mnemonic) +(define-pmacro (float-setflag-insn-base mnemonic rtx-mnemonic symantics) (begin (dni (.sym lf- mnemonic -s) (.str "lf.sf" mnemonic ".s reg/reg") ((MACH ORFPX32-MACHS)) (.str "lf.sf" mnemonic ".s $rASF,$rBSF") (+ OPC_FLOAT (f-r1 0) rASF rBSF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _S)) - (set BI sys-sr-f (mnemonic SF rASF rBSF)) + (symantics rtx-mnemonic SF rASF rBSF) () ) (dni (.sym lf- mnemonic -d) @@ -267,7 +281,7 @@ ((MACH ORFPX64-MACHS)) (.str "lf.sf" mnemonic ".d $rADF,$rBDF") (+ OPC_FLOAT (f-r1 0) rADF rBDF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _D)) - (set BI sys-sr-f (mnemonic DF rADF rBDF)) + (symantics rtx-mnemonic DF rADF rBDF) () ) (dni (.sym lf- mnemonic -d32) @@ -275,18 +289,43 @@ ((MACH ORFPX64A32-MACHS)) (.str "lf.sf" mnemonic ".d $rAD32F,$rBD32F") (+ OPC_FLOAT (f-r1 0) rAD32F rBD32F (f-resv-10-1 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _D)) - (set BI sys-sr-f (mnemonic DF rAD32F rBD32F)) + (symantics rtx-mnemonic DF rAD32F rBD32F) () ) ) ) +(define-pmacro (float-setflag-symantics mnemonic mode r1 r2) + (set BI sys-sr-f (mnemonic mode r1 r2))) + +(define-pmacro (float-setflag-insn mnemonic) + (float-setflag-insn-base mnemonic mnemonic float-setflag-symantics)) + +(define-pmacro (float-setflag-unordered-cmp-symantics mnemonic mode r1 r2) + (set BI sys-sr-f (or (unordered mode r1 r2) + (mnemonic mode r1 r2)))) + +(define-pmacro (float-setflag-unordered-symantics mnemonic mode r1 r2) + (set BI sys-sr-f (unordered mode r1 r2))) + +(define-pmacro (float-setflag-unordered-insn mnemonic) + (float-setflag-insn-base (.str "u" mnemonic) + mnemonic + float-setflag-unordered-cmp-symantics)) + (float-setflag-insn eq) (float-setflag-insn ne) (float-setflag-insn ge) (float-setflag-insn gt) (float-setflag-insn lt) (float-setflag-insn le) +(float-setflag-unordered-insn eq) +(float-setflag-unordered-insn ne) +(float-setflag-unordered-insn gt) +(float-setflag-unordered-insn ge) +(float-setflag-unordered-insn lt) +(float-setflag-unordered-insn le) +(float-setflag-insn-base un () float-setflag-unordered-symantics) (dni lf-madd-s "lf.madd.s reg/reg/reg"