From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2051.outbound.protection.outlook.com [40.107.22.51]) by sourceware.org (Postfix) with ESMTPS id 7FAC4385B513 for ; Fri, 5 May 2023 13:04:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7FAC4385B513 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=WcBLcu9inL/SprWNy83BHJPt/7FioaB5b4cRXJxwz3IyxqfsAMbjZI6e7BMV8H9MVyoW9jwGjOaaZX7NAqGLBs+rA0DX8OQqFmMSqoOjlAZM4rHrj/0gkg28osWZJDpYxfRCQutxEesyJueJcO0x7R0sPlLpWaqCZpgKeNol5pS3dj9sn7TjBzRdfZBxcULeoMBAsedhfAdDxi6wvNQDCSVNTXbNNkFlW1hjZv/b9GbEU8AT3CfxQVeuyWb9sY1xN8oKo6i9mqt3fGxxtK65lx2wlkqISSrJhZmfFvKTpAclYHoetbdR4LXqRJ6gmdl1Ukcap618QUoL7x1CPINdJA== 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=ha+3NPvsTaweq+dhpShIMlZ6fkbSLLlRL5gz/14TqFk=; b=bKsQySxmvVXVqzzaysrlNo78DR97vuzDeAvaltD6chi5NNF4XB83SqqInYZSDFhFp6RhLS7Hxbgc/1001NedUHIEyrhlIWNGXcZSn9ZlgExWjqssDQ5nb7BTNWiwIvcpAATi/lMig8/7ieE3MbDOMBPUi9Wm2ISf+NUZRx+E486rdmZPbORkK0mxutdE5sorPit6PW1V4YDmpZMpmRHU75367ex21Tx+30qr7ALRRi7qfr//BsUT3Lfv+DSo7bfqlsEebN2LywnSiuxOB7dqJ0/Jc40QcKx4ChHZhdtrZTlLP3M6DtsChhkOzDmbijdrfaOdfmGSO8GQ1JYQioHR4Q== 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=ha+3NPvsTaweq+dhpShIMlZ6fkbSLLlRL5gz/14TqFk=; b=fwdIIq3pNlWc4T4pHMt/j5bxnvI1AxiyN619SZPO2t4tfWDnIC0061xMgzAcCsEivys4UFwnmRDl0QnaYAkCOYO+8TQUpIu3Kgx5oy73JAYPWexR2tY1TAKXjK7OI49lfDxV0FGvrZrnd4rRx2dcDWH9+FuuZP3lB8Z0jHiZ0fuwgWtfNmFqW3kRAzB19dAl/OWOVfgHMKAwYgSgZ4iTHgHQ4ZEVAIyygH0khUqu+aE1k1STInq9Ip88C3JwqSINAqfMYBI0qHKxe6uJ79/ZN7YV8DUboc1C+qz7JLnd+DbaKGq19fi3KDJ+ownNUui4GglWgaJBFgpvUph1Zjmf8w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from AM6PR04MB6551.eurprd04.prod.outlook.com (2603:10a6:20b:fa::20) by VE1PR04MB7309.eurprd04.prod.outlook.com (2603:10a6:800:1a8::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.27; Fri, 5 May 2023 13:04:39 +0000 Received: from AM6PR04MB6551.eurprd04.prod.outlook.com ([fe80::768c:6df7:9afb:acd7]) by AM6PR04MB6551.eurprd04.prod.outlook.com ([fe80::768c:6df7:9afb:acd7%7]) with mapi id 15.20.6363.027; Fri, 5 May 2023 13:04:39 +0000 Message-ID: <4f7d2d8d-d4fd-a799-9c8f-7a955a786d60@suse.com> Date: Fri, 5 May 2023 15:04:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: [PATCH 4/4] x86: further adjust extend-to-32bit-address conditions 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: FR0P281CA0040.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::11) To AM6PR04MB6551.eurprd04.prod.outlook.com (2603:10a6:20b:fa::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB6551:EE_|VE1PR04MB7309:EE_ X-MS-Office365-Filtering-Correlation-Id: e04024e9-0617-436f-1558-08db4d694901 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NDYxjTsFed3wPNSTgTqYvs1umuN03uC8L9TtxrhYykd65Mdzhs2yGi7PDbmaRf61b0FZdxtCdvX3tbsszcw63rHZYlXx3v9mkRKqCL4LUO4JX01ZldCvchyxKkICImegFyDGJWJsbs4uyC8IkyI+i8YvaTDZER313urig7WupXfV3jhyekMTAr+QcMcqx3eLBrIkD7Qt3XtwNd5L0JP5m9Mo11UZvIRXtQo7yedW7ehOGRQKqbB4uH1u+Zpbthrn5jsLMl+QgnNXUN+2kn0/o+UDsshk1laynrBjSNjSCluUEqXMK2oBM/phx1dHsG1QBOxYNS811Ie+M9Rf7NgWSvxqQylVZ4CMuiiZULdryvQ3LKiPYE9sjbKbGCboeKUxwBFsjGJFahZKIITLF97ALPWIMzeNKxb0DpXSikQCktIAQd8pQhHrLGaF2HliaeO2YYloCLk+HmyQrLlp/oEzRnsZPgZ0frMsc9wh00ijFawoLU3UKTZqRoIG3eRQh2FDl8oWdhMkA8TM0fG6rqhHjQIOmy8ozx890HWvWbEcp/xMFUPJ5xUnIxL2BQKyARYfWluM31yUz4w/RrpSV73WUpkxoXMdcNw1NkzvCDcc4ml28JvN4PIfy1u5TeeQoyY6r9Gk68n+QM6z5RN3wX7RxA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB6551.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(366004)(136003)(396003)(39860400002)(346002)(376002)(451199021)(6916009)(6486002)(478600001)(4326008)(36756003)(66946007)(66556008)(66476007)(41300700001)(316002)(31696002)(8936002)(8676002)(86362001)(38100700002)(5660300002)(19627235002)(83380400001)(2616005)(2906002)(30864003)(31686004)(186003)(6506007)(6512007)(26005)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V1E4ZlAyRitzc3RzNXlLaUV6QkpYL0ZuaGNuVkZmN081MWhTc1RtdGxpZ0tG?= =?utf-8?B?UlgyTUgwWWZEaGhDc0YvamU4ZXRNdWljTmliNW85R1BGZUZYc3BVUjRacGkz?= =?utf-8?B?QWJTclFpakNXei9zeXExUWlmd0trci9iRGlCNVUxVUl2RGUyOHg1Z0pKc0Jo?= =?utf-8?B?VGx3aFNPMFZMY1UvL0l1WG9rVUIvbllobWNBYlBGL0pVdUhPRmVZbU1jTHps?= =?utf-8?B?d05UMFRmMlZ4NUllWHp2N09GbHhvTzFRY2toQWtCM1BJclo4RFpnU3RDanZq?= =?utf-8?B?cFIyQ3E4b1BvMGd0S01Ydy9oVnN0QWtsN2NkYTB1UG5uYVMvMGRnQ2cvaGV4?= =?utf-8?B?cS9KWE0yQ0cyVi9peDRLdzYyUXJncG00ZDZsWTBGVTkySlE0SmMxTnFndklQ?= =?utf-8?B?SXA2Q0R3dGNIR3BtTUlOYzVPL1pQTXVrdis4TFpuVEtMSnBsV1NMdHZ4RGFH?= =?utf-8?B?T2FzeHdLaXZodlhRL0xQdkpYK0ZSQnoyTTB0WEgrdHowZ0JtbG5FZkREQ3Nz?= =?utf-8?B?UjhWKzduRVNWLy9YN3NUeVJPWWlUZThPVENpRk1weFJGOXdLTkZDY0Znd1J6?= =?utf-8?B?dmFpNjVvK2tJU2dRZ3NIZytQc3FZNzhTdldIT054TkdyeE4zTEhVSWZkNFFN?= =?utf-8?B?Sm80WFdCbVVDemhuaTFVcUxQZkczODViTW9COEd2ZTZoTERDYmgvdDdKYW5i?= =?utf-8?B?VTV0bWlaaTJKb1oyOUc0L3BKbFZiMlBtZjR2Y3BoSWpUVE9WUzU5eEVZeVY4?= =?utf-8?B?OEZSSEdkR09oV1JLb0FLTGhMTGF2bC8zWEV1NXNPZUh5NTdCSTliaXFGRER2?= =?utf-8?B?RloxRDh0MElSK0g0Sy9nVEhoNHFGTzhPMjVZWXR1clRVUnM5TldzY0t0RmZT?= =?utf-8?B?MVU1cTEyRVpiYW1JSWdYdHdwM3BtNG5RVkdxeW9EL3dLQyt6Q1NDcXQ3ZkFR?= =?utf-8?B?Zzhwa2Y2dGJXQW1qSVB0SGRJa20zUjF4WmFkUlB6c0lIbHdyTDlBVkRETmxn?= =?utf-8?B?Tlg1TUpkV2xSKzRkYUpTTjV1WUh6WFJZRHg3U09UZzZCakJ3aWpORWhGVHFC?= =?utf-8?B?c3RDc0srZks3YVNkZk9vSDI0ZDhzMkVkYUVuaURvdXkvOG1UOWFkMWtBL285?= =?utf-8?B?cXp6c3dKQkcxMDRGWURWVlJMVWc4YSt4QkFSUVAyYnBtdEtkNE5zcmVnU0RZ?= =?utf-8?B?SnYza2o4cjQxclRheFVteXdkS0VicStXR2R5VnM0Ynd1TVBhVUdmT2lobjJR?= =?utf-8?B?OXBuOWxLOW9VTS94aElCQzBqSldtMXlIVk5WQXp6ajVOYkNjK2pldENrYTJV?= =?utf-8?B?Y3YxTnN3K09ydytmZjJEaW5NNDk2ME1OUlB5b0x5RjJPQUtJa2NrQk1vcmRP?= =?utf-8?B?STR4OE1hd1R1R1NXSlQ4aTBrUWU4dUdmV0pUNlZKamNKZ3l1Ym5US0l3TnBx?= =?utf-8?B?cys4WW1DaDYvcldaaGpFT2hVNHhpVXhEWXNsWkRKaWEycER5L2lGMHJoc2VO?= =?utf-8?B?TVZsKzBiQTBFYzFCTXc0aWhsQy9HbFA3cWtDR3lBNXdHc3dBc2JIZ25vUmEz?= =?utf-8?B?eFlJS1pldlBlR1ZvUjJWa2ZxMW05YnBNRGRQL0xRdVM2a0F3ZUxwUTZvYnJx?= =?utf-8?B?S0xWZmU0cDdGd1Rjcm14eXRudGZLZUVWMDR0QzRsdWFrK1JZL01mZ29RS2N1?= =?utf-8?B?bCtGL2VaeWlyUGFmN0ovdXp0dDNUWFpVVzN5VWZoY2RFb3pHdjZYKzF4OWhl?= =?utf-8?B?UEZDWG9YSUxPbWJaY1V2eFdod0FqSjJGYnliU2hDV3NycmpNM3gxajFPY2ZN?= =?utf-8?B?RjdWdFFmR2l6YS9vemlndHZGQjM3S05rWDJHNjdkbzlqakl2RTBEMjU4cUNM?= =?utf-8?B?K0FqSFA2bjdSeEtIZVFKeGJQRXZlYVlXQStZcW9wdXlHQkdRV2ZESEY0RytR?= =?utf-8?B?TnFCdmMvODdtbVAyNkV2WlRJdmFvZFZTUlQ5M3FKb3dDZ2Y3WUk0RUJ4Y285?= =?utf-8?B?czBoMXpkMDJ2SVJUcGd6MjJWbkxGMy81b2I5TThiSlBlSGdKVWNEMUpBeUdi?= =?utf-8?B?OCtNZFZiL0Q1ckpKWkhLeCtqS3d0U3NRWW04NndpWFZNR2EvL2xIT0FaRHhq?= =?utf-8?Q?5H7VG9Z5957PKyov3/KPQsGx5?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e04024e9-0617-436f-1558-08db4d694901 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6551.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2023 13:04:39.6131 (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: g0bEubivXpipAexigmtGnPn4R/dzlwDJegh/nN/D74PjdApIRoHSGfUzq+V38SvMaXU/G13sxjQDpBJG7Fb12A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB7309 X-Spam-Status: No, score=-3027.9 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 List-Id: While a442cac5084e ("ix86: wrap constants") helped address a number of inconsistencies between BFD64 and !BFD64 builds, it has also resulted in certain bogus uses of constants to no longer be warned about. Leverage the md_optimize_expr() hook to adjust when to actually truncate expressions to 32 bits - any involvement of binary expressions (which would be evaluated in 32 bits only when !BFD64) signals the need for doing so. Plain constants (or ones merely subject to unary operators) should remain un-truncated - they would be handled as bignums when !BFD64, and hence are okay to permit. To compensate - slightly extend optimize_imm() (to be honest I never understood why the code being added - or something similar - wasn't there in the first place), - adjust expectations of the disp-imm-32 testcase (there are now warnings, as there should be for any code which won't build [warning- free] when !BFD64, and Disp8/Imm8 are no longer used in the warned about cases). --- The no-longer-emitting-Disp8/-Imm8 could probably be avoided, by fiddling with optimize_{disp,imm}(). If that's wanted, I think it would still want to be in a separate patch. What still differs between BFD64 vs !BFD64 are cases like .byte ~0xffffffffffffff00 .word ~0xffffffffffff0000 .long ~0xffffffff00000000 .quad ~0xffffffff00000000 where the latter warns about bignum truncation. The draft patch I have for this unfortunately causes quite a bit of testsuite fallout, so I'll have to do more investigation there. Along these lines .long 0xffffffff+2 .long 0xffffffff*2 differ in diagnostics (and I consider it ambiguous whether a warning is appropriate here with BFD64), while .quad 0xffffffff+2 .quad 0xffffffff*2 are uniformly quiet but emit different data. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -827,6 +827,14 @@ i386_cpu_flags cpu_arch_isa_flags; larger than a byte offset. */ static bool no_cond_jump_promotion = false; +/* This will be set from an expression parser hook if there's any + applicable operator involved in an expression. */ +static enum { + expr_operator_none, + expr_operator_present, + expr_large_value, +} expr_mode; + /* Encode SSE instructions with VEX prefix. */ static unsigned int sse2avx; @@ -6016,6 +6024,8 @@ optimize_imm (void) } else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0)) guess_suffix = WORD_MNEM_SUFFIX; + else if (flag_code != CODE_64BIT || !(i.prefix[REX_PREFIX] & REX_W)) + guess_suffix = LONG_MNEM_SUFFIX; for (op = i.operands; --op >= 0;) if (operand_type_check (i.types[op], imm)) @@ -10508,6 +10518,7 @@ x86_cons (expressionS *exp, int size) intel_syntax = -intel_syntax; exp->X_md = 0; + expr_mode = expr_operator_none; #if ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \ && !defined (LEX_AT)) \ @@ -10567,7 +10578,8 @@ x86_cons (expressionS *exp, int size) i386_intel_simplify (exp); /* If not 64bit, massage value, to account for wraparound when !BFD64. */ - if (size == 4 && exp->X_op == O_constant && !object_64bit) + if (size <= 4 && expr_mode == expr_operator_present + && exp->X_op == O_constant && !object_64bit) exp->X_add_number = extend_to_32bit_address (exp->X_add_number); return got_reloc; @@ -11626,6 +11638,7 @@ i386_immediate (char *imm_start) if (gotfree_input_line) input_line_pointer = gotfree_input_line; + expr_mode = expr_operator_none; exp_seg = expression (exp); /* For .insn immediates there may be a size specifier. */ @@ -11684,7 +11697,8 @@ i386_finalize_immediate (segT exp_seg AT /* If not 64bit, sign/zero extend val, to account for wraparound when !BFD64. */ - if (flag_code != CODE_64BIT && !object_64bit) + if (expr_mode == expr_operator_present + && flag_code != CODE_64BIT && !object_64bit) exp->X_add_number = extend_to_32bit_address (exp->X_add_number); } #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT)) @@ -11906,6 +11920,7 @@ i386_displacement (char *disp_start, cha if (gotfree_input_line) input_line_pointer = gotfree_input_line; + expr_mode = expr_operator_none; exp_seg = expression (exp); SKIP_WHITESPACE (); @@ -11976,7 +11991,8 @@ i386_finalize_displacement (segT exp_seg If not 64bit, sign/zero extend val, to account for wraparound when !BFD64. */ - if (flag_code != CODE_64BIT && !object_64bit) + if (expr_mode == expr_operator_present + && flag_code != CODE_64BIT && !object_64bit) exp->X_add_number = extend_to_32bit_address (exp->X_add_number); } @@ -13928,6 +13944,41 @@ md_operand (expressionS *e) } } +#ifdef BFD64 +/* To maintain consistency with !BFD64 builds of gas record, whether any + (binary) operator was involved in an expression. As expressions are + evaluated in only 32 bits when !BFD64, we use this to decide whether to + truncate results. */ +bool i386_record_operator (operatorT op, + const expressionS *left, + const expressionS *right) +{ + if (op == O_absent) + return false; + + if (!left) + { + /* Since the expression parser applies unary operators fine to bignum + operands, we don't need to be concerned of respective operands not + fitting in 32 bits. */ + if (right->X_op == O_constant && right->X_unsigned + && !fits_in_unsigned_long (right->X_add_number)) + return false; + } + /* This isn't entirely right: The pattern can also result when constant + expressions are folded (e.g. 0xffffffff + 1). */ + else if ((left->X_op == O_constant && left->X_unsigned + && !fits_in_unsigned_long (left->X_add_number)) + || (right->X_op == O_constant && right->X_unsigned + && !fits_in_unsigned_long (right->X_add_number))) + expr_mode = expr_large_value; + + if (expr_mode != expr_large_value) + expr_mode = expr_operator_present; + + return false; +} +#endif #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) const char *md_shortopts = "kVQ:sqnO::"; --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -633,6 +633,7 @@ i386_intel_operand (char *operand_string input_line_pointer = buf = xstrdup (operand_string); intel_syntax = -1; + expr_mode = expr_operator_none; memset (&exp, 0, sizeof(exp)); exp_seg = expression (&exp); ret = i386_intel_simplify (&exp); --- a/gas/config/tc-i386.h +++ b/gas/config/tc-i386.h @@ -188,6 +188,12 @@ extern operatorT i386_operator (const ch extern int i386_need_index_operator (void); #define md_need_index_operator i386_need_index_operator +#ifdef BFD64 +extern bool i386_record_operator + (operatorT, const expressionS *, const expressionS *); +#define md_optimize_expr(l, o, r) i386_record_operator (o, l, r) +#endif + #define md_register_arithmetic 0 extern const struct relax_type md_relax_table[]; --- /dev/null +++ b/gas/testsuite/gas/i386/cst-diag.l @@ -0,0 +1,43 @@ +.*: Assembler messages: +.*:3: Warning: .* +.*:4: Warning: .* +.*:5: (Error|Warning): .* +.*:6: (Error|Warning): .* +.*:8: Warning: .* +.*:9: Warning: .* +.*:10: (Error|Warning): .* +.*:11: (Error|Warning): .* +.*:13: Warning: .* +.*:14: Warning: .* +.*:15: (Error|Warning): .* +.*:16: (Error|Warning): .* +.*:18: Warning: .* +.*:19: (Error|Warning): .* +.*:20: (Error|Warning): .* +.*:22: (Error|Warning): .* +.*:23: (Error|Warning): .* +.*:24: (Error|Warning): .* +.*:25: (Error|Warning): .* +.*:30: Warning: .* +.*:31: Warning: .* +.*:35: Warning: .* +.*:36: Warning: .* +.*:40: Warning: .* +.*:41: Warning: .* +.*:46: Warning: .* +.*:47: Warning: .* +.*:48: Warning: .* +.*:50: Warning: .* +.*:51: Warning: .* +.*:52: Warning: .* +.*:55: Warning: .* +.*:56: Warning: .* +.*:57: Warning: .* +.*:59: Warning: .* +.*:60: Warning: .* +.*:61: Warning: .* +.*:64: Warning: .* +.*:65: Warning: .* +.*:66: Warning: .* +GAS LISTING .* +#pass --- /dev/null +++ b/gas/testsuite/gas/i386/cst-diag.s @@ -0,0 +1,79 @@ + .text +const: + add $0x101, %cl + add $0x10001, %cx + add $0x100000001, %ecx + add 0x100000001, %ecx + + add $0x100, %cl + add $0x10000, %cx + add $0x100000000, %ecx + add 0x100000000, %ecx + + add $-0x101, %cl + add $-0x10001, %cx + add $-0x100000001, %ecx + add -0x100000001, %ecx + + add $-0x100, %cl + add $-0x10000, %cx + add $-0x100000000, %ecx + + add $0xffffffffffffff00, %cl + add $0xffffffffffff0000, %cx + add $0xffffffff00000000, %ecx + add 0xffffffff00000000, %ecx + + # The next two might as well not have a disagnostic issued, but if + # there is one (as is the case now), then it should be independent + # of BFD64. + and $~0xff, %cl + and $~0xffff, %cx + and $~0xffffffff, %ecx + and ~0xffffffff, %ecx + + and $0xff+2, %cl + and $0xffff+2, %cx + and $0xffffffff+2, %ecx + and 0xffffffff+2, %ecx + + and $0xff*2, %cl + and $0xffff*2, %cx + and $0xffffffff*2, %ecx + and 0xffffffff*2, %ecx + + .data + .byte 0x101 + .byte -0x100 + .byte 0xffffffffffffff00 +# .byte ~0xffffffffffffff00 + .byte ~0xff + .byte 0xff+2 + .byte 0xff*2 + + .p2align 4 + .word 0x10001 + .word -0x10000 + .word 0xffffffffffff0000 +# .word ~0xffffffffffff0000 + .word ~0xffff + .word 0xffff+2 + .word 0xffff*2 + + .p2align 4 + .long 0x100000001 + .long -0x100000000 + .long 0xffffffff00000000 +# .long ~0xffffffff00000000 + .long ~0xffffffff +# .long 0xffffffff+2 +# .long 0xffffffff*2 + + .p2align 4 + .quad 0x100000001 + .quad -0x100000000 + .quad 0xffffffff00000000 +# .quad ~0xffffffff00000000 + .quad ~0xffffffff +# .quad 0xffffffff+2 +# .quad 0xffffffff*2 --- a/gas/testsuite/gas/i386/disp-imm-32.d +++ b/gas/testsuite/gas/i386/disp-imm-32.d @@ -1,5 +1,6 @@ #objdump: -dw #name: i386 displacements / immediates (32-bit) +#warning_output: disp-imm-32.e .*: +file format .* @@ -15,7 +16,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 8b 40 ff mov -0x1\(%eax\),%eax [ ]*[a-f0-9]+: 62 f1 7c 48 28 40 ff vmovaps -0x40\(%eax\),%zmm0 [ ]*[a-f0-9]+: 83 c1 ff add \$0xffffffff,%ecx -[ ]*[a-f0-9]+: 8b 40 01 mov 0x1\(%eax\),%eax -[ ]*[a-f0-9]+: 62 f1 7c 48 28 40 01 vmovaps 0x40\(%eax\),%zmm0 -[ ]*[a-f0-9]+: 83 c1 01 add \$0x1,%ecx +[ ]*[a-f0-9]+: 8b (40 01 +|80 01 00 00 00) mov 0x1\(%eax\),%eax +[ ]*[a-f0-9]+: 62 f1 7c 48 28 (40 01|80 40 00 00 00) vmovaps 0x40\(%eax\),%zmm0 +[ ]*[a-f0-9]+: (83 c1 01 +|81 c1 01 00 00 00) add \$0x1,%ecx #pass --- /dev/null +++ b/gas/testsuite/gas/i386/disp-imm-32.e @@ -0,0 +1,4 @@ +.*: Assembler messages: +.*:15: Warning: .* shortened to 0x1 +.*:16: Warning: .* shortened to 0x40 +.*:17: Warning: .* shortened to 0x1 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -100,6 +100,7 @@ if [gas_32_check] then { run_dump_test "suffix-intel" run_list_test "suffix-bad" run_dump_test "immed32" + run_list_test "cst-diag" "-al" run_dump_test "equ" run_list_test "equ-2" "-al" run_list_test "equ-bad"