From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7923) id 1BC9B3858002; Tue, 2 May 2023 20:10:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1BC9B3858002 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1683058224; bh=7ZuNS55Wv5Eynda9615jNyJzE1rvb2H1lMGXRtmieQw=; h=From:To:Subject:Date:From; b=hVR2sQ6lmr6n7tzVvKXjyNgsNFSjAfMKLlAR+WznQeMRDfFGY41ojACQ54fqeWS+K i/rP29KJ8lKb7iA+tqETZs+pLGs+mIb7klepX7v7LVwSkY3S2GEYfNLuiu1ZeLhUxY ggYYM5mHu8OU5y7R0sEpnT27Qy5BFxWSqclarTgk= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Patrick O'Neill To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-401] RISC-V: Enforce atomic compare_exchange SEQ_CST X-Act-Checkin: gcc X-Git-Author: Patrick O'Neill X-Git-Refname: refs/heads/master X-Git-Oldrev: 4990cf84c460f064d6281d0813f20b0ef20c7448 X-Git-Newrev: d199d2e56da2379004e7e0457150409c0c99d3e6 Message-Id: <20230502201024.1BC9B3858002@sourceware.org> Date: Tue, 2 May 2023 20:10:24 +0000 (GMT) List-Id: https://gcc.gnu.org/g:d199d2e56da2379004e7e0457150409c0c99d3e6 commit r14-401-gd199d2e56da2379004e7e0457150409c0c99d3e6 Author: Patrick O'Neill Date: Wed Apr 5 09:46:37 2023 -0700 RISC-V: Enforce atomic compare_exchange SEQ_CST This patch enforces SEQ_CST for atomic compare_exchange ops. Replace Fence/LR.aq/SC.aq pairs with SEQ_CST LR.aqrl/SC.rl pairs recommended by table A.6 of the ISA manual. 2023-04-27 Patrick O'Neill gcc/ChangeLog: * config/riscv/sync.md (atomic_cas_value_strong): Change FENCE/LR.aq/SC.aq into sequentially consistent LR.aqrl/SC.rl pair. Signed-off-by: Patrick O'Neill Diff: --- gcc/config/riscv/sync.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/config/riscv/sync.md b/gcc/config/riscv/sync.md index 0c83ef04607..5620d6ffa58 100644 --- a/gcc/config/riscv/sync.md +++ b/gcc/config/riscv/sync.md @@ -297,9 +297,16 @@ UNSPEC_COMPARE_AND_SWAP)) (clobber (match_scratch:GPR 6 "=&r"))] "TARGET_ATOMIC" - "%F5 1: lr.%A5 %0,%1; bne %0,%z2,1f; sc.%A4 %6,%z3,%1; bnez %6,1b; 1:" + { + return "1:\;" + "lr..aqrl\t%0,%1\;" + "bne\t%0,%z2,1f\;" + "sc..rl\t%6,%z3,%1\;" + "bnez\t%6,1b\;" + "1:"; + } [(set_attr "type" "atomic") - (set (attr "length") (const_int 20))]) + (set (attr "length") (const_int 16))]) (define_expand "atomic_compare_and_swap" [(match_operand:SI 0 "register_operand" "") ;; bool output