diff options
| -rw-r--r-- | src/long_mode/mod.rs | 572 | 
1 files changed, 57 insertions, 515 deletions
| diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs index 4d61b18..d74b974 100644 --- a/src/long_mode/mod.rs +++ b/src/long_mode/mod.rs @@ -6464,10 +6464,10 @@ fn read_opc_hotpath<          let b = words.next().ok().ok_or(DecodeError::ExhaustedInput)?;          let (r, len) = if b == 0x38 {              let b = words.next().ok().ok_or(DecodeError::ExhaustedInput)?; -            (self.read_0f38_opcode(b, &mut instruction.prefixes), 3) +            (self.read_0f38_opcode(b, &mut instruction.prefixes)?, 3)          } else if b == 0x3a {              let b = words.next().ok().ok_or(DecodeError::ExhaustedInput)?; -            (self.read_0f3a_opcode(b, &mut instruction.prefixes), 3) +            (self.read_0f3a_opcode(b, &mut instruction.prefixes)?, 3)          } else {              (self.read_0f_opcode(b, &mut instruction.prefixes), 2)          }; @@ -6530,20 +6530,13 @@ fn read_with_annotations<              } else {                  let b = nextb;                  if b == 0x0f { -                    if words.offset() > 1 { -                        sink.record( -                            words.offset() as u32 * 8 - 8 - 1, words.offset() as u32 * 8 - 8 - 1, -                            InnerDescription::Boundary("prefixes end") -                                .with_id(words.offset() as u32 * 8 - 9) -                        ); -                    }                      let b = words.next().ok().ok_or(DecodeError::ExhaustedInput)?;                      let (rec, len) = if b == 0x38 {                          let b = words.next().ok().ok_or(DecodeError::ExhaustedInput)?; -                        (self.read_0f38_opcode(b, prefixes), 3) +                        (self.read_0f38_opcode(b, prefixes)?, 3)                      } else if b == 0x3a {                          let b = words.next().ok().ok_or(DecodeError::ExhaustedInput)?; -                        (self.read_0f3a_opcode(b, prefixes), 3) +                        (self.read_0f3a_opcode(b, prefixes)?, 3)                      } else {                          (self.read_0f_opcode(b, prefixes), 2)                      }; @@ -10073,227 +10066,9 @@ fn read_0f_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRecor  }  #[inline(always)] -fn read_0f38_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRecord { +fn read_0f38_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> Result<OpcodeRecord, DecodeError> {      if prefixes.rep() { -        const TBL: [OpcodeRecord; 0x100] = [ -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            // 0xd0 -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            // 0xd8 +        const TBL: [OpcodeRecord; 0x28] = [              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::ModRM_0xf30f38d8),              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), @@ -10340,7 +10115,11 @@ fn read_0f38_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRec              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),          ]; -        return TBL[opcode as usize]; +        return if opcode < 0xd8 { +            Err(DecodeError::InvalidOpcode) +        } else { +            Ok(TBL[(opcode - 0xd8) as usize]) +        };          /*              0xf6 => OpcodeRecord(Interpretation::Instruction(Opcode::ADOX), OperandCode::Gv_Ev),              0xf8 => { @@ -10360,248 +10139,7 @@ fn read_0f38_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRec      }      if prefixes.repnz() { -        const TBL: [OpcodeRecord; 0x100] = [ -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            // 0xe0 -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), -            OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), +        const TBL: [OpcodeRecord; 0x10] = [              // 0xf0              OpcodeRecord(Interpretation::Instruction(Opcode::CRC32), OperandCode::Gv_Eb),              OpcodeRecord(Interpretation::Instruction(Opcode::CRC32), OperandCode::Gdq_Ev), @@ -10623,7 +10161,11 @@ fn read_0f38_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRec              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),              OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),          ]; -        return TBL[opcode as usize]; +        return if opcode < 0xf0 { +            Err(DecodeError::InvalidOpcode) +        } else { +            Ok(TBL[(opcode - 0xf0) as usize]) +        };      }      if prefixes.operand_size() { @@ -10637,71 +10179,71 @@ fn read_0f38_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRec              }          } -        return TBL_ASDF[opcode as usize]; +        return Ok(TBL_ASDF[opcode as usize]);      } else { -        return TBL_ASDF2[opcode as usize]; +        return Ok(TBL_ASDF2[opcode as usize]);      }  }  #[inline(always)] -fn read_0f3a_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> OpcodeRecord { +fn read_0f3a_opcode(&mut self, opcode: u8, prefixes: &mut Prefixes) -> Result<OpcodeRecord, DecodeError> {      if prefixes.rep() {          if prefixes != &Prefixes::new(0x10) { -            return OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing); +            return Err(DecodeError::InvalidOpcode);          }          return match opcode { -            0xf0 => OpcodeRecord(Interpretation::Instruction(Opcode::HRESET), OperandCode::ModRM_0xf30f3af0), -            _ => OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), +            0xf0 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::HRESET), OperandCode::ModRM_0xf30f3af0)), +            _ => Err(DecodeError::InvalidOpcode),          };      }      if prefixes.repnz() { -        return OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing); +        return Err(DecodeError::InvalidOpcode);      }      if prefixes.operand_size() {          if opcode == 0x16 && prefixes.rex_unchecked().w() { -            return OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRQ), OperandCode::G_Ev_xmm_Ib); +            return Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRQ), OperandCode::G_Ev_xmm_Ib));          } else if opcode == 0x22 && prefixes.rex_unchecked().w() { -            return OpcodeRecord(Interpretation::Instruction(Opcode::PINSRQ), OperandCode::G_Ev_xmm_Ib); +            return Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PINSRQ), OperandCode::G_Ev_xmm_Ib));          }          return match opcode { -            0x08 => OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDPS), OperandCode::G_E_xmm_Ib), -            0x09 => OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDPD), OperandCode::G_E_xmm_Ib), -            0x0a => OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDSS), OperandCode::G_E_xmm_Ib), -            0x0b => OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDSD), OperandCode::G_E_xmm_Ib), -            0x0c => OpcodeRecord(Interpretation::Instruction(Opcode::BLENDPS), OperandCode::G_E_xmm_Ib), -            0x0d => OpcodeRecord(Interpretation::Instruction(Opcode::BLENDPD), OperandCode::G_E_xmm_Ib), -            0x0e => OpcodeRecord(Interpretation::Instruction(Opcode::PBLENDW), OperandCode::G_E_xmm_Ib), -            0x0f => OpcodeRecord(Interpretation::Instruction(Opcode::PALIGNR), OperandCode::G_E_xmm_Ib), -            0x14 => OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRB), OperandCode::G_Ev_xmm_Ib), -            0x15 => OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRW), OperandCode::G_Ev_xmm_Ib), -            0x16 => OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRD), OperandCode::G_Ev_xmm_Ib), -            0x17 => OpcodeRecord(Interpretation::Instruction(Opcode::EXTRACTPS), OperandCode::G_Ev_xmm_Ib), -            0x20 => OpcodeRecord(Interpretation::Instruction(Opcode::PINSRB), OperandCode::G_Ev_xmm_Ib), -            0x21 => OpcodeRecord(Interpretation::Instruction(Opcode::INSERTPS), OperandCode::G_Ev_xmm_Ib), -            0x22 => OpcodeRecord(Interpretation::Instruction(Opcode::PINSRD), OperandCode::G_Ev_xmm_Ib), -            0x40 => OpcodeRecord(Interpretation::Instruction(Opcode::DPPS), OperandCode::G_E_xmm_Ib), -            0x41 => OpcodeRecord(Interpretation::Instruction(Opcode::DPPD), OperandCode::G_E_xmm_Ib), -            0x42 => OpcodeRecord(Interpretation::Instruction(Opcode::MPSADBW), OperandCode::G_E_xmm_Ib), -            0x44 => OpcodeRecord(Interpretation::Instruction(Opcode::PCLMULQDQ), OperandCode::G_E_xmm_Ib), -            0x60 => OpcodeRecord(Interpretation::Instruction(Opcode::PCMPESTRM), OperandCode::G_E_xmm_Ib), -            0x61 => OpcodeRecord(Interpretation::Instruction(Opcode::PCMPESTRI), OperandCode::G_E_xmm_Ib), -            0x62 => OpcodeRecord(Interpretation::Instruction(Opcode::PCMPISTRM), OperandCode::G_E_xmm_Ib), -            0x63 => OpcodeRecord(Interpretation::Instruction(Opcode::PCMPISTRI), OperandCode::G_E_xmm_Ib), -//            0xcc => OpcodeRecord(Interpretation::Instruction(Opcode::SHA1RNDS4), OperandCode::G_E_xmm_Ib), -            0xce => OpcodeRecord(Interpretation::Instruction(Opcode::GF2P8AFFINEQB), OperandCode::G_E_xmm_Ub), -            0xcf => OpcodeRecord(Interpretation::Instruction(Opcode::GF2P8AFFINEINVQB), OperandCode::G_E_xmm_Ub), -            0xdf => OpcodeRecord(Interpretation::Instruction(Opcode::AESKEYGENASSIST), OperandCode::G_E_xmm_Ub), -            _ => OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), +            0x08 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDPS), OperandCode::G_E_xmm_Ib)), +            0x09 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDPD), OperandCode::G_E_xmm_Ib)), +            0x0a => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDSS), OperandCode::G_E_xmm_Ib)), +            0x0b => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::ROUNDSD), OperandCode::G_E_xmm_Ib)), +            0x0c => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::BLENDPS), OperandCode::G_E_xmm_Ib)), +            0x0d => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::BLENDPD), OperandCode::G_E_xmm_Ib)), +            0x0e => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PBLENDW), OperandCode::G_E_xmm_Ib)), +            0x0f => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PALIGNR), OperandCode::G_E_xmm_Ib)), +            0x14 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRB), OperandCode::G_Ev_xmm_Ib)), +            0x15 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRW), OperandCode::G_Ev_xmm_Ib)), +            0x16 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PEXTRD), OperandCode::G_Ev_xmm_Ib)), +            0x17 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::EXTRACTPS), OperandCode::G_Ev_xmm_Ib)), +            0x20 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PINSRB), OperandCode::G_Ev_xmm_Ib)), +            0x21 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::INSERTPS), OperandCode::G_Ev_xmm_Ib)), +            0x22 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PINSRD), OperandCode::G_Ev_xmm_Ib)), +            0x40 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::DPPS), OperandCode::G_E_xmm_Ib)), +            0x41 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::DPPD), OperandCode::G_E_xmm_Ib)), +            0x42 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::MPSADBW), OperandCode::G_E_xmm_Ib)), +            0x44 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PCLMULQDQ), OperandCode::G_E_xmm_Ib)), +            0x60 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PCMPESTRM), OperandCode::G_E_xmm_Ib)), +            0x61 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PCMPESTRI), OperandCode::G_E_xmm_Ib)), +            0x62 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PCMPISTRM), OperandCode::G_E_xmm_Ib)), +            0x63 => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PCMPISTRI), OperandCode::G_E_xmm_Ib)), +//            0xcc => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::SHA1RNDS4), OperandCode::G_E_xmm_Ib)), +            0xce => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::GF2P8AFFINEQB), OperandCode::G_E_xmm_Ub)), +            0xcf => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::GF2P8AFFINEINVQB), OperandCode::G_E_xmm_Ub)), +            0xdf => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::AESKEYGENASSIST), OperandCode::G_E_xmm_Ub)), +            _ => Err(DecodeError::InvalidOpcode),          };      }      return match opcode { -        0xcc => OpcodeRecord(Interpretation::Instruction(Opcode::SHA1RNDS4), OperandCode::G_E_xmm_Ub), -        0x0f => OpcodeRecord(Interpretation::Instruction(Opcode::PALIGNR), OperandCode::G_E_mm_Ib), -        _ => OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing), +        0xcc => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::SHA1RNDS4), OperandCode::G_E_xmm_Ub)), +        0x0f => Ok(OpcodeRecord(Interpretation::Instruction(Opcode::PALIGNR), OperandCode::G_E_mm_Ib)), +        _ => Err(DecodeError::InvalidOpcode)      };  }  } | 
