From: Jan Beulich <jbeulich@suse.com>
To: Binutils <binutils@sourceware.org>
Cc: Lili Cui <lili.cui@intel.com>, "H.J. Lu" <hjl.tools@gmail.com>
Subject: [PATCH 3/3] x86/APX: convert ZU to operand constraint
Date: Wed, 29 May 2024 10:09:28 +0200 [thread overview]
Message-ID: <cc677cf4-cb33-4f7c-bf9d-15bb096f5005@suse.com> (raw)
In-Reply-To: <b011d767-dc67-4496-9adf-4f3868e412e5@suse.com>
Extremely rarely used attributes are inefficient when represented by a
separate attribute. Convert it to an operand constraint, as already
suggested during review. The collision with RegKludge is pretty simple
to resolve.
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -4287,7 +4287,7 @@ build_apx_evex_prefix (void)
/* Encode the NDD bit of the instruction promoted from the legacy
space. ZU shares the same bit with NDD. */
if ((i.vex.register_specifier && i.tm.opcode_space == SPACE_EVEXMAP4)
- || i.tm.opcode_modifier.zu)
+ || i.tm.opcode_modifier.operandconstraint == ZERO_UPPER)
i.vex.bytes[3] |= 0x10;
/* Encode the NF bit. */
@@ -10301,6 +10301,10 @@ process_operands (void)
i.types[first_reg_op + 1] = i.types[first_reg_op];
i.operands++;
i.reg_operands++;
+
+ /* For IMULZU switch around the constraint. */
+ if (i.tm.mnem_off == MN_imulzu)
+ i.tm.opcode_modifier.operandconstraint = ZERO_UPPER;
}
if (i.tm.opcode_modifier.modrm)
--- a/opcodes/i386-gen.c
+++ b/opcodes/i386-gen.c
@@ -492,7 +492,6 @@ static bitfield opcode_modifiers[] =
BITFIELD (NoEgpr),
BITFIELD (NF),
BITFIELD (Rex2),
- BITFIELD (ZU),
};
#define CLASS(n) #n, n
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -579,6 +579,8 @@ enum
#define DISTINCT_DEST 8
/* Instruction updates stack pointer implicitly. */
#define IMPLICIT_STACK_OP 9
+ /* Instruction zeroes upper part of register. */
+#define ZERO_UPPER 10
OperandConstraint,
/* instruction ignores operand size prefix and in Intel mode ignores
mnemonic size suffix check. */
@@ -757,9 +759,6 @@ enum
/* Instrucion requires REX2 prefix. */
Rex2,
- /* Support zero upper */
- ZU,
-
/* The last bitfield in i386_opcode_modifier. */
Opcode_Modifier_Num
};
@@ -808,7 +807,6 @@ typedef struct i386_opcode_modifier
unsigned int noegpr:1;
unsigned int nf:1;
unsigned int rex2:1;
- unsigned int zu:1;
} i386_opcode_modifier;
/* Operand classes. */
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -85,6 +85,7 @@
#define RegKludge OperandConstraint=REG_KLUDGE
#define Ugh OperandConstraint=UGH
#define ImplicitStackOp OperandConstraint=IMPLICIT_STACK_OP
+#define ZU OperandConstraint=ZERO_UPPER
#define ATTSyntax Dialect=ATT_SYNTAX
#define ATTMnemonic Dialect=ATT_MNEMONIC
@@ -409,10 +410,12 @@ imulzu, 0x69, APX_F, Modrm|No_bSuf|No_sS
// transformation.
imul, 0x6b, i186, Modrm|No_bSuf|No_sSuf|RegKludge, { Imm8S, Reg16|Reg32|Reg64 }
imul, 0x6b, APX_F, Modrm|No_bSuf|No_sSuf|RegKludge|EVexMap4|NF, { Imm8S, Reg16|Reg32|Reg64 }
-imulzu, 0x6b, APX_F, Modrm|No_bSuf|No_sSuf|RegKludge|EVexMap4|NF|ZU, { Imm8S, Reg16 }
imul, 0x69, i186, Modrm|No_bSuf|No_sSuf|RegKludge, { Imm16|Imm32|Imm32S, Reg16|Reg32|Reg64 }
imul, 0x69, APX_F, Modrm|No_bSuf|No_sSuf|RegKludge|EVexMap4|NF, { Imm16|Imm32|Imm32S, Reg16|Reg32|Reg64 }
-imulzu, 0x69, APX_F, Modrm|No_bSuf|No_sSuf|RegKludge|EVexMap4|NF|ZU, { Imm16, Reg16 }
+// ZU is omitted here, for colliding with RegKludge. process_operands() will
+// replace the constraint value after processing RegKludge.
+imulzu, 0x6b, APX_F, Modrm|No_bSuf|No_sSuf|RegKludge|EVexMap4|NF/*|ZU*/, { Imm8S, Reg16 }
+imulzu, 0x69, APX_F, Modrm|No_bSuf|No_sSuf|RegKludge|EVexMap4|NF/*|ZU*/, { Imm16, Reg16 }
<mul>
next prev parent reply other threads:[~2024-05-29 8:09 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 8:06 [PATCH 0/3] x86/APX: ZU support follow-up Jan Beulich
2024-05-29 8:07 ` [PATCH 1/3] x86/APX: support extended SETcc form Jan Beulich
2024-05-30 8:18 ` Cui, Lili
2024-05-29 8:08 ` [PATCH 2/3] x86: disassembler macro for condition code Jan Beulich
2024-05-30 5:52 ` Jiang, Haochen
2024-05-30 6:36 ` Jan Beulich
2024-05-30 6:44 ` Jiang, Haochen
2024-05-31 1:59 ` Jiang, Haochen
2024-06-06 2:27 ` Jiang, Haochen
2024-06-06 6:17 ` Jan Beulich
2024-06-06 6:27 ` Jiang, Haochen
2024-05-29 8:09 ` Jan Beulich [this message]
2024-06-07 7:22 ` [PATCH 3/3] x86/APX: convert ZU to operand constraint Cui, Lili
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cc677cf4-cb33-4f7c-bf9d-15bb096f5005@suse.com \
--to=jbeulich@suse.com \
--cc=binutils@sourceware.org \
--cc=hjl.tools@gmail.com \
--cc=lili.cui@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).