aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2023-07-04 17:01:10 +0200
committerJan Beulich <jbeulich@suse.com>2023-07-04 17:01:10 +0200
commit1f83c96159d55af9caa96aa8f335ca1fd501a953 (patch)
tree9af65b8d140147687ee0cce03faaa91e6e535d04 /opcodes
parentac500f1772cfd5b1cf92acfa3ea4e7c43fab4fe3 (diff)
downloadbinutils-1f83c96159d55af9caa96aa8f335ca1fd501a953.zip
binutils-1f83c96159d55af9caa96aa8f335ca1fd501a953.tar.gz
binutils-1f83c96159d55af9caa96aa8f335ca1fd501a953.tar.bz2
x86: flag EVEX.z set when destination is memory
Zeroing-masking is not permitted in this case. See the code comment for how this is being dealt with.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/i386-dis.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index e440b69..7c41302 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -11855,6 +11855,13 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
if (ins->vex.evex)
{
+
+ /* Zeroing-masking is invalid for memory destinations. Set the flag
+ uniformly, as the consumer will inspect it only for the destination
+ operand. */
+ if (ins->vex.zeroing)
+ ins->illegal_masking = true;
+
switch (bytemode)
{
case dw_mode: