From patchwork Fri Oct 16 08:54:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 1383185 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=itM0gFZP; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CCKjS0l86z9sTq for ; Fri, 16 Oct 2020 19:55:07 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E6C80386F461; Fri, 16 Oct 2020 08:55:03 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by sourceware.org (Postfix) with ESMTPS id 41F583858C27 for ; Fri, 16 Oct 2020 08:55:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 41F583858C27 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=kito.cheng@sifive.com Received: by mail-pg1-x536.google.com with SMTP id j7so1033913pgk.5 for ; Fri, 16 Oct 2020 01:55:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Mb+/KsuMoc9sH3ZogqTKC5J22GJCWONbOnFDLj9Zzho=; b=itM0gFZPiBVXYOmW8PhrXS1EIK+t9/INVoXHBDCLkrgFxi9UM0JISR4/t9kb7j7Gml jPJER590RTEjkRcm2l0K3l3gnr5by0g0h2qE+gLoapTxklM0/4ogveWayZIw3BcfP8Zk T8MleARDGpgawmyRUSGRmgSlEshGYWqFTod8ps1cAxG46Y3hN3tfd22CTFNxGpRxEHAX +Th8Hl5BUIfRCiB7oz08pyAOyqEB4N0/fjYqJwso7CZ0dPud22SDZUgNuihCB2ed1g+O eEvFYq5WkPDETj+Ocb+26TYy1y6kyJwcajiaQzNx0pwUns0mTDgzTItnkOfGtthvzbM6 45qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Mb+/KsuMoc9sH3ZogqTKC5J22GJCWONbOnFDLj9Zzho=; b=D8LyH7LOOPwz+0B7QtdfolbHMCLbmwUuZ2pwhDFHOmhJeAgBUxoR+gNR4dq5fZr8fs WPlxRez6hyKVziO4EOt20kh2QNbTLTlNlX8fgW3u+zsi46URHayibZEWpG+DqY+B3Ga7 RpjHWcW5KrSylzHDoqHGs8PqaL91xSFu8RTt39vasTw1zVFajgZetQYEslVK5A4b+vJp hkAgF/tq9HMCgYeO/MmNIId1k9qjmgL4cCKEQEo20n+zZdaTaTKS6sMF11gYQBsWUW/l quRCWhZIEdNeLcUQGj9XeRgWwUXriM72yZddKMgglOpMpvRs77QSrz7Y0blklXrn25fZ dRSA== X-Gm-Message-State: AOAM5338EyIaYXPhExVhVykgKcWQM1/vNa0yj+OCW1vbeLgfE4CBvMnr lf1njpa1AaCg79baaiAVqjesWVuK5eTuYPScQIg= X-Google-Smtp-Source: ABdhPJwrkRt5euKFc2s+GQ/Z/8A5+l0Vcl93mjTceetX61w+VB5q79s3Izbcmd0nbk1+twMAYGTIdw== X-Received: by 2002:a63:4d0f:: with SMTP id a15mr2213068pgb.250.1602838499862; Fri, 16 Oct 2020 01:54:59 -0700 (PDT) Received: from hsinchu02.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id 194sm1991652pfz.182.2020.10.16.01.54.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2020 01:54:59 -0700 (PDT) From: Kito Cheng To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com Subject: [committed] RISC-V: Handle implied extension in multilib-generator Date: Fri, 16 Oct 2020 16:54:54 +0800 Message-Id: <20201016085454.27981-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 X-Spam-Status: No, score=-14.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kito Cheng Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" - -march has handle implied extension for a while, so I think multilib-generator should handle this well too. - Currently only add rule for D imply F. gcc/ChangeLog: * config/riscv/multilib-generator (IMPLIED_EXT): New. (arch_canonicalize): Update comment and handle implied extensions. --- gcc/config/riscv/multilib-generator | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/gcc/config/riscv/multilib-generator b/gcc/config/riscv/multilib-generator index 8f4df183db21..f444d0ebc746 100755 --- a/gcc/config/riscv/multilib-generator +++ b/gcc/config/riscv/multilib-generator @@ -38,8 +38,14 @@ reuse = [] canonical_order = "mafdgqlcbjtpvn" +# +# IMPLIED_EXT(ext) -> implied extension list. +# +IMPLIED_EXT = { + "d" : ["f"], +} + def arch_canonicalize(arch): - # TODO: Support implied extensions, e.g. D implied F in latest spec. # TODO: Support extension version. new_arch = "" if arch[:5] in ['rv32e', 'rv32i', 'rv32g', 'rv64i', 'rv64g']: @@ -57,14 +63,24 @@ def arch_canonicalize(arch): if long_ext_prefixes_idx: first_long_ext_idx = min(long_ext_prefixes_idx) long_exts = arch[first_long_ext_idx:].split("_") - std_exts = arch[5:first_long_ext_idx] + std_exts = list(arch[5:first_long_ext_idx]) else: long_exts = [] - std_exts = arch[5:] + std_exts = list(arch[5:]) + + # + # Handle implied extensions. + # + for ext in std_exts + long_exts: + if ext in IMPLIED_EXT: + implied_exts = IMPLIED_EXT[ext] + for implied_ext in implied_exts: + if implied_ext not in std_exts + long_exts: + long_exts.append(implied_ext) # Single letter extension might appear in the long_exts list, # becasue we just append extensions list to the arch string. - std_exts += "".join(filter(lambda x:len(x) == 1, long_exts)) + std_exts += list(filter(lambda x:len(x) == 1, long_exts)) # Multi-letter extension must be in lexicographic order. long_exts = sorted(filter(lambda x:len(x) != 1, long_exts))