From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70080.outbound.protection.outlook.com [40.107.7.80]) by sourceware.org (Postfix) with ESMTPS id 00114383A606 for ; Thu, 30 Jun 2022 12:55:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 00114383A606 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Jh5KfrW8/8/KDek5FKvNIsFCcojlY4xF1S3FvxW7HUWvG0nQ0/oM/y0l9axY62bS2ZUCwMPZfKcAksfBrU0WuSO8JUCydNGlBmYi6ujkw6KOmpl+M1yom22RGOB4LJ9q0weYHpmJ477rgbQIkr/Bbepe6EWRTdnEV4DFKZaRFjDcAY514Y/u+wBHKws27Ltorx61kq1GuCZI1TWkYCoWQ+wI2Ey1Rrx3zpLCOhBpKUdx/BT/t2Y+cvNnNtc+U6AUpHwNymg4NTQa3NCXKDcljTYXIk1pwtSaphIYnkg/T0SCg7y+PoP/Et5TpRXJWLtckbEfin9oL0mXg35K8m4NVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pii8T1Uoh2x/r2Tzw8UDwfLMl97SgRyFy7USgpeL0A4=; b=oYizHNdPyE3Yy493mQBM1+NwIGNYMs72FroYdOO4c7nD/IChfEbpKU0Ay4GY5+fC1i1ARmhfS1KDE3XxYNQ2RCHboy1NAs3TiTVKa9+0d/o+wgDdPqF5By/s2GErFOVyxxDo/CzW4RHM7ezvMf5vzjvvf7qW4M+GDid7WKqU2Ic4uBfHh6W3AD2/pTkBgBumWyE3KD1SVNpDqhPUa2i9++3P0TKOKh88JTfOmGTwIz7FK8cXez2fmF0XOuUKult7FjW5oaeFuPldZmLZ1zTHNFWfUBSZbiXvVdjsjP7Y+GjwK8Te6HFfJn+6QrIPOC9/TmBs0e5jFVomDd/NyLQGRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7562.eurprd04.prod.outlook.com (2603:10a6:10:1f6::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.14; Thu, 30 Jun 2022 12:55:48 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.014; Thu, 30 Jun 2022 12:55:48 +0000 Message-ID: <53e719d3-482e-e1bc-663c-367fe0de7277@suse.com> Date: Thu, 30 Jun 2022 14:55:46 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 7/7] x86: introduce a state stack for .arch Content-Language: en-US To: Binutils References: <01f502ff-5b51-86d3-ed54-646df7d22037@suse.com> From: Jan Beulich In-Reply-To: <01f502ff-5b51-86d3-ed54-646df7d22037@suse.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: AM6P195CA0103.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::44) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e5c33b53-5735-4ee3-08f0-08da5a97dac5 X-MS-TrafficTypeDiagnostic: DBBPR04MB7562:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2NnbmN7fiajtaR5xTiHYtwOAqNEiXrttNcDEMLXJ74ANNqytjJjP0NXHoM+4BxiedNHQUfh4Oe9y3fftApRrDm22Lyru+GHZbhwItcEtWj8N/JhDdO1PdJAvYzH/HZHtUZUt5Tw56CXVJxFP0jI++VX2qaUoWUnpzDAC+h15Z9bQt5Dv9m9lwCPXMLwGRbdjF+gDGmEqQezA6TPopUZFpsQxy9CGpA3jAj+52D7wGd9AbEXQHgz0nqCqbcmInI3ym6TWo4goR9EBJJwt4Gewodja3N4Oyibwm4PhfJWYElE7CmtJ+K+gjg8RjRFuci/t1ex2L/z3njtqH3sQs9Bq6GFHq9YOuREpAjWazsImHfZkbtbDmpmRUWm41GtlFmvG/3lJcxfac1ovJ7Mi8fJ5BJhI72rCI9Y9t5h5vkv1JSTkmoYonq6GrkgsnHija6tbhRBAh7mEqk4BKVgdaCx2RQammKAyiKVh3VBpgkes8Mvhl+/Okr28VPC0Iri5y1K8UoiG/o4Dh/OlRXu511u2WeE1ufC4OlnAQyIeMmpHOYwvfrmJXLR8Col540DrXN7bcw7RGFASve4DWURe7M4Vhe3NU26DqoaT5TK+VJ83jySe8cRBr8Kw/zqz81KlOyXX6Lj9qEM+9PtwppCUqVOXZSfHxGbjI3bEJrJePW61PFmoFEB3jwwZv8Yw4C40LTqAKjd1Stjc5NMBksmpDV9H6++4DjINe5599qpOpHga+T8E2OOf3AMwOKxl45cG8mnG5UkOPr7G0jc5yLHoF5lLcNhDraU7aHn1VN2RLScLWn1k8j5b5KEh7rIPvQlqtXCjQOg7UrIdTxLrF0Bhmg0Bo3EqHwMykDdnB8h2tHwOE2jI6E4VFKdTc58k3IyGJAZP X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(39860400002)(136003)(376002)(396003)(366004)(346002)(6506007)(26005)(6512007)(2616005)(186003)(86362001)(38100700002)(41300700001)(83380400001)(8676002)(66946007)(66556008)(4326008)(66476007)(36756003)(6486002)(478600001)(5660300002)(8936002)(31686004)(6916009)(31696002)(316002)(2906002)(142923001)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QUJuTWdVMnlVTEdNK0oyNmY2amVFRXBFaXJZSWZFdVRFQk5UVngwdjRQc2pu?= =?utf-8?B?QzB5Mk04UnBMMzZ6bFBQWWVtSm1oN3VaV1V5VWMzVEtMYU9uOGtYUjhzNnp5?= =?utf-8?B?OGdCN3FHa1JrQVlhYkY5MGdNVSt1MWt0enc1Z2VqekJtUXpPNzEvVnBiWjZL?= =?utf-8?B?QjZTaXJ1S2hjRmRIZGJvMlJrd2pVYk1teHY3Q0Q4V0Z2dGVtOUs4a0JmSFo1?= =?utf-8?B?b0Uyc3Y0bjRiTUZVSEJadGtLNDhTdFV5WHJOUUowOHpXSHVBYnAvaE1GNG1J?= =?utf-8?B?MkVYaEd1TlVjYWdFVmNwSEhNb3ZxTTdDRnlZbDUrTW9DYnp3T0d5QmtxdCta?= =?utf-8?B?bGpNMUFhQ1paRVcxc1pKZUdnZ05VQ2RBNGdYd0d5a1N6REdUN1FZaFBzZHBm?= =?utf-8?B?eExTbE9raHJZRW1FR05DM21iS0kzNFh4QXkxYlVCakR5dytoamt3VG1ZQWRs?= =?utf-8?B?ZDNybUJpdDhoY1JkZXZua2FaUVNxd2lTUDhpYkJEcnpQTVZESU5zU29GUkdm?= =?utf-8?B?ZEFMV3h3L1hDWnoxL2RLQllOUnQzcWh1QXNaTm1JaHhsOWlpOEx3Q0ZzVnZF?= =?utf-8?B?OVl1dEJ0NHhLdUV0TnZZTkMwa2cybDdrNEsyNGFkSEZ6NGhDQUp0VE9yc2ts?= =?utf-8?B?bHR6dGZqMjY0aXlwcHNhNXl5bXhlZnJmbHJ2VG9zaWFFekwyRlFLcXp6QXhC?= =?utf-8?B?RUNPUFF4cXo1WXFBa0pFOTNwVjM0Z1NBVXNKbFJ5TzZINHFiaUVvZzc5elhj?= =?utf-8?B?dElXcFVuSzN2a01XTGc1OGZ1YWhYVmFPVHNiRnp2ZkpxNWtuRUp4VXg5M1cv?= =?utf-8?B?clA4S0ljTzJtNGRPRXhYRnF0Qy9HZnB2THFtL1hNMG1CdCt4U2s2UCtOTjVm?= =?utf-8?B?SzNQSVRsVlh2Q2JNQ1drZWZPU0pOVEFPTGF4emJLOFF5eEpFRGVsMS91Y1JP?= =?utf-8?B?bHBjVE9WNnBBZm9yZXROcy9CL1VzbG4rbGtXR296WlpKL1V5b2lkbFFwSktV?= =?utf-8?B?N0U1dmp0ZzRkcUtkMlNGQjVFeFFqL05TQUV3R09kY0VWNDNJenhBM01rR3F2?= =?utf-8?B?RUlOMmYwc2pJRkxpVWlYRnVxWjJFVENySTRFbGNaeFFPaHEyVHZzN1FUNTdK?= =?utf-8?B?RE5GR0sxOGJieHMxYXQ0YWFqWWlrOEVCT3lvYnRIamZSV0U3VDB4Ymd3T05P?= =?utf-8?B?QUN1UUs1aVNVM1BBVU00ZVYrcDhvYlI5eEZ4djYyenNnQnkrSy9seFl2UG1M?= =?utf-8?B?ZGZ6cmhlYkJXVzBDTkVrZXZLTE4yUXNXR1pQN2NtMUVxVnI3UnVWSmFqc08y?= =?utf-8?B?VDBNbnR1MllRTHFRYzFIN3kxOTV6MHR5T3c1T1d6NklVekJiUngrTlJNY25r?= =?utf-8?B?aUVxRUVaVjBFRU45aVJRN0daNjZxR2VsUUFBMEZsRjFndmJDeWFRdkVId0xF?= =?utf-8?B?UUhlQVY1eHFMaTRpc1VHN3lzdUVWa2FLTDUrMk5LTUZBeUU2Y2RUSnh2VFNH?= =?utf-8?B?YzA0Uk4yeG1JQVpVUGxBRGVUWDVkTnRJTGsrUUhwQ2ZXYVNBUWJORFVETDhM?= =?utf-8?B?ZXpXcjdORFEwa1RPOXJRUlNnRXhmUDU0REZrU0tOSDVJdzNJdDl6RXFJWFY3?= =?utf-8?B?STNNeWR1SDFDaVNaVU1nbGk5ODk1OHh2WGVNbnJMdVdlN1VQVG5Bc3FJSnl6?= =?utf-8?B?VFpFOWZrTXI5NE8yMDNQQjlaS2ZBTmZIY2xvNlZUZU0zM2h2VnVVcnZNZWtK?= =?utf-8?B?eFIvaEFtaUZLZ0RnZXk3S09MYXU1VlZXUXM2ZDFQUG5TQkk2M1hWeXNyWVdU?= =?utf-8?B?TTFQTkprZXFmSy9reStwczluTXJIQitCd09leWR5UmdQK0ZVRUpsYU4yR2pT?= =?utf-8?B?cjc0Rng5Q3BKZzRvMXdhQkNTNkdoblU5WVVUWVBZSldJTEdBRCtSbURQMkd1?= =?utf-8?B?eVFQR0o0Wll3WUpJbElldXVoWFphL0xkV1pkNkp3NVJtMDIzZXhJVTZjbVp5?= =?utf-8?B?c3ZIeFFhbVNqcDEzd2hXY09nTXpMdW1Cajh0eU52QnhJSzRLS3JmOWdTMFFu?= =?utf-8?B?dHZ1cTE0bmF5d3lybllpWmN2Q2pRbzRmRVIwL296SUpNdzlqVjhSTDQwcXN2?= =?utf-8?Q?m+syHmAtr82PkVQiuJhkWt7kd?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5c33b53-5735-4ee3-08f0-08da5a97dac5 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2022 12:55:48.4660 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: huCl58uRWPe3pBQ3zi3LoE7BgH9LjOYNWfmKlfd93UsIdAvMMxkXR+GJZ7iAYxLqpuyJikyXz0Fow607oIM6Tg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7562 X-Spam-Status: No, score=-3030.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jun 2022 12:55:52 -0000 When using just slightly non-trivial combinations of .arch, it can be quite useful to be able to go back to prior state without needing to re-invoke perhaps many earlier directives and without needing to invoke perhaps many "negative" ones. Like some other architectures allow saving (pushing) and restoring (popping) present/prior state. For now require the same .code to be in effect for ".arch pop" that was in effect for the corresponding ".arch push". Also change the global "no_cond_jump_promotion" to be bool, to match the new struct field. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -788,7 +788,7 @@ i386_cpu_flags cpu_arch_isa_flags; /* If set, conditional jumps are not automatically promoted to handle larger than a byte offset. */ -static unsigned int no_cond_jump_promotion = 0; +static bool no_cond_jump_promotion = false; /* Encode SSE instructions with VEX prefix. */ static unsigned int sse2avx; @@ -2663,6 +2663,20 @@ extend_cpu_sub_arch_name (const char *na static void set_cpu_arch (int dummy ATTRIBUTE_UNUSED) { + typedef struct arch_stack_entry + { + const struct arch_stack_entry *prev; + const char *name; + char *sub_name; + i386_cpu_flags flags; + i386_cpu_flags isa_flags; + enum processor_type isa; + enum flag_code flag_code; + char stackop_size; + bool no_cond_jump_promotion; + } arch_stack_entry; + static const arch_stack_entry *arch_stack_top; + SKIP_WHITESPACE (); if (!is_end_of_line[(unsigned char) *input_line_pointer]) @@ -2706,6 +2720,67 @@ set_cpu_arch (int dummy ATTRIBUTE_UNUSED j = ARRAY_SIZE (cpu_arch) + 1; } } + else if (strcmp (string, "push") == 0) + { + arch_stack_entry *top = XNEW (arch_stack_entry); + + top->name = cpu_arch_name; + if (cpu_sub_arch_name) + top->sub_name = xstrdup (cpu_sub_arch_name); + else + top->sub_name = NULL; + top->flags = cpu_arch_flags; + top->isa = cpu_arch_isa; + top->isa_flags = cpu_arch_isa_flags; + top->flag_code = flag_code; + top->stackop_size = stackop_size; + top->no_cond_jump_promotion = no_cond_jump_promotion; + + top->prev = arch_stack_top; + arch_stack_top = top; + + (void) restore_line_pointer (e); + demand_empty_rest_of_line (); + return; + } + else if (strcmp (string, "pop") == 0) + { + const arch_stack_entry *top = arch_stack_top; + + if (!top) + as_bad (_(".arch stack is empty")); + else if (top->flag_code != flag_code + || top->stackop_size != stackop_size) + { + static const unsigned int bits[] = { + [CODE_16BIT] = 16, + [CODE_32BIT] = 32, + [CODE_64BIT] = 64, + }; + + as_bad (_("this `.arch pop' requires `.code%u%s' to be in effect"), + bits[top->flag_code], + top->stackop_size == LONG_MNEM_SUFFIX ? "gcc" : ""); + } + else + { + arch_stack_top = top->prev; + + cpu_arch_name = top->name; + xfree (cpu_sub_arch_name); + cpu_sub_arch_name = top->sub_name; + cpu_arch_flags = top->flags; + cpu_arch_isa = top->isa; + cpu_arch_isa_flags = top->isa_flags; + no_cond_jump_promotion = top->no_cond_jump_promotion; + + XDELETE (top); + } + + (void) restore_line_pointer (e); + demand_empty_rest_of_line (); + return; + } for (; j < ARRAY_SIZE (cpu_arch); j++) { @@ -13685,6 +13760,10 @@ show_arch (FILE *stream, int ext, int ch { p = output_message (stream, p, message, start, &left, STRING_COMMA_LEN ("default")); + p = output_message (stream, p, message, start, &left, + STRING_COMMA_LEN ("push")); + p = output_message (stream, p, message, start, &left, + STRING_COMMA_LEN ("pop")); } for (j = 0; j < ARRAY_SIZE (cpu_arch); j++) --- a/gas/doc/c-i386.texi +++ b/gas/doc/c-i386.texi @@ -1504,7 +1504,7 @@ directive enables a warning when gas det supported on the CPU specified. The choices for @var{cpu_type} are: @multitable @columnfractions .20 .20 .20 .20 -@item @samp{default} +@item @samp{default} @tab @samp{push} @tab @samp{pop} @item @samp{i8086} @tab @samp{i186} @tab @samp{i286} @tab @samp{i386} @item @samp{i486} @tab @samp{i586} @tab @samp{i686} @tab @samp{pentium} @item @samp{pentiumpro} @tab @samp{pentiumii} @tab @samp{pentiumiii} @tab @samp{pentium4} --- /dev/null +++ b/gas/testsuite/gas/i386/arch-stk.l @@ -0,0 +1,43 @@ +.*: Assembler messages: +.*:3: Error:.*`cmovl'.* +.*:10: Error:.*`cmovg'.* +.*:17: Error:.*`cmovz'.* +.*:21: Error:.*`\.arch pop'.*`\.code32'.* +.*:28: Error:.*`\.arch pop'.*`\.code16gcc'.* +.*:32: Error:.*\.arch.*empty.* +GAS LISTING .* + + +[ ]*[0-9]*[ ]+\.text +[ ]*[0-9]*[ ]+start: +[ ]*[0-9]*[ ]+cmovl %eax, %ecx +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.arch push +[ ]*[0-9]*[ ]+\.arch default +[ ]*[0-9]*[ ]+\?\?\?\? 0F4DC8[ ]+cmovnl %eax, %ecx +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.arch pop +[ ]*[0-9]*[ ]+cmovg %eax, %ecx +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.arch push +[ ]*[0-9]*[ ]+\.arch \.cmov +[ ]*[0-9]*[ ]+\?\?\?\? 0F4EC8[ ]+cmovng %eax, %ecx +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.arch pop +[ ]*[0-9]*[ ]+cmovz %eax, %ecx +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.arch push +[ ]*[0-9]*[ ]+\.code16 +[ ]*[0-9]*[ ]+\.arch pop +[ ]*[0-9]*[ ]+\.code32 +[ ]*[0-9]*[ ]+\.arch pop +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.code16gcc +[ ]*[0-9]*[ ]+\.arch push +[ ]*[0-9]*[ ]+\.code32 +[ ]*[0-9]*[ ]+\.arch pop +[ ]*[0-9]*[ ]+\.code16gcc +[ ]*[0-9]*[ ]+\.arch pop +[ ]*[0-9]*[ ]* +[ ]*[0-9]*[ ]+\.arch pop +#pass --- /dev/null +++ b/gas/testsuite/gas/i386/arch-stk.s @@ -0,0 +1,34 @@ + .text +start: + cmovl %eax, %ecx + + .arch push + .arch default + cmovnl %eax, %ecx + + .arch pop + cmovg %eax, %ecx + + .arch push + .arch .cmov + cmovng %eax, %ecx + + .arch pop + cmovz %eax, %ecx + + .arch push + .code16 + .arch pop + .code32 + .arch pop + + .code16gcc + .arch push + .code32 + .arch pop + .code16gcc + .arch pop + + .arch pop + + .end --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -206,6 +206,7 @@ if [gas_32_check] then { run_dump_test "arch-13" run_dump_test "arch-14" run_list_test "arch-dflt" "-march=generic32 -al" + run_list_test "arch-stk" "-march=generic32 -al" run_dump_test "8087" run_dump_test "287" run_dump_test "387"