From patchwork Fri Aug 2 05:11:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hau Hsu X-Patchwork-Id: 1968125 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.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=RcDP9b84; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.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 ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WZv8l6rkXz1yZl for ; Fri, 2 Aug 2024 15:12:20 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4318B3858430 for ; Fri, 2 Aug 2024 05:12:18 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by sourceware.org (Postfix) with ESMTPS id E906B3858D26 for ; Fri, 2 Aug 2024 05:11:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E906B3858D26 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=sifive.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E906B3858D26 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1722575519; cv=none; b=nZboHerBHMDw9wiRefX9FupbcYgbu1RB0bBmOsbeDeF9LnXUH0nNs/H6DFfXsP3ttTJCRh833Nn8YWNIo2ypvt1mO18y/iFxQH1OW9KcxoX2lBeIO6iHce+LrVgKIjv2rzRKF5esXQJKYEkOST2ks6hCLkDTdrIdxDey3FIAOXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1722575519; c=relaxed/simple; bh=jymeSFH4Ge5Stplsyexexvp/Qr1KME8XbIjbacWdxag=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=SsA1+TT26hK8qwvHrCGwtCxMlDtTpbwMsvlqvAnVB5m0kk1TXHFrwE/2wlWzJbSaZKm3gdUMrlpQ5t5y3tX+cjUp+UG1ni6W8/fDvPiB41y7z9mg5kBT2eOFUAGzt0UkIs2WWJBVAzm9CrdnZP8l76LUCoVh3EiXGbMvIHnbyAQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-7104f93a20eso2326510b3a.1 for ; Thu, 01 Aug 2024 22:11:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1722575515; x=1723180315; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=U/IEyIVFL02I0wqvCmnV5AL0gevQFZZCUgYtFFZj2uo=; b=RcDP9b847Opxc5z7npcMYUN5hzauLpkEvtMk8odHRZ3nlR3zM1HL9BfEDqm3BESj2B JngpKm8jQl6jhTo9ULHtuzHZPsxti3kHp8uumbIQx/f2OGYoKilkKm+mE42mTQGsT5tu FuQoQbRzdttfwhawwgTvpX1i493qqi0LwikKrOEJiitP+/Y9xeOY58tRoCPWEwQQc8A6 R+j6bpb/V93kpuBfVjSiLrfdEdM2Hx8BdlKh96ZsyapiyBFrOoO28ChaGR26q9ZrvI2P C5Pljl1ud4+SMrj6UMjKYozNWAGdkl6HNPnrezNyydvvNM+aYzDDThrkdtXCRwywIzq1 5KQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722575515; x=1723180315; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=U/IEyIVFL02I0wqvCmnV5AL0gevQFZZCUgYtFFZj2uo=; b=EDKjjnnHGF9vdteG0YVB6bV25hyJp7dBQCabudKajx5fMD7bo9rzLhrvZwui089C0s ONggA4+E6TtuKw0eMiQaY7SkbkQxEGcuHSfYDevzaWGlTgbe0h4WZVB3DSbNM61+UwrV 8ow3GlnVIfecqvoEX8AEN1JnygW6+J1UM0QJWJu/c6pr/Q6XmM+ErEhn2uuBO5cWkSc6 WLhEe5HzMikAnlUrR/YP4MwOmSJ1k9OHYlIm92yJq8YVwlLm44JCzsP3D1/U52WLTD/I WujrYtc2yzED89aDgwv4KDK+oLxGETO4g4wYvl8ZYeGsszdgxsQWKGbZI+wmCubQr4t5 Ahwg== X-Gm-Message-State: AOJu0YytYw+3vJGk6JJ+tD6BfFmAhmp+IpHW3ioNHT99L4N6ZWpgNtcG GZQr/NhaJtXdF5N3kqPd0/7uVv7QZ8Sc9uYZzBZ4nnxEvqBPvrsEPphoLXypog8Cx6e9a8A+LLT DwXJK0RA1bb7KtcrvjhtdYYPh/hBjm1kClS/8Mf2/YAUUo0kJAgZQwPJhBRZCBMdjQeStyWnE4K ApLcItaa6sFYMAqh/oUIpsq/0BiU/6hfSgeiSMx+g= X-Google-Smtp-Source: AGHT+IFtxuwvD9+prl9VjoUfNChqDqHHrt1m0zDM33b8vzUguW/CuJhGOAuxg30WrYTMHj38ng8UQg== X-Received: by 2002:a05:6a20:914f:b0:1c2:956a:a909 with SMTP id adf61e73a8af0-1c6995a5fbbmr3337663637.27.1722575514970; Thu, 01 Aug 2024 22:11:54 -0700 (PDT) Received: from sw05.internal.sifive.com ([4.53.31.132]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1ff59299240sm7811965ad.262.2024.08.01.22.11.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Aug 2024 22:11:54 -0700 (PDT) From: Hau Hsu To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, hau.hsu@sifive.com Subject: [PATCH v2] RISC-V: Add --with-cmodel configure option Date: Fri, 2 Aug 2024 13:11:51 +0800 Message-Id: <20240802051151.3658614-1-hau.hsu@sifive.com> X-Mailer: git-send-email 2.39.3 MIME-Version: 1.0 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org Sometimes we want to use default cmodel other than medlow. Add a GCC configure option for that. gcc/ChangeLog: * config.gcc (riscv*-*-*): Add support for --with-cmodel configure option. * config/riscv/riscv.h (TARGET_RISCV_DEFAULT_CMODEL): Define default cmodel. * configure: Regenerate. * configure.ac: Add --with-cmodel configure option. * doc/install.texi: Document --with-cmodel configure option. * doc/invoke.texi (-mcmodel): Mention --with-cmodel configure option. --- gcc/config.gcc | 19 +++++++++++++++++-- gcc/config/riscv/riscv.h | 2 ++ gcc/configure | 15 +++++++++++++-- gcc/configure.ac | 5 +++++ gcc/doc/install.texi | 4 ++++ gcc/doc/invoke.texi | 6 ++++-- 6 files changed, 45 insertions(+), 6 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index a36dd1bcbc6..a5ca9d172ca 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4723,7 +4723,7 @@ case "${target}" in ;; riscv*-*-*) - supported_defaults="abi arch tune riscv_attribute isa_spec tls" + supported_defaults="abi arch tune riscv_attribute isa_spec tls cmodel" case "${target}" in riscv-* | riscv32*) xlen=32 ;; @@ -4879,6 +4879,21 @@ case "${target}" in exit 1 esac fi + + # Handle --with-cmodel. + if test "x${with_cmodel}" != xdefault; then + # Make sure --with-cmodel is valid. If it was not specified, + # use medlow as the default value. + case "${with_cmodel}" in + medlow | medany | large) + ;; + *) + echo "invalid option for --with-cmodel: '${with_cmodel}', available values are 'medlow' 'medany' 'large'" 1>&2 + exit 1 + ;; + esac + tm_defines="${tm_defines} TARGET_RISCV_DEFAULT_CMODEL=${with_cmodel}" + fi ;; mips*-*-*) @@ -6071,7 +6086,7 @@ case ${target} in esac t= -all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa" +all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa cmodel" for option in $all_defaults do eval "val=\$with_"`echo $option | sed s/-/_/g` diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 6f040011864..68173ebccb4 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -65,6 +65,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); --with-tune is ignored if -mtune or -mcpu is specified. --with-isa-spec is ignored if -misa-spec is specified. --with-tls is ignored if -mtls-dialect is specified. + --with-cmodel is ignored if -mcmodel is specified. But using default -march/-mtune value if -mcpu don't have valid option. */ #define OPTION_DEFAULT_SPECS \ @@ -77,6 +78,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ {"isa_spec", "%{!misa-spec=*:-misa-spec=%(VALUE)}" }, \ {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"}, \ + {"cmodel", "%{!mcmodel=*:-mcmodel=%(VALUE)}" }, \ #ifdef IN_LIBGCC2 #undef TARGET_64BIT diff --git a/gcc/configure b/gcc/configure index 557ea5fa3ac..826caf8dc2c 100755 --- a/gcc/configure +++ b/gcc/configure @@ -1000,6 +1000,7 @@ with_changes_root_url enable_languages with_multilib_list with_multilib_generator +with_cmodel with_zstd with_zstd_include with_zstd_lib @@ -1880,6 +1881,7 @@ Optional Packages: SH and x86-64 only) --with-multilib-generator Multi-libs configuration string (RISC-V only) + --with-cmodel Code model configuration string (RISC-V only) --with-zstd=PATH specify prefix directory for installed zstd library. Equivalent to --with-zstd-include=PATH/include plus --with-zstd-lib=PATH/lib @@ -8381,6 +8383,15 @@ else fi + +# Check whether --with-cmodel was given. +if test "${with_cmodel+set}" = set; then : + withval=$with_cmodel; : +else + with_cmodel=medlow +fi + + # ------------------------- # Checks for other programs # ------------------------- @@ -21406,7 +21417,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21409 "configure" +#line 21420 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21512,7 +21523,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21515 "configure" +#line 21526 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index eaa01d0d7e5..1339bb2ba3b 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1212,6 +1212,11 @@ AC_ARG_WITH(multilib-generator, :, with_multilib_generator=default) +AC_ARG_WITH(cmodel, +[AS_HELP_STRING([--with-cmodel], [Code model configuration string (RISC-V only)])], +:, +with_cmodel=medlow) + # ------------------------- # Checks for other programs # ------------------------- diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 4973f195daf..53f8dd21e37 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1519,6 +1519,10 @@ Use big endian by default. Provide a multilib for little endian. Use little endian by default. Provide a multilib for big endian. @end table +@item --with-cmodel=@var{cmodel} +Specify what code model to use by default. +Currently only implemented for riscv*-*-*. + @item --enable-threads Specify that the target supports threads. This affects the Objective-C compiler and runtime diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 54ecd9a00eb..f219cd3db19 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -31285,8 +31285,10 @@ element-misaligned vector memory access. @item -mcmodel=medlow Generate code for the medium-low code model. The program and its statically defined symbols must lie within a single 2 GiB address range and must lie -between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be -statically or dynamically linked. This is the default code model. +between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be statically +or dynamically linked. This is the default code model unless GCC has been +configured with @option{--with-cmodel=} specifying a different default code +model. @opindex mcmodel=medany @item -mcmodel=medany