From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id 98136385801E for ; Fri, 19 Jan 2024 10:52:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 98136385801E Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 98136385801E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705661551; cv=none; b=d5YT+MfvtW2DHm/rtraj99RCK2+TFzXA/qZdgPOAeoRQMgvxZrEUv8Kvf64nswSky/+2EomoP5IAA1cY0w9ETtmKKy43+wVngl7GroA6zgw2tpak4R/F+tlNPAcUKkBfJaMdOUybg7jbMIFuE8mS7kl62Hh0O/VF5imYXaC2wlI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705661551; c=relaxed/simple; bh=OLChfSm5IIZI+XAQYL0PA7hQ7QQYSqfdRJaK9EGdHTc=; h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject:To; b=cHpKenFyQ3DMoJtcKv3sXTZ0b0K52QKH2cfa8vvc2kjQOY4X24YFycUFxwzBe30tx2DiYHv94EwnLDUManzb89uJCFrsyi1/TQqhZYcfijP3rCqJwbFN7PfhP7XOqvFKJ/nA+O+ZzZpwmlmn1GzK1yddHNkMq1fftvHlLt4ydVs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-337c40fde20so551604f8f.0 for ; Fri, 19 Jan 2024 02:52:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1705661546; x=1706266346; darn=sourceware.org; h=content-transfer-encoding:autocrypt:content-language:cc:to:subject :from:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=UbeLZZfNYQ3VYmhfEKpvMFvw3RsB5VxM+DhsV1jVnvc=; b=DPZXw/u4/3f+g+tIr2mPTIKMfHGMzq6e47PJq3Ezv+TRxL509Ywyg6tear6Ia5A0TW ryN6jUqFZr/yP8mWvAKiGLTFKvnIueaZ6gDyL1wfrBxR4HCEHZWOlDsjyH/pu6k56YQL XaYdrYa34aVPzwL6kbc8fL3VEWwsaDgalqlaZWHYsVBPPiDs9I6pmmS+vgT+aFrp6mcC BXRX9QTVv8h/z4232/OHf3RLvTW/lrYab4QH4qNyhSjQBe1bMDs9t8l5/w1/ltq5MKuY CkD5DPqCIl7qFGKqvpA1+1rNOcnJE73EwsX/+KMKU10fDSMjhbO+Ct1tzgK4aEvvE6N9 ApEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705661546; x=1706266346; h=content-transfer-encoding:autocrypt:content-language:cc:to:subject :from:user-agent:mime-version:date:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=UbeLZZfNYQ3VYmhfEKpvMFvw3RsB5VxM+DhsV1jVnvc=; b=rEA2mQnW3hEs5zeIK79Su7dnzlPhsHgU+0do5FAaUXGB5Ta+8uaXc0V5POjI48NQnX 0lhs2Yvi2SbyLN2B28Hp1uaSK9hiMxVveHzVd9jtKnTp9QmnXaf/iKoINKlHHF55EfJZ fKIrJr7SjTflZfTs7HlbcVmvbfCUuLTYtzXT3nhB67sp32EQ0AMBxr8JwPfgZ+aG8ADh TpQhztMiTQUDUHu2L7ES1JerzUcubzoh4RX+LRiQpxv5IsTcChusGdGG9t6sIOBo/UIu fnAwAfWi2GFAsOd4xIm9x61gREPTc7IkBKd5K6fu9A+6DGL41FISwfFLiwjEqTjpf/Gc hWEA== X-Gm-Message-State: AOJu0Yy+L5QTdPWo6RM6BAv5cPdJNmtCLYzl/UqPjv+oIYmt3syIrHl4 tDgjvPdpphHeD0wmML7k2d56hw9jPeqfOd0qE8+T5clBlMyYlw7ngiEjdWs5LGSSGos722Pw5rM = X-Google-Smtp-Source: AGHT+IGwErSOs4GxaAU/xvJHNoaAjDzyHN2iqavlW/uBjy/g9lWGcyL1DggFzaL/WUiWUyY7SUhvLw== X-Received: by 2002:adf:f645:0:b0:337:c654:c822 with SMTP id x5-20020adff645000000b00337c654c822mr1469416wrp.127.1705661546268; Fri, 19 Jan 2024 02:52:26 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id v3-20020a5d5903000000b00336c43b366fsm6199720wrd.12.2024.01.19.02.52.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jan 2024 02:52:26 -0800 (PST) Message-ID: <98f2a0d4-2d56-4278-a19c-7a31ada5dd2f@suse.com> Date: Fri, 19 Jan 2024 11:52:25 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Jan Beulich Subject: [PATCH v2] x86: actually implement .noopt To: Binutils Cc: "H.J. Lu" Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3025.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: For quite some time we've had support for -O command line options. With that ignoring at least .noopt isn't really a good idea. Re-purpose the optimize-3 test for testing this directive's effect as well. As to the doc addition - this uses the same text as is there for the {nooptimize} pseudo-prefix, despite me not being convinced of the "size" part being fully accurate there (and hence also here). --- I haven't been able to find any applicable documentation for other (perhaps legacy) assemblers' support of .noopt (and .optim). An option to also handle .optim would be to - restore previously saved settings (if optimization was enabled on the command line), - enable a pre-determined level of optimization if optimization was not enabled on the command line. Thoughts? --- v2: Deal with possible arguments. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -139,6 +139,7 @@ arch_entry; static void update_code_flag (int, int); static void s_insn (int); +static void s_noopt (int); static void set_code_flag (int); static void set_16bit_gcc_code_flag (int); static void set_intel_syntax (int); @@ -1231,7 +1232,7 @@ const pseudo_typeS md_pseudo_table[] = {"value", cons, 2}, {"slong", signed_cons, 4}, {"insn", s_insn, 0}, - {"noopt", s_ignore, 0}, + {"noopt", s_noopt, 0}, {"optim", s_ignore, 0}, {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT}, {"code16", set_code_flag, CODE_16BIT}, @@ -4992,6 +4993,18 @@ optimize_encoding (void) } } +static void +s_noopt (int dummy ATTRIBUTE_UNUSED) +{ + if (!is_it_end_of_statement ()) + as_warn (_("`.noopt' arguments ignored")); + + optimize = 0; + optimize_for_space = 0; + + ignore_rest_of_line (); +} + /* Return non-zero for load instruction. */ static int --- a/gas/doc/c-i386.texi +++ b/gas/doc/c-i386.texi @@ -763,6 +763,10 @@ be suffixed by @code{@{:d@var{n}@}} to s This can be combined with an embedded broadcast specifier: @samp{8(%eax)@{1to8:d8@}}. +@cindex @code{noopt} directive +@item .noopt +Disable instruction size optimization. + @c FIXME: Document other x86 specific directives ? Eg: .code16gcc, @end table --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -614,6 +614,7 @@ if [gas_32_check] then { run_list_test "optimize-6a" "-I${srcdir}/$subdir -march=+noavx -al" run_dump_test "optimize-6b" run_list_test "optimize-7" "-I${srcdir}/$subdir -march=+noavx2 -al" + run_dump_test "noopt" run_dump_test "lea-optimize" run_dump_test "lea16-optimize" run_dump_test "lea16-optimize2" --- /dev/null +++ b/gas/testsuite/gas/i386/noopt.d @@ -0,0 +1,4 @@ +#as: -Os -I${srcdir}/$subdir +#objdump: -drw +#name: .noopt directive +#dump: optimize-3.d --- /dev/null +++ b/gas/testsuite/gas/i386/noopt.s @@ -0,0 +1,2 @@ + .noopt + .include "optimize-3.s" --- a/gas/testsuite/gas/i386/optimize-3.d +++ b/gas/testsuite/gas/i386/optimize-3.d @@ -1,4 +1,4 @@ -#as: -Os +#as: -Os --defsym USE_PREFIX=1 #objdump: -drw #name: optimized encoding 3 with -Os --- a/gas/testsuite/gas/i386/optimize-3.s +++ b/gas/testsuite/gas/i386/optimize-3.s @@ -1,24 +1,32 @@ # Check instructions with optimized encoding + .macro noopt insn:vararg + .ifdef USE_PREFIX + {nooptimize} \insn + .else + \insn + .endif + .endm + .text _start: - {nooptimize} testl $0x7f, %eax + noopt testl $0x7f, %eax - {nooptimize} lock xchg %ecx, (%edx) - {nooptimize} lock xchg (%ecx), %edx + noopt lock xchg %ecx, (%edx) + noopt lock xchg (%ecx), %edx - {nooptimize} vmovdqa32 %ymm1, %ymm2 - {nooptimize} vmovdqa64 %ymm1, %ymm2 - {nooptimize} vmovdqu8 %xmm1, %xmm2 - {nooptimize} vmovdqu16 %xmm1, %xmm2 - {nooptimize} vmovdqu32 %xmm1, %xmm2 - {nooptimize} vmovdqu64 %xmm1, %xmm2 + noopt vmovdqa32 %ymm1, %ymm2 + noopt vmovdqa64 %ymm1, %ymm2 + noopt vmovdqu8 %xmm1, %xmm2 + noopt vmovdqu16 %xmm1, %xmm2 + noopt vmovdqu32 %xmm1, %xmm2 + noopt vmovdqu64 %xmm1, %xmm2 - {nooptimize} vpandd %xmm2, %xmm3, %xmm4 - {nooptimize} vpandq %ymm2, %ymm3, %ymm4 - {nooptimize} vpandnd %ymm2, %ymm3, %ymm4 - {nooptimize} vpandnq %xmm2, %xmm3, %xmm4 - {nooptimize} vpord %xmm2, %xmm3, %xmm4 - {nooptimize} vporq %ymm2, %ymm3, %ymm4 - {nooptimize} vpxord %ymm2, %ymm3, %ymm4 - {nooptimize} vpxorq %xmm2, %xmm3, %xmm4 + noopt vpandd %xmm2, %xmm3, %xmm4 + noopt vpandq %ymm2, %ymm3, %ymm4 + noopt vpandnd %ymm2, %ymm3, %ymm4 + noopt vpandnq %xmm2, %xmm3, %xmm4 + noopt vpord %xmm2, %xmm3, %xmm4 + noopt vporq %ymm2, %ymm3, %ymm4 + noopt vpxord %ymm2, %ymm3, %ymm4 + noopt vpxorq %xmm2, %xmm3, %xmm4