From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2057.outbound.protection.outlook.com [40.107.7.57]) by sourceware.org (Postfix) with ESMTPS id 7F47A385C301 for ; Fri, 2 Dec 2022 10:21:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7F47A385C301 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-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CRDfA6efAbh+9dMt/NOAwu2LVQiNas6mxV/TbHY6v6nEOlEokxfAaZ+gONbSHqYJ8UQ8RvD7nPMOeYjecbtwgXRCiARud5axE4+r7f8IZdsh53V9ZG8CKqdzhyeSbQqvuxfel4DhcbB/mXph3s5fEEDDBASTWmID/wrxj25r6Ntft/AekY7yG63dBaMbAerLX1/ASmpHt99iTyb1O7wBQkvMCCX6LFx2HodBSA7Yld0QKMgb6ttyeiP0eHpioX72GgwNQVar3YowJu+jUyrDXQOU2Q5RZ9dPpS+8L+GaWGs8IDVxVkO9gDnlRScmLJFaxgmRfej8B5GOgBXHZXD1lw== 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=FYwz0qyr/ShyMkcaU/mcaY0R8ouqOWG8kBYEMIYxMV8=; b=TiSOwp2hppOtzRSh3eDpSvQk2fcbi9sRdCec8ESbx1uoBNRkkvsrWHknyuk5/iYT6hcL16HIH+my4EvQLdHTjSTFtNCpKkImzUp0Dax5KWal+WIepU4kj7bFRnx46BUsuJ8u1/FyMmH19xDeIKJF1c1bLVBMHM3sNAPygFfFZMtskPiMTtd16rxvvUEMVLaoKcPAUYHg2EIPQ7o2GCygG0YnywNTAXWSboGAIAQFlZaMU/qA8TkHRiKGjGkoj2wrjhkXem07dXW6u5om1mBS9sugVEDXtsSj4vhoe+ywT0pWD1lkwOVEkHMpp4NjEX5HU9gxRlBkNnute4j5gCL8Fw== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FYwz0qyr/ShyMkcaU/mcaY0R8ouqOWG8kBYEMIYxMV8=; b=EZvWK8zlnJr0kz9JPl5Rm52SQQmlFMBGOvZDcAYB8wLjKMN6/TCr/pAJhSit7codvbZR2ambck7WOCMCjoQW2w71svt4EQiKjx12XohePDzO53GDVpo3XFdsawBE4fdgv5CX17RmBOt1UNIKyWam3tuorq2lY9p0WrfSWIH1vx6hxh8spRbLpJsyitAjydogshqkDwoPHR7nao25WG/Jui6WO4MF5sQqjgu8trnf4d5UodvWzODhAcvKFcZy1QWVyy4JN5xwiDNrIKQgCheyoMG1X5BkPrZ3b0Fiu7fP2HeaYdO0VMSgQ5rJfQjzpd6L5XC72Yntqg7QXEprVJimwA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM8PR04MB7409.eurprd04.prod.outlook.com (2603:10a6:20b:1c5::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.19; Fri, 2 Dec 2022 10:21:04 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::4da2:ea8b:e71e:b8d8]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::4da2:ea8b:e71e:b8d8%4]) with mapi id 15.20.5857.023; Fri, 2 Dec 2022 10:21:04 +0000 Message-ID: Date: Fri, 2 Dec 2022 11:21:02 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: [PATCH v7 6/7] x86: drop (now) stray IsString Content-Language: en-US To: Binutils Cc: "H.J. Lu" References: From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR0P281CA0067.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::21) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM8PR04MB7409:EE_ X-MS-Office365-Filtering-Correlation-Id: 44fe16b0-91c2-4eec-0c61-08dad44eead4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DRvhxvp5tOOfcNz1/0tqZ4lhAahDie3Pkpi0Y5VrjQN0WGB7pUmjbbSMlWEnZcRnFx06wv8+aXz8GvT4eq5yLaXrzhrGzUgSyQurdoKG+cu3M8XPB51GS9ZBvijkqmTg3F0lZyIDW8j94aXbiCha4onuznY24o3R7wkEo8apbcYf42pAVfLirqFcTYlMxPYL6fi9GYYMYim8c0HSBnhGyVRz6F2ADMZ68JcCvMgbiKSvfNL2CN93M41nkZOV7mM1cT+C8GQipc6rfUaUqHIewWxjnPWQvHmEIVU1vmzyveYcu5TY3JHvlwG0HaFQE1/VeQPYf/EOb5v8hxmvQbGFi5LKfNEw3ta5efLVx8aZqQDKR40cdyOOZkBgME9NiDQjxM0WCDLGiUWKsBlnVzp+iPWT8ZEVh63v6pD9niUzJAUctSci6LHPhVkidjKHQ01pEhuKi6TZXfVDF7cus3WSBvrvI//p0gZPBVtbDOMXA6o58zLkcgNoSDQ5KYJk0ZvIfQ4ONcW94weqPvoQtc63O6C7sj3yJQE3eyIeEoCoysBk8XJLX3juWpd3ov7QiMLlASL8HIjZCRTaI3zO82ggFZxXABBkS6AubKbsM3UXcOV29+sX6u/YbURgtk7TNh03ivRVRDXdw4gSwC3Jxk6sUMcHdeBQ6con4XJQ+XvsqRbQ3AT37KOF/Z25qetqSwdCMyYdsV3SF0GnqtqJZphBLYZif7A06Bi363fT8CC4HIM= 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:(13230022)(6029001)(39860400002)(346002)(136003)(366004)(396003)(376002)(451199015)(31686004)(2616005)(2906002)(26005)(36756003)(8936002)(6486002)(6512007)(5660300002)(31696002)(86362001)(41300700001)(6506007)(66476007)(478600001)(186003)(66556008)(66946007)(38100700002)(6916009)(316002)(8676002)(83380400001)(4326008)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aytqQTNGNWRXc2tKNmRFd3o2TmZzK1gxZTRBa010U0tLYlpLZnZwaUFIZThs?= =?utf-8?B?WDAwSFZ1SktYQXVOMGo2N0svNi9CY0xlUk5EMkJvaTQ5ZnZOd2dXOHgvOXY2?= =?utf-8?B?cjF6TjhCWktJdE8zdEowamhTWUsyYzd2bHBJSjl6SFBjeXlaN0tJc1k1V0NQ?= =?utf-8?B?czVDaWRCQlRsU25CMDg2VTljV0FWNzRFQjVVOW5wSERxaVE1eFNBZ1l0ZVpt?= =?utf-8?B?OS9NclZ1a3JSdkdVRStVeXFwd0xFOTFJTHhlbFlpVGE1QjMxR1QrZTNndE9O?= =?utf-8?B?Y3lDUXU0bTk0RmFFR1VCUU9YaXZ1QWZISWliS3ErWldISzRjTEhCS21BK05n?= =?utf-8?B?Y294ZXk4dlowWUNTOFo5WVFWQnJZZW40WnVLMjBXalcrLzNkM1hoTXFlQUpr?= =?utf-8?B?UVZxZk81eWZ4SUNheWZ5dmVpOGZ0QXdpbTFia1RmMml3dWg4YkU1MG1XYmJO?= =?utf-8?B?KzdaK204Q3ZGRER3TmN0SHdVT1U0ZDVNNm5rUFU4VjRESXRMYUljSE8wcTd5?= =?utf-8?B?UjlGYm40eEdJdk9xWjFIVHF4OTg3RGdMdytvZFJvTVBZQkJKd2x4cFM1Tk5s?= =?utf-8?B?a3I3QWRVaVJqTDJBQmYzYjVYa0xWdWk2WUlMdWlKRWJ1Z3FYMmw3aERUWW1G?= =?utf-8?B?RGxDVExRWGNlUEE0di9DQVdJcWlPS3MyQXFNOW9rYytCdVQ4NllYWXJJY251?= =?utf-8?B?aUYwSloxME8wZjEzRjhXMDY3bGVYYjlUOHJXVk1WTkwrcnphRGQyZ3lyWGpL?= =?utf-8?B?VklaVzlpNDVMVHN2dnYvZGEzK1hPaUFITWRocjl2d3g0NjNCVWZ0cU5IaEsr?= =?utf-8?B?cTVIS285eXNRbnJReDhOS2VlV21JSmd0ZmtrSmFHekxBbFFIR1g4UERyVUlM?= =?utf-8?B?dlhBNGtUaTJJV2l2YnJ3aDEwZ2RncUIwTGJlaHdKM0Roa21wd1FZcmdOZjQ0?= =?utf-8?B?Slp4QXplRFNPYTNvSGcwbjlBM0wrclQrQS9xWDIzc1BWa1JjdzRTeWx0UitC?= =?utf-8?B?aEdENEJyUW9vL1dCUVYvN3I3d2c2VThkdStmQldNOWdtemxnN0JwR3NzbkpZ?= =?utf-8?B?SmZqdkFTMTd5R21nRWpMTFpwVzVYZHdWOVNMRVpwZ1p0Rk9jU0VRbHVXMlpi?= =?utf-8?B?b1ZyVXJxWWR0SUZpRTZ4enkxdlhDSUNxd2ZLeGRpZkpMaWZsekRkckw1WkpT?= =?utf-8?B?MmptVVl3V01yV3BIN0dPbnIyM2sxUlpycEdPdEloZzkzMzZnTHhVb2oyUzlF?= =?utf-8?B?YkhqUldTWVdpOSszNlllN1BWNFJuWUVnNHB3UHBWZVJ0blovYUhhUHMrU3B4?= =?utf-8?B?aXltWkI3MVc0K2lLU3k1bHVCcjlSSXVTVDZMQ1BudlBIUFUzenBwZFRBekNr?= =?utf-8?B?M0RNY0FBVGlPbG5Qay9PQzhUTTJRL1RXQ2lhK0tGSVdCSXNrazBSVGJmYUhM?= =?utf-8?B?bWt3eGwrcTBrMkUzRjJMRHRxSzBXSFk4UFdxemJNY1g1U2diZDY2Qkc1anpE?= =?utf-8?B?OHZCM1djWk1XcXVyTHl4cGlUbzhYeW4xRGdQVVpSNVFjTVVEOXY2dnFET053?= =?utf-8?B?cVd4aURvdzRKYjZSRk5id0tpSmhNS29SUjNmNXc5YURYRkluRVhDYUR3VHVu?= =?utf-8?B?eFl2a2xvLzZ0NkxBai9CTElXQmdsdjRJeDlua0thQXZkYlJhNmU3RHJ6elBU?= =?utf-8?B?RWJybTN4NVFudFE0bXFuL0xGWVZIVFJzZmE4aEsweWNWVjdTTmpjd0Z2WGRS?= =?utf-8?B?Q0VOZWRIeWJuZlcrc2NwdlFBQUxQdktCcTBZVWcyN2FHMWdaODUxS290KzRF?= =?utf-8?B?OTdVQnBDUWxuVXBOVnppV2xRcVhGSXczdzFKTVVkT3VjNXYzNnFBQUxEWEd4?= =?utf-8?B?MVVvQmhaVU9jQ1lyaDlhcVp2KzdKZTdpOFU0ZXkwZkRUNVBtM0RlOWtxdHh0?= =?utf-8?B?ZU1SQWtvZ2cxamY1T3VncndSWlFVQWJhdUxFUkJicVNtT0wwTXNuam54QmVB?= =?utf-8?B?cmtkYmZHNURZWDVnVXZWVFpTNTlkYTh0MFZ6bmMxUFkxbzJmVzdHZm0yVFpC?= =?utf-8?B?Zy9YUjBKOFZrYXRYdnZtWHFRQm1ETko4U2liem54eUpFTlljaVFMSVZhVnBW?= =?utf-8?Q?g1h+V6jMVFgEJ2CfOkORhY++T?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44fe16b0-91c2-4eec-0c61-08dad44eead4 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2022 10:21:03.9743 (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: i80vBByPA91mMC74zmh6AweZQM4CDqS3CLPpR8WCejGYkqWiH7CvfawaEgI/g90uFI5QyPv8FfkPDeDl3gv9FA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7409 X-Spam-Status: No, score=-3029.0 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 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: The need for them on the operand-less string insns has gone away with the removal of maybe_adjust_templates() and associated logic. Since i386_index_check() needs adjustment then anyway, take the opportunity and also simplify it, possible again as a result of said removal (plus the opcode template adjustments done here). --- v7: PadLock parts split off. v4: New. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -11373,11 +11373,9 @@ i386_index_check (const char *operand_st { const char *kind = "base/index"; enum flag_code addr_mode = i386_addressing_mode (); - const insn_template *t = current_templates->start; + const insn_template *t = current_templates->end - 1; - if (t->opcode_modifier.isstring - && (current_templates->end[-1].opcode_modifier.isstring - || i.mem_operands)) + if (t->opcode_modifier.isstring) { /* Memory operands of string insns are special in that they only allow a single register (rDI, rSI, or rBX) as their memory address. */ @@ -11394,14 +11392,12 @@ i386_index_check (const char *operand_st if (t->opcode_modifier.prefixok == PrefixRep) { - int es_op = current_templates->end[-1].opcode_modifier.isstring - - IS_STRING_ES_OP0; + int es_op = t->opcode_modifier.isstring - IS_STRING_ES_OP0; int op = 0; - if (!current_templates->end[-1].operand_types[0].bitfield.baseindex + if (!t->operand_types[0].bitfield.baseindex || ((!i.mem_operands != !intel_syntax) - && current_templates->end[-1].operand_types[1] - .bitfield.baseindex)) + && t->operand_types[1].bitfield.baseindex)) op = 1; expected_reg = (const reg_entry *) str_hash_find (reg_hash, @@ -11444,6 +11440,8 @@ i386_index_check (const char *operand_st } else { + t = current_templates->start; + if (addr_mode != CODE_16BIT) { /* 32-bit/64-bit checks. */ --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -490,37 +490,37 @@ loopne, 0xe0, None, Cpu64, JumpByte|No_b set, 0xf9, 0, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Reg8|Byte|Unspecified|BaseIndex } // String manipulation. -cmps, 0xa6, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +cmps, 0xa6, None, 0, W|No_sSuf|RepPrefixOk, {} cmps, 0xa6, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Byte|Word|Dword|Qword|Unspecified|BaseIndex } -scmp, 0xa6, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +scmp, 0xa6, None, 0, W|No_sSuf|RepPrefixOk, {} scmp, 0xa6, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Byte|Word|Dword|Qword|Unspecified|BaseIndex } -ins, 0x6c, None, Cpu186, W|No_sSuf|No_qSuf|IsString|RepPrefixOk, {} +ins, 0x6c, None, Cpu186, W|No_sSuf|No_qSuf|RepPrefixOk, {} ins, 0x6c, None, Cpu186, W|No_sSuf|No_qSuf|IsStringEsOp1|RepPrefixOk, { InOutPortReg, Byte|Word|Dword|Unspecified|BaseIndex } -outs, 0x6e, None, Cpu186, W|No_sSuf|No_qSuf|IsString|RepPrefixOk, {} +outs, 0x6e, None, Cpu186, W|No_sSuf|No_qSuf|RepPrefixOk, {} outs, 0x6e, None, Cpu186, W|No_sSuf|No_qSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Unspecified|BaseIndex, InOutPortReg } -lods, 0xac, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +lods, 0xac, None, 0, W|No_sSuf|RepPrefixOk, {} lods, 0xac, None, 0, W|No_sSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex } lods, 0xac, None, 0, W|No_sSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Acc|Byte|Word|Dword|Qword } -slod, 0xac, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +slod, 0xac, None, 0, W|No_sSuf|RepPrefixOk, {} slod, 0xac, None, 0, W|No_sSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex } slod, 0xac, None, 0, W|No_sSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Acc|Byte|Word|Dword|Qword } -movs, 0xa4, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +movs, 0xa4, None, 0, W|No_sSuf|RepPrefixOk, {} movs, 0xa4, None, 0, W|No_sSuf|IsStringEsOp1|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Byte|Word|Dword|Qword|Unspecified|BaseIndex } -smov, 0xa4, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +smov, 0xa4, None, 0, W|No_sSuf|RepPrefixOk, {} smov, 0xa4, None, 0, W|No_sSuf|IsStringEsOp1|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Byte|Word|Dword|Qword|Unspecified|BaseIndex } -scas, 0xae, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +scas, 0xae, None, 0, W|No_sSuf|RepPrefixOk, {} scas, 0xae, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex } scas, 0xae, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Acc|Byte|Word|Dword|Qword } -ssca, 0xae, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +ssca, 0xae, None, 0, W|No_sSuf|RepPrefixOk, {} ssca, 0xae, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex } ssca, 0xae, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex, Acc|Byte|Word|Dword|Qword } -stos, 0xaa, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +stos, 0xaa, None, 0, W|No_sSuf|RepPrefixOk, {} stos, 0xaa, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex } stos, 0xaa, None, 0, W|No_sSuf|IsStringEsOp1|RepPrefixOk, { Acc|Byte|Word|Dword|Qword, Byte|Word|Dword|Qword|Unspecified|BaseIndex } -ssto, 0xaa, None, 0, W|No_sSuf|IsString|RepPrefixOk, {} +ssto, 0xaa, None, 0, W|No_sSuf|RepPrefixOk, {} ssto, 0xaa, None, 0, W|No_sSuf|IsStringEsOp0|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex } ssto, 0xaa, None, 0, W|No_sSuf|IsStringEsOp1|RepPrefixOk, { Acc|Byte|Word|Dword|Qword, Byte|Word|Dword|Qword|Unspecified|BaseIndex } -xlat, 0xd7, None, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|IsString, {} +xlat, 0xd7, None, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf, {} xlat, 0xd7, None, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|IsString, { Byte|Unspecified|BaseIndex } // Bit manipulation.