about summary refs log tree commit diff stats
path: root/subx/031check_operands.cc
diff options
context:
space:
mode:
Diffstat (limited to 'subx/031check_operands.cc')
-rw-r--r--subx/031check_operands.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/subx/031check_operands.cc b/subx/031check_operands.cc
index 45d9e7e1..bf5d3719 100644
--- a/subx/031check_operands.cc
+++ b/subx/031check_operands.cc
@@ -225,12 +225,11 @@ void init_permitted_operands() {
   put(Permitted_operands, "87", 0x01);
   // copy address (lea)
   put(Permitted_operands, "8d", 0x01);
-  // pop
-  put(Permitted_operands, "8f", 0x01);
 
   //// Class N: op, ModR/M and subop (not r32)
   //  imm32 imm8  disp32 |disp16  disp8 subop modrm
   //  0     0     0      |0       0     1     1
+  put(Permitted_operands, "8f", 0x03);  // pop
   put(Permitted_operands, "d3", 0x03);  // shift
   put(Permitted_operands, "f7", 0x03);  // test/not/mul/div
   put(Permitted_operands, "ff", 0x03);  // jump/push/call
@@ -627,8 +626,12 @@ map</*op*/string, /*bitvector*/uint8_t> Permitted_operands_0f;
 //// Class D: just op and disp32
 //  imm32 imm8  disp32 |disp16  disp8 subop modrm
 //  0     0     1      |0       0     0     0
+put_new(Permitted_operands_0f, "82", 0x10);
+put_new(Permitted_operands_0f, "83", 0x10);
 put_new(Permitted_operands_0f, "84", 0x10);
 put_new(Permitted_operands_0f, "85", 0x10);
+put_new(Permitted_operands_0f, "86", 0x10);
+put_new(Permitted_operands_0f, "87", 0x10);
 put_new(Permitted_operands_0f, "8c", 0x10);
 put_new(Permitted_operands_0f, "8d", 0x10);
 put_new(Permitted_operands_0f, "8e", 0x10);