From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x430.google.com (mail-pf1-x430.google.com [IPv6:2607:f8b0:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id C06B53857022 for ; Thu, 28 Dec 2023 01:56:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C06B53857022 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C06B53857022 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::430 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703728611; cv=none; b=OV8qOnR7oH4I4thzNBIfbfjZB5xew1GUVfuOq+WhPpwqNp305qz/AwTVDgb4E5BS7AJBtcnT7kXq9HYg4azvlIbggdBEgcyf/bVVg2xRl4jPzFY5qEC6/EC7jNmqOXgDOVgxVTkCOVwT6roZgkCK5aEHsvMIbNE+xPDKUqRN/JM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1703728611; c=relaxed/simple; bh=G/gRO0xl5+oyUGZrKa5xY3Tbm95KR1iGIOLdUA8rh3I=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=L0pL5WePSZQ2VwjS4Sl/SwelTno4+07dwNyDDE7Yt4uVljAC48fiqIer43YlAwJxowwVHz+zTTHXJUmavriyqbQUuUziuWMZTZa2ua20Y/rKpJS1kGupPh8XKe1xSd0igmQ0YZVKOdb7Gt+k/dwlGCdG4SQfKZXZS6Cz7PTNEp0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-6d9bc8939d0so876256b3a.0 for ; Wed, 27 Dec 2023 17:56:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703728608; x=1704333408; darn=sourceware.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=o9gOs4tVsHnYqAnfYHnjft+G48NXb5EcXdkyMIBpWPg=; b=g5UYkC66l/j+83u/zUseHB4uoLgSAh3tX+2dNS2MhEAzZlXcwZHXFbJjA1aKr1HnmL MlcxoNjj9K+PpZo7IY8CugDVag7GURj/iazWK6aHLmrb3vDrLviVw2r0KOXHUCIYZrmz LKPIu00hHvBXexpO7gqp+91SYi1duLV//aBsC3s4C5bSlwYrMjOIkw0WlGIsRZpxergo tV5LHoNRkM1IYzkt0NhR2IVhbrQufJeKK4tAT1Hv7gllEfeHPxlNIi2j1l+PXOCq91Nx zJycPR+P0av08qKF6rkDbqDhRM2vUf4g7W3XE2x0r5ssLETFtk+MjBXOmkvn4NPfZfYw 8otw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703728608; x=1704333408; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=o9gOs4tVsHnYqAnfYHnjft+G48NXb5EcXdkyMIBpWPg=; b=PK41QUY5t+RYakFEP5fwhi4qpqNqCjQlwb/G13nRq1XwyHfTMM7hQ3h2C3EBYThnai mdpR0EX8G6jZDWyX3Mx4/PZyrL/FbZC4EFg+hn3KcJjUlQW5XQBY5oLu6BtIg0fMP050 6zDYiokUvMWleLcEDiwGrxfYCStgOzh+NL8kHjQHTBN9lredTOAU/HBiz11A8LkOEREM 1ioq9vEgtVIVcEh4DKmXIlgNJqchxCnR88sYQ4IfrOsauelpuKzyz2MnXWHgx1AlIQOq UdLSajNEt8XDX63OgMaplaCGrU0yHptdezeGqGlhc8dydPiCfdloAzTfR2fH+0GSlJ06 XKVw== X-Gm-Message-State: AOJu0Yxm5PPPzleh/5Jk0SIzko4jBvXQnVKyyr9LHRxKnjZGJb6M/IP/ kXhQ8yC0nwWWnNfoKU0Vi6A= X-Google-Smtp-Source: AGHT+IGL6YK7GvN6QAtnm+nX74sAV3oTEQFT3nliDvRzly9nKzvKEggJy9SpGRl/jJZePleTrxAqWA== X-Received: by 2002:aa7:8881:0:b0:6d9:ecbb:8bd8 with SMTP id z1-20020aa78881000000b006d9ecbb8bd8mr2022952pfe.32.1703728607655; Wed, 27 Dec 2023 17:56:47 -0800 (PST) Received: from gnu-cfl-3.localdomain ([172.56.169.119]) by smtp.gmail.com with ESMTPSA id g2-20020aa78742000000b006d990aa3b6dsm9667617pfo.183.2023.12.27.17.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Dec 2023 17:56:47 -0800 (PST) Received: by gnu-cfl-3.localdomain (Postfix, from userid 1000) id 321657403E1; Wed, 27 Dec 2023 17:56:46 -0800 (PST) Date: Wed, 27 Dec 2023 17:56:46 -0800 From: "H.J. Lu" To: "Cui, Lili" Cc: binutils@sourceware.org, jbeulich@suse.com, "Hu, Lin1" Subject: Re: [PATCH V5 9/9] Support APX JMPABS for disassembler Message-ID: References: <20231228012714.2989658-1-lili.cui@intel.com> <20231228012714.2989658-10-lili.cui@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231228012714.2989658-10-lili.cui@intel.com> X-Spam-Status: No, score=-3024.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,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: On Thu, Dec 28, 2023 at 01:27:14AM +0000, Cui, Lili wrote: > From: "Hu, Lin1" > > gas/ChangeLog: > > * testsuite/gas/i386/x86-64.exp: Ditto. > * testsuite/gas/i386/x86-64-apx-jmpabs-intel.d: Ditto. > * testsuite/gas/i386/x86-64-apx-jmpabs-inval.d: Ditto. > * testsuite/gas/i386/x86-64-apx-jmpabs-inval.s: Ditto. > * testsuite/gas/i386/x86-64-apx-jmpabs.d: Ditto. > * testsuite/gas/i386/x86-64-apx-jmpabs.s: Ditto. > > opcodes/ChangeLog: > > * i386-dis.c (JMPABS_Fixup): New Fixup function to disassemble jmpabs. > (print_insn): Add #UD exception for jmpabs. > (dis386): Modify a1 unit for support jmpabs. > * i386-mnem.h: Regenerated. > * i386-opc.tbl: New insns. > * i386-tbl.h: Regenerated. > --- > .../gas/i386/x86-64-apx-jmpabs-intel.d | 12 ++++++ > .../gas/i386/x86-64-apx-jmpabs-inval.d | 40 +++++++++++++++++++ > .../gas/i386/x86-64-apx-jmpabs-inval.s | 15 +++++++ > gas/testsuite/gas/i386/x86-64-apx-jmpabs.d | 12 ++++++ > gas/testsuite/gas/i386/x86-64-apx-jmpabs.s | 5 +++ > gas/testsuite/gas/i386/x86-64.exp | 3 ++ > opcodes/i386-dis.c | 37 ++++++++++++++++- > 7 files changed, 122 insertions(+), 2 deletions(-) > create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs-intel.d > create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.d > create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.s > create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs.d > create mode 100644 gas/testsuite/gas/i386/x86-64-apx-jmpabs.s > > diff --git a/gas/testsuite/gas/i386/x86-64-apx-jmpabs-intel.d b/gas/testsuite/gas/i386/x86-64-apx-jmpabs-intel.d > new file mode 100644 > index 00000000000..2b87f95532f > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-apx-jmpabs-intel.d > @@ -0,0 +1,12 @@ > +#as: > +#objdump: -dw -Mintel > +#name: x86_64 APX_F JMPABS insns (Intel disassembly) > +#source: x86-64-apx-jmpabs.s > + > +.*: +file format .* > + > +Disassembly of section \.text: > + > +0+ <_start>: > +\s*[a-f0-9]+:\s*d5 00 a1 02 00 00 00 00 00 00 00[ ]+jmpabs 0x2 > +#pass > diff --git a/gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.d b/gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.d > new file mode 100644 > index 00000000000..86f313f0873 > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.d > @@ -0,0 +1,40 @@ > +#as: --64 > +#objdump: -dw > +#name: illegal decoding of APX_F jmpabs insns > +#source: x86-64-apx-jmpabs-inval.s > + > +.*: +file format .* > + > +Disassembly of section \.text: > + > +0+ <.text>: > +\s*[a-f0-9]+: 66 d5 00 a1[ ]+\(bad\) > +\s*[a-f0-9]+: 01 00[ ]+add %eax,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 67 d5 00 a1[ ]+\(bad\) > +\s*[a-f0-9]+: 01 00[ ]+add %eax,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: f2 d5 00 a1[ ]+\(bad\) > +\s*[a-f0-9]+: 01 00[ ]+add %eax,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: f3 d5 00 a1[ ]+\(bad\) > +\s*[a-f0-9]+: 01 00[ ]+add %eax,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: f0 d5 00 a1[ ]+\(bad\) > +\s*[a-f0-9]+: 01 00[ ]+add %eax,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: d5 08 a1[ ]+\(bad\) > +\s*[a-f0-9]+: 01 00[ ]+add %eax,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +\s*[a-f0-9]+: 00 00[ ]+add %al,\(%rax\) > +#pass > diff --git a/gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.s b/gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.s > new file mode 100644 > index 00000000000..de4440a5466 > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-apx-jmpabs-inval.s > @@ -0,0 +1,15 @@ > +# Check bytecode of APX_F jmpabs instructions with illegal encode. > + > + .text > +# With 66 prefix > + .byte 0x66,0xd5,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > +# With 67 prefix > + .byte 0x67,0xd5,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > +# With F2 prefix > + .byte 0xf2,0xd5,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > +# With F3 prefix > + .byte 0xf3,0xd5,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > +# With LOCK prefix > + .byte 0xf0,0xd5,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > +# REX2.M0 = 0 REX2.W = 1 > + .byte 0xd5,0x08,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > diff --git a/gas/testsuite/gas/i386/x86-64-apx-jmpabs.d b/gas/testsuite/gas/i386/x86-64-apx-jmpabs.d > new file mode 100644 > index 00000000000..e95b54f5dab > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-apx-jmpabs.d > @@ -0,0 +1,12 @@ > +#as: > +#objdump: -dw > +#name: x86_64 APX_F JMPABS insns > +#source: x86-64-apx-jmpabs.s > + > +.*: +file format .* > + > +Disassembly of section \.text: > + > +0+ <_start>: > +\s*[a-f0-9]+:\s*d5 00 a1 02 00 00 00 00 00 00 00[ ]+jmpabs \$0x2 > +#pass > diff --git a/gas/testsuite/gas/i386/x86-64-apx-jmpabs.s b/gas/testsuite/gas/i386/x86-64-apx-jmpabs.s > new file mode 100644 > index 00000000000..69ffb763260 > --- /dev/null > +++ b/gas/testsuite/gas/i386/x86-64-apx-jmpabs.s > @@ -0,0 +1,5 @@ > +# Check 64bit APX_F JMPABS instructions > + > + .text > + _start: > + .byte 0xd5,0x00,0xa1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 > diff --git a/gas/testsuite/gas/i386/x86-64.exp b/gas/testsuite/gas/i386/x86-64.exp > index 2ba4c49417a..fa6a1c3c945 100644 > --- a/gas/testsuite/gas/i386/x86-64.exp > +++ b/gas/testsuite/gas/i386/x86-64.exp > @@ -377,6 +377,9 @@ run_dump_test "x86-64-apx-evex-promoted" > run_dump_test "x86-64-apx-evex-promoted-intel" > run_dump_test "x86-64-apx-evex-egpr" > run_dump_test "x86-64-apx-ndd" > +run_dump_test "x86-64-apx-jmpabs" > +run_dump_test "x86-64-apx-jmpabs-intel" > +run_dump_test "x86-64-apx-jmpabs-inval" > run_dump_test "x86-64-avx512f-rcigrz-intel" > run_dump_test "x86-64-avx512f-rcigrz" > run_dump_test "x86-64-clwb" > diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c > index e851fb376d9..b6d7e089823 100644 > --- a/opcodes/i386-dis.c > +++ b/opcodes/i386-dis.c > @@ -106,6 +106,7 @@ static bool MOVSXD_Fixup (instr_info *, int, int); > static bool DistinctDest_Fixup (instr_info *, int, int); > static bool PREFETCHI_Fixup (instr_info *, int, int); > static bool PUSH2_POP2_Fixup (instr_info *, int, int); > +static bool JMPABS_Fixup (instr_info *, int, int); > > static void ATTRIBUTE_PRINTF_3 i386_dis_printf (const disassemble_info *, > enum disassembler_style, > @@ -2018,7 +2019,7 @@ static const struct dis386 dis386[] = { > { "lahf", { XX }, 0 }, > /* a0 */ > { "mov%LB", { AL, Ob }, PREFIX_REX2_ILLEGAL }, > - { "mov%LS", { eAX, Ov }, PREFIX_REX2_ILLEGAL }, > + { "mov%LS", { { JMPABS_Fixup, eAX_reg }, { JMPABS_Fixup, v_mode } }, PREFIX_REX2_ILLEGAL }, > { "mov%LB", { Ob, AL }, PREFIX_REX2_ILLEGAL }, > { "mov%LS", { Ov, eAX }, PREFIX_REX2_ILLEGAL }, > { "movs{b|}", { Ybr, Xb }, PREFIX_REX2_ILLEGAL }, > @@ -9699,7 +9700,7 @@ print_insn (bfd_vma pc, disassemble_info *info, int intel_syntax) > } > > if ((dp->prefix_requirement & PREFIX_REX2_ILLEGAL) > - && ins.last_rex2_prefix >= 0) > + && ins.last_rex2_prefix >= 0 && (ins.rex2 & REX2_SPECIAL) == 0) > { > i386_dis_printf (info, dis_style_text, "(bad)"); > ret = ins.end_codep - priv.the_buffer; > @@ -13942,3 +13943,35 @@ PUSH2_POP2_Fixup (instr_info *ins, int bytemode, int sizeflag) > > return OP_VEX (ins, bytemode, sizeflag); > } > + > +static bool > +JMPABS_Fixup (instr_info *ins, int bytemode, int sizeflag) > +{ > + if (ins->last_rex2_prefix >= 0) > + { > + uint64_t op; > + > + if ((ins->prefixes & (PREFIX_OPCODE | PREFIX_ADDR | PREFIX_LOCK)) != 0x0 > + || (ins->rex & REX_W) != 0x0) > + { > + oappend (ins, "(bad)"); > + return true; > + } > + > + if (bytemode == eAX_reg) > + return true; > + > + if (!get64 (ins, &op)) > + return false; > + > + ins->mnemonicendp = stpcpy (ins->obuf, "jmpabs"); > + ins->rex2 |= REX2_SPECIAL; > + oappend_immediate (ins, op); > + > + return true; > + } > + > + if (bytemode == eAX_reg) > + return OP_IMREG (ins, bytemode, sizeflag); > + return OP_OFF64 (ins, bytemode, sizeflag); > +} > -- > 2.25.1 > OK. Thanks. H.J.