[Bug] Fixed RW info of string instructions, fixed lodsx() helper intructions in emitter

This commit is contained in:
kobalicek
2020-07-10 23:21:36 +02:00
parent 509866ef12
commit 8474400e82
6 changed files with 294 additions and 234 deletions

View File

@@ -336,6 +336,8 @@ struct OpRWInfo {
//! used to encode registers.
inline bool isMemFake() const noexcept { return hasOpFlag(kMemFake); }
//! Tests whether the instruction's memory BASE register is used.
inline bool isMemBaseUsed() const noexcept { return (_opFlags & kMemBaseRW) != 0; }
//! Tests whether the instruction reads from its BASE registers.
inline bool isMemBaseRead() const noexcept { return hasOpFlag(kMemBaseRead); }
//! Tests whether the instruction writes to its BASE registers.
@@ -354,6 +356,8 @@ struct OpRWInfo {
//! it to calculate the target address.
inline bool isMemBasePostModify() const noexcept { return hasOpFlag(kMemBasePostModify); }
//! Tests whether the instruction's memory INDEX register is used.
inline bool isMemIndexUsed() const noexcept { return (_opFlags & kMemIndexRW) != 0; }
//! Tests whether the instruction reads the INDEX registers.
inline bool isMemIndexRead() const noexcept { return hasOpFlag(kMemIndexRead); }
//! Tests whether the instruction writes to its INDEX registers.

View File

@@ -3850,10 +3850,10 @@ struct EmitterImplicitT : public EmitterExplicitT<This> {
inline Error cmpsq() { return _emitter()->emit(Inst::kIdCmps, EmitterExplicitT<This>::ptr_zsi(0, 8), EmitterExplicitT<This>::ptr_zdi(0, 8)); }
inline Error cmpsw() { return _emitter()->emit(Inst::kIdCmps, EmitterExplicitT<This>::ptr_zsi(0, 2), EmitterExplicitT<This>::ptr_zdi(0, 2)); }
inline Error lodsb() { return _emitter()->emit(Inst::kIdLods, al , EmitterExplicitT<This>::ptr_zdi(0, 1)); }
inline Error lodsd() { return _emitter()->emit(Inst::kIdLods, eax, EmitterExplicitT<This>::ptr_zdi(0, 4)); }
inline Error lodsq() { return _emitter()->emit(Inst::kIdLods, rax, EmitterExplicitT<This>::ptr_zdi(0, 8)); }
inline Error lodsw() { return _emitter()->emit(Inst::kIdLods, ax , EmitterExplicitT<This>::ptr_zdi(0, 2)); }
inline Error lodsb() { return _emitter()->emit(Inst::kIdLods, al , EmitterExplicitT<This>::ptr_zsi(0, 1)); }
inline Error lodsd() { return _emitter()->emit(Inst::kIdLods, eax, EmitterExplicitT<This>::ptr_zsi(0, 4)); }
inline Error lodsq() { return _emitter()->emit(Inst::kIdLods, rax, EmitterExplicitT<This>::ptr_zsi(0, 8)); }
inline Error lodsw() { return _emitter()->emit(Inst::kIdLods, ax , EmitterExplicitT<This>::ptr_zsi(0, 2)); }
inline Error movsb() { return _emitter()->emit(Inst::kIdMovs, EmitterExplicitT<This>::ptr_zdi(0, 1), EmitterExplicitT<This>::ptr_zsi(0, 1)); }
inline Error movsd() { return _emitter()->emit(Inst::kIdMovs, EmitterExplicitT<This>::ptr_zdi(0, 4), EmitterExplicitT<This>::ptr_zsi(0, 4)); }

View File

@@ -851,7 +851,7 @@ Error InstInternal::queryRWInfo(uint32_t arch, const BaseInst& inst, const Opera
constexpr uint32_t RegPhys = OpRWInfo::kRegPhysId;
constexpr uint32_t MibRead = OpRWInfo::kMemBaseRead | OpRWInfo::kMemIndexRead;
if (ASMJIT_LIKELY(instRwInfo.category == InstDB::RWInfo::kCategoryGeneric)) {
if (instRwInfo.category == InstDB::RWInfo::kCategoryGeneric) {
uint32_t i;
uint32_t rmOpsMask = 0;
uint32_t rmMaxSize = 0;
@@ -901,7 +901,13 @@ Error InstInternal::queryRWInfo(uint32_t arch, const BaseInst& inst, const Opera
rmOpsMask |= Support::bitMask<uint32_t>(i);
}
else {
op.addOpFlags(MibRead);
const x86::Mem& memOp = srcOp.as<x86::Mem>();
// The RW flags of BASE+INDEX are either provided by the data, which means
// that the instruction is border-case, or they are deduced from the operand.
if (memOp.hasBaseReg() && !(op.opFlags() & OpRWInfo::kMemBaseRW))
op.addOpFlags(OpRWInfo::kMemBaseRead);
if (memOp.hasIndexReg() && !(op.opFlags() & OpRWInfo::kMemIndexRW))
op.addOpFlags(OpRWInfo::kMemIndexRead);
}
}

View File

@@ -3680,47 +3680,47 @@ const InstDB::RWInfo InstDB::rwInfoA[] = {
{ InstDB::RWInfo::kCategoryGeneric , 2 , { 5 , 3 , 0 , 0 , 0 , 0 } }, // #10 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 10, 3 , 0 , 0 , 0 , 0 } }, // #11 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 9 , { 10, 5 , 0 , 0 , 0 , 0 } }, // #12 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 5 , 0 , 0 , 0 , 0 } }, // #13 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 15, 5 , 0 , 0 , 0 , 0 } }, // #13 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 3 , 3 , 0 , 0 , 0 , 0 } }, // #14 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 3 , 3 , 0 , 0 , 0 , 0 } }, // #15 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 2 , 3 , 0 , 0 , 0 , 0 } }, // #16 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 15, 16, 0 , 0 , 0 , 0 } }, // #17 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 16, 17, 0 , 0 , 0 , 0 } }, // #17 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 1 , { 3 , 3 , 0 , 0 , 0 , 0 } }, // #18 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 19, 20, 0 , 0 , 0 , 0 } }, // #19 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 20, 21, 0 , 0 , 0 , 0 } }, // #19 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 7 , 7 , 0 , 0 , 0 , 0 } }, // #20 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 9 , 9 , 0 , 0 , 0 , 0 } }, // #21 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 32, 33, 0 , 0 , 0 , 0 } }, // #22 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 33, 34, 0 , 0 , 0 , 0 } }, // #22 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 2 , 3 , 0 , 0 , 0 , 0 } }, // #23 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 10, 7 , 0 , 0 , 0 , 0 } }, // #24 [ref=10x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 34, 5 , 0 , 0 , 0 , 0 } }, // #25 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 35, 7 , 0 , 0 , 0 , 0 } }, // #26 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 34, 7 , 0 , 0 , 0 , 0 } }, // #27 [ref=11x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 35, 5 , 0 , 0 , 0 , 0 } }, // #25 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 36, 7 , 0 , 0 , 0 , 0 } }, // #26 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 35, 7 , 0 , 0 , 0 , 0 } }, // #27 [ref=11x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 11, 7 , 0 , 0 , 0 , 0 } }, // #28 [ref=9x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 36, 7 , 0 , 0 , 0 , 0 } }, // #29 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 35, 3 , 0 , 0 , 0 , 0 } }, // #30 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 36, 3 , 0 , 0 , 0 , 0 } }, // #31 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 35, 9 , 0 , 0 , 0 , 0 } }, // #32 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 37, 7 , 0 , 0 , 0 , 0 } }, // #29 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 36, 3 , 0 , 0 , 0 , 0 } }, // #30 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 37, 3 , 0 , 0 , 0 , 0 } }, // #31 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 36, 9 , 0 , 0 , 0 , 0 } }, // #32 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 11, 9 , 0 , 0 , 0 , 0 } }, // #33 [ref=7x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 37, 38, 0 , 0 , 0 , 0 } }, // #34 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 15, { 1 , 39, 0 , 0 , 0 , 0 } }, // #35 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 16, { 11, 42, 0 , 0 , 0 , 0 } }, // #36 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 38, 39, 0 , 0 , 0 , 0 } }, // #34 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 15, { 1 , 40, 0 , 0 , 0 , 0 } }, // #35 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 16, { 11, 43, 0 , 0 , 0 , 0 } }, // #36 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 4 , 5 , 0 , 0 , 0 , 0 } }, // #37 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 45, 0 , 0 , 0 , 0 } }, // #38 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 45, 46, 0 , 0 , 0 , 0 } }, // #38 [ref=6x]
{ InstDB::RWInfo::kCategoryImul , 2 , { 0 , 0 , 0 , 0 , 0 , 0 } }, // #39 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 49, 50, 0 , 0 , 0 , 0 } }, // #40 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 52, 50, 0 , 0 , 0 , 0 } }, // #41 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 50, 51, 0 , 0 , 0 , 0 } }, // #40 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 53, 51, 0 , 0 , 0 , 0 } }, // #41 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 3 , 5 , 0 , 0 , 0 , 0 } }, // #42 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 21, 28, 0 , 0 , 0 , 0 } }, // #43 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 53, 0 , 0 , 0 , 0 , 0 } }, // #44 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 23, { 54, 39, 0 , 0 , 0 , 0 } }, // #45 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 24, { 43, 9 , 0 , 0 , 0 , 0 } }, // #46 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 25, { 34, 7 , 0 , 0 , 0 , 0 } }, // #47 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 26, { 47, 13, 0 , 0 , 0 , 0 } }, // #48 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 54, 39, 0 , 0 , 0 , 0 } }, // #49 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 43, 9 , 0 , 0 , 0 , 0 } }, // #50 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 34, 7 , 0 , 0 , 0 , 0 } }, // #51 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 47, 13, 0 , 0 , 0 , 0 } }, // #52 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 39, 39, 0 , 0 , 0 , 0 } }, // #53 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 22, 29, 0 , 0 , 0 , 0 } }, // #43 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 54, 0 , 0 , 0 , 0 , 0 } }, // #44 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 23, { 55, 40, 0 , 0 , 0 , 0 } }, // #45 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 24, { 44, 9 , 0 , 0 , 0 , 0 } }, // #46 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 25, { 35, 7 , 0 , 0 , 0 , 0 } }, // #47 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 26, { 48, 13, 0 , 0 , 0 , 0 } }, // #48 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 55, 40, 0 , 0 , 0 , 0 } }, // #49 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 9 , 0 , 0 , 0 , 0 } }, // #50 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 7 , 0 , 0 , 0 , 0 } }, // #51 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 48, 13, 0 , 0 , 0 , 0 } }, // #52 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 40, 40, 0 , 0 , 0 , 0 } }, // #53 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 9 , 9 , 0 , 0 , 0 , 0 } }, // #54 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 7 , 7 , 0 , 0 , 0 , 0 } }, // #55 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 13, 13, 0 , 0 , 0 , 0 } }, // #56 [ref=2x]
@@ -3728,66 +3728,66 @@ const InstDB::RWInfo InstDB::rwInfoA[] = {
{ InstDB::RWInfo::kCategoryGeneric , 13, { 10, 5 , 0 , 0 , 0 , 0 } }, // #58 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 2 , 3 , 0 , 0 , 0 , 0 } }, // #59 [ref=13x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 3 , 0 , 0 , 0 , 0 } }, // #60 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 49, 19, 0 , 0 , 0 , 0 } }, // #61 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 56, 0 , 0 , 0 , 0 , 0 } }, // #62 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 50, 20, 0 , 0 , 0 , 0 } }, // #61 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 57, 0 , 0 , 0 , 0 , 0 } }, // #62 [ref=3x]
{ InstDB::RWInfo::kCategoryMov , 29, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #63 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 30, { 10, 5 , 0 , 0 , 0 , 0 } }, // #64 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 11, 3 , 0 , 0 , 0 , 0 } }, // #65 [ref=14x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 58, 0 , 0 , 0 , 0 } }, // #66 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 36, 60, 0 , 0 , 0 , 0 } }, // #66 [ref=1x]
{ InstDB::RWInfo::kCategoryMovh64 , 12, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #67 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 59, 7 , 0 , 0 , 0 , 0 } }, // #68 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 34, 7 , 0 , 0 , 0 , 0 } }, // #69 [ref=7x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 54, 5 , 0 , 0 , 0 , 0 } }, // #70 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 28, { 43, 9 , 0 , 0 , 0 , 0 } }, // #71 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 20, 19, 0 , 0 , 0 , 0 } }, // #72 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 61, 7 , 0 , 0 , 0 , 0 } }, // #68 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 35, 7 , 0 , 0 , 0 , 0 } }, // #69 [ref=7x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 55, 5 , 0 , 0 , 0 , 0 } }, // #70 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 28, { 44, 9 , 0 , 0 , 0 , 0 } }, // #71 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 62, 20, 0 , 0 , 0 , 0 } }, // #72 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 11, 3 , 0 , 0 , 0 , 0 } }, // #73 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 16, 28, 0 , 0 , 0 , 0 } }, // #74 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 17, 29, 0 , 0 , 0 , 0 } }, // #74 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 3 , 3 , 0 , 0 , 0 , 0 } }, // #75 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 50, 21, 0 , 0 , 0 , 0 } }, // #76 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 50, 62, 0 , 0 , 0 , 0 } }, // #77 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 25, 7 , 0 , 0 , 0 , 0 } }, // #78 [ref=18x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 65, 5 , 0 , 0 , 0 , 0 } }, // #79 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 51, 22, 0 , 0 , 0 , 0 } }, // #76 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 51, 65, 0 , 0 , 0 , 0 } }, // #77 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 26, 7 , 0 , 0 , 0 , 0 } }, // #78 [ref=18x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 68, 5 , 0 , 0 , 0 , 0 } }, // #79 [ref=2x]
{ InstDB::RWInfo::kCategoryVmov1_8 , 0 , { 0 , 0 , 0 , 0 , 0 , 0 } }, // #80 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 10, 9 , 0 , 0 , 0 , 0 } }, // #81 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 27, { 10, 13, 0 , 0 , 0 , 0 } }, // #82 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 4 , 0 , 0 , 0 , 0 , 0 } }, // #83 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 0 , 0 , 0 } }, // #84 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 2 , 67, 0 , 0 , 0 , 0 } }, // #85 [ref=8x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 36, 9 , 0 , 0 , 0 , 0 } }, // #86 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 15, 68, 0 , 0 , 0 , 0 } }, // #87 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 21, 20, 0 , 0 , 0 , 0 } }, // #88 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 20, 21, 0 , 0 , 0 , 0 } }, // #89 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 71, 3 , 0 , 0 , 0 , 0 } }, // #90 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 42, 0 , 0 , 0 , 0 } }, // #91 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 73, 5 , 0 , 0 , 0 , 0 } }, // #92 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 2 , 70, 0 , 0 , 0 , 0 } }, // #85 [ref=8x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 37, 9 , 0 , 0 , 0 , 0 } }, // #86 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 16, 71, 0 , 0 , 0 , 0 } }, // #87 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 22, 21, 0 , 0 , 0 , 0 } }, // #88 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 62, 22, 0 , 0 , 0 , 0 } }, // #89 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 74, 3 , 0 , 0 , 0 , 0 } }, // #90 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 43, 0 , 0 , 0 , 0 } }, // #91 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 76, 5 , 0 , 0 , 0 , 0 } }, // #92 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 11, 5 , 0 , 0 , 0 , 0 } }, // #93 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 37, { 71, 74, 0 , 0 , 0 , 0 } }, // #94 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 37, { 74, 77, 0 , 0 , 0 , 0 } }, // #94 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 38, { 11, 7 , 0 , 0 , 0 , 0 } }, // #95 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 39, { 11, 9 , 0 , 0 , 0 , 0 } }, // #96 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 11, 3 , 0 , 0 , 0 , 0 } }, // #97 [ref=7x]
{ InstDB::RWInfo::kCategoryVmov2_1 , 40, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #98 [ref=14x]
{ InstDB::RWInfo::kCategoryVmov1_2 , 14, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #99 [ref=7x]
{ InstDB::RWInfo::kCategoryGeneric , 44, { 71, 42, 0 , 0 , 0 , 0 } }, // #100 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 43, 9 , 0 , 0 , 0 , 0 } }, // #101 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 44, { 74, 43, 0 , 0 , 0 , 0 } }, // #100 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 44, 9 , 0 , 0 , 0 , 0 } }, // #101 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 51, { 11, 3 , 0 , 0 , 0 , 0 } }, // #102 [ref=12x]
{ InstDB::RWInfo::kCategoryVmovddup , 52, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #103 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 34, 58, 0 , 0 , 0 , 0 } }, // #104 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 35, 60, 0 , 0 , 0 , 0 } }, // #104 [ref=2x]
{ InstDB::RWInfo::kCategoryVmovmskpd , 0 , { 0 , 0 , 0 , 0 , 0 , 0 } }, // #105 [ref=1x]
{ InstDB::RWInfo::kCategoryVmovmskps , 0 , { 0 , 0 , 0 , 0 , 0 , 0 } }, // #106 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 53, { 34, 7 , 0 , 0 , 0 , 0 } }, // #107 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 53, { 35, 7 , 0 , 0 , 0 , 0 } }, // #107 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 2 , { 3 , 3 , 0 , 0 , 0 , 0 } }, // #108 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 15, { 11, 39, 0 , 0 , 0 , 0 } }, // #109 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 15, { 11, 40, 0 , 0 , 0 , 0 } }, // #109 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 11, 7 , 0 , 0 , 0 , 0 } }, // #110 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 27, { 11, 13, 0 , 0 , 0 , 0 } }, // #111 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 34, 3 , 0 , 0 , 0 , 0 } }, // #112 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 3 , 0 , 0 , 0 , 0 } }, // #112 [ref=4x]
{ InstDB::RWInfo::kCategoryVmov1_4 , 57, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #113 [ref=6x]
{ InstDB::RWInfo::kCategoryVmov1_2 , 41, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #114 [ref=9x]
{ InstDB::RWInfo::kCategoryVmov1_8 , 58, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #115 [ref=3x]
{ InstDB::RWInfo::kCategoryVmov4_1 , 59, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #116 [ref=4x]
{ InstDB::RWInfo::kCategoryVmov8_1 , 60, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #117 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 18, { 11, 3 , 0 , 0 , 0 , 0 } }, // #118 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 17, { 43, 9 , 0 , 0 , 0 , 0 } }, // #119 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 32, { 34, 7 , 0 , 0 , 0 , 0 } }, // #120 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 17, { 44, 9 , 0 , 0 , 0 , 0 } }, // #119 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 32, { 35, 7 , 0 , 0 , 0 , 0 } }, // #120 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 2 , 2 , 0 , 0 , 0 , 0 } }, // #121 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 51, { 2 , 2 , 0 , 0 , 0 , 0 } } // #122 [ref=1x]
};
@@ -3802,95 +3802,95 @@ const InstDB::RWInfo InstDB::rwInfoB[] = {
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 4 , 5 , 14, 0 , 0 , 0 } }, // #6 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 2 , 0 , 0 , 0 , 0 , 0 } }, // #7 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 3 , 0 , 0 , 0 , 0 , 0 } }, // #8 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 17, 0 , 0 , 0 , 0 , 0 } }, // #9 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 18, 0 , 0 , 0 , 0 , 0 } }, // #9 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 3 , 0 , 0 , 0 , 0 , 0 } }, // #10 [ref=34x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 7 , 0 , 0 , 0 , 0 , 0 } }, // #11 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 18, 0 , 0 , 0 , 0 , 0 } }, // #12 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 19, 0 , 0 , 0 , 0 , 0 } }, // #12 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 6 , 7 , 0 , 0 , 0 , 0 } }, // #13 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 8 , 9 , 0 , 0 , 0 , 0 } }, // #14 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 2 , 3 , 21, 0 , 0 , 0 } }, // #15 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 4 , 22, 17, 23, 24, 0 } }, // #16 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 25, 26, 27, 28, 29, 0 } }, // #17 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 27, 30, 31, 15, 0 , 0 } }, // #18 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 27, 0 , 0 , 0 , 0 , 0 } }, // #19 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 2 , 3 , 22, 0 , 0 , 0 } }, // #15 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 4 , 23, 18, 24, 25, 0 } }, // #16 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 26, 27, 28, 29, 30, 0 } }, // #17 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 28, 31, 32, 16, 0 , 0 } }, // #18 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 28, 0 , 0 , 0 , 0 , 0 } }, // #19 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 2 , 0 , 0 , 0 , 0 , 0 } }, // #20 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 40, 41, 3 , 0 , 0 , 0 } }, // #21 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 17, { 43, 5 , 0 , 0 , 0 , 0 } }, // #22 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 41, 42, 3 , 0 , 0 , 0 } }, // #21 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 17, { 44, 5 , 0 , 0 , 0 , 0 } }, // #22 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 4 , 0 , 0 , 0 , 0 , 0 } }, // #23 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 18, { 3 , 0 , 0 , 0 , 0 , 0 } }, // #24 [ref=15x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 0 , 0 , 0 , 0 , 0 } }, // #25 [ref=16x]
{ InstDB::RWInfo::kCategoryGeneric , 19, { 45, 0 , 0 , 0 , 0 , 0 } }, // #26 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 19, { 46, 0 , 0 , 0 , 0 , 0 } }, // #27 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 45, 0 , 0 , 0 , 0 , 0 } }, // #25 [ref=16x]
{ InstDB::RWInfo::kCategoryGeneric , 19, { 46, 0 , 0 , 0 , 0 , 0 } }, // #26 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 19, { 47, 0 , 0 , 0 , 0 , 0 } }, // #27 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 20, { 3 , 0 , 0 , 0 , 0 , 0 } }, // #28 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 45, 0 , 0 , 0 , 0 , 0 } }, // #29 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 46, 0 , 0 , 0 , 0 , 0 } }, // #29 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 18, { 11, 0 , 0 , 0 , 0 , 0 } }, // #30 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 21, { 13, 0 , 0 , 0 , 0 , 0 } }, // #31 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 0 , 0 , 0 , 0 , 0 } }, // #32 [ref=8x]
{ InstDB::RWInfo::kCategoryGeneric , 21, { 47, 0 , 0 , 0 , 0 , 0 } }, // #33 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 7 , { 48, 0 , 0 , 0 , 0 , 0 } }, // #34 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 21, { 48, 0 , 0 , 0 , 0 , 0 } }, // #33 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 7 , { 49, 0 , 0 , 0 , 0 , 0 } }, // #34 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 20, { 11, 0 , 0 , 0 , 0 , 0 } }, // #35 [ref=2x]
{ InstDB::RWInfo::kCategoryImul , 22, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #36 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 51, 0 , 0 , 0 , 0 , 0 } }, // #37 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 25, 0 , 0 , 0 , 0 , 0 } }, // #38 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 52, 0 , 0 , 0 , 0 , 0 } }, // #37 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 26, 0 , 0 , 0 , 0 , 0 } }, // #38 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 4 , 9 , 0 , 0 , 0 , 0 } }, // #39 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 4 , 5 , 0 , 0 , 0 , 0 } }, // #40 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 54, 39, 39, 0 , 0 , 0 } }, // #41 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 43, 9 , 9 , 0 , 0 , 0 } }, // #42 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 34, 7 , 7 , 0 , 0 , 0 } }, // #43 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 47, 13, 13, 0 , 0 , 0 } }, // #44 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 54, 39, 0 , 0 , 0 , 0 } }, // #45 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 43, 9 , 0 , 0 , 0 , 0 } }, // #46 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 34, 7 , 0 , 0 , 0 , 0 } }, // #47 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 47, 13, 0 , 0 , 0 , 0 } }, // #48 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 47, 39, 39, 0 , 0 , 0 } }, // #49 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 34, 9 , 9 , 0 , 0 , 0 } }, // #50 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 43, 13, 13, 0 , 0 , 0 } }, // #51 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 55, 0 , 0 , 0 , 0 , 0 } }, // #52 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 55, 40, 40, 0 , 0 , 0 } }, // #41 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 9 , 9 , 0 , 0 , 0 } }, // #42 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 7 , 7 , 0 , 0 , 0 } }, // #43 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 48, 13, 13, 0 , 0 , 0 } }, // #44 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 55, 40, 0 , 0 , 0 , 0 } }, // #45 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 9 , 0 , 0 , 0 , 0 } }, // #46 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 7 , 0 , 0 , 0 , 0 } }, // #47 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 48, 13, 0 , 0 , 0 , 0 } }, // #48 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 48, 40, 40, 0 , 0 , 0 } }, // #49 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 9 , 9 , 0 , 0 , 0 } }, // #50 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 13, 13, 0 , 0 , 0 } }, // #51 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 56, 0 , 0 , 0 , 0 , 0 } }, // #52 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 28, { 9 , 0 , 0 , 0 , 0 , 0 } }, // #53 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 16, { 42, 0 , 0 , 0 , 0 , 0 } }, // #54 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 16, { 43, 0 , 0 , 0 , 0 , 0 } }, // #54 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 7 , { 13, 0 , 0 , 0 , 0 , 0 } }, // #55 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 3 , 0 , 0 , 0 , 0 , 0 } }, // #56 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 3 , 9 , 0 , 0 , 0 , 0 } }, // #57 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 5 , 5 , 20, 0 , 0 , 0 } }, // #58 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 7 , 7 , 20, 0 , 0 , 0 } }, // #59 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 18, 28, 57, 0 , 0 , 0 } }, // #60 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 60, 41, 3 , 0 , 0 , 0 } }, // #61 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 11, 11, 3 , 61, 0 , 0 } }, // #62 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 16, 28, 29, 0 , 0 , 0 } }, // #63 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 5 , 5 , 58, 0 , 0 , 0 } }, // #58 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 7 , 7 , 58, 0 , 0 , 0 } }, // #59 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 19, 29, 59, 0 , 0 , 0 } }, // #60 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 63, 42, 3 , 0 , 0 , 0 } }, // #61 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 11, 11, 3 , 64, 0 , 0 } }, // #62 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 17, 29, 30, 0 , 0 , 0 } }, // #63 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 3 , 0 , 0 , 0 , 0 , 0 } }, // #64 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 2 , { 2 , 3 , 0 , 0 , 0 , 0 } }, // #65 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 63, 16, 57 } }, // #66 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 64, 16, 57 } }, // #67 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 63, 0 , 0 } }, // #68 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 64, 0 , 0 } }, // #69 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 31, { 54, 5 , 0 , 0 , 0 , 0 } }, // #70 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 32, { 34, 5 , 0 , 0 , 0 , 0 } }, // #71 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 33, { 47, 3 , 0 , 0 , 0 , 0 } }, // #72 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 15, { 4 , 39, 0 , 0 , 0 , 0 } }, // #73 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 66, 17, 59 } }, // #66 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 67, 17, 59 } }, // #67 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 66, 0 , 0 } }, // #68 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 3 , { 5 , 5 , 0 , 67, 0 , 0 } }, // #69 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 31, { 55, 5 , 0 , 0 , 0 , 0 } }, // #70 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 32, { 35, 5 , 0 , 0 , 0 , 0 } }, // #71 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 33, { 48, 3 , 0 , 0 , 0 , 0 } }, // #72 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 15, { 4 , 40, 0 , 0 , 0 , 0 } }, // #73 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 4 , 7 , 0 , 0 , 0 , 0 } }, // #74 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 27, { 2 , 13, 0 , 0 , 0 , 0 } }, // #75 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 66, 0 , 0 , 0 , 0 , 0 } }, // #76 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 34, 7 , 0 , 0 , 0 , 0 } }, // #77 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 61, 0 , 0 , 0 , 0 , 0 } }, // #78 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 69, 0 , 0 , 0 , 0 , 0 } }, // #76 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 35, 7 , 0 , 0 , 0 , 0 } }, // #77 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 10, { 64, 0 , 0 , 0 , 0 , 0 } }, // #78 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 11, 0 , 0 , 0 , 0 , 0 } }, // #79 [ref=6x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 15, 68, 28, 0 , 0 , 0 } }, // #80 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 43, 0 , 0 , 0 , 0 , 0 } }, // #81 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 34, 0 , 0 , 0 , 0 , 0 } }, // #82 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 15, 68, 63, 0 , 0 , 0 } }, // #83 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 16, 71, 29, 0 , 0 , 0 } }, // #80 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 44, 0 , 0 , 0 , 0 , 0 } }, // #81 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 35, 0 , 0 , 0 , 0 , 0 } }, // #82 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 16, 71, 66, 0 , 0 , 0 } }, // #83 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 2 , { 11, 3 , 0 , 0 , 0 , 0 } }, // #84 [ref=16x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 35, 7 , 0 , 0 , 0 , 0 } }, // #85 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 36, 9 , 0 , 0 , 0 , 0 } }, // #86 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 69, 0 , 0 , 0 , 0 , 0 } }, // #87 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 31, { 70, 0 , 0 , 0 , 0 , 0 } }, // #88 [ref=30x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 2 , 3 , 67, 0 , 0 , 0 } }, // #89 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 4 , { 36, 7 , 0 , 0 , 0 , 0 } }, // #85 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 37, 9 , 0 , 0 , 0 , 0 } }, // #86 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 72, 0 , 0 , 0 , 0 , 0 } }, // #87 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 31, { 73, 0 , 0 , 0 , 0 , 0 } }, // #88 [ref=30x]
{ InstDB::RWInfo::kCategoryGeneric , 11, { 2 , 3 , 70, 0 , 0 , 0 } }, // #89 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 34, { 11, 0 , 0 , 0 , 0 , 0 } }, // #90 [ref=3x]
{ InstDB::RWInfo::kCategoryGeneric , 28, { 43, 0 , 0 , 0 , 0 , 0 } }, // #91 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 16, { 71, 0 , 0 , 0 , 0 , 0 } }, // #92 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 72, 42, 42, 0 , 0 , 0 } }, // #93 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 71, 0 , 0 , 0 , 0 , 0 } }, // #94 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 9 , 57, 16, 0 , 0 , 0 } }, // #95 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 17, { 51, 0 , 0 , 0 , 0 , 0 } }, // #96 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 72, 42, 42, 42, 42, 5 } }, // #97 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 28, { 44, 0 , 0 , 0 , 0 , 0 } }, // #91 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 16, { 74, 0 , 0 , 0 , 0 , 0 } }, // #92 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 75, 43, 43, 0 , 0 , 0 } }, // #93 [ref=5x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 74, 0 , 0 , 0 , 0 , 0 } }, // #94 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 9 , 59, 17, 0 , 0 , 0 } }, // #95 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 17, { 52, 0 , 0 , 0 , 0 , 0 } }, // #96 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 75, 43, 43, 43, 43, 5 } }, // #97 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 4 , 5 , 5 , 5 , 5 , 5 } }, // #98 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 10, 5 , 7 , 0 , 0 , 0 } }, // #99 [ref=8x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 10, 5 , 9 , 0 , 0 , 0 } }, // #100 [ref=9x]
@@ -3898,60 +3898,60 @@ const InstDB::RWInfo InstDB::rwInfoB[] = {
{ InstDB::RWInfo::kCategoryGeneric , 35, { 11, 5 , 7 , 0 , 0 , 0 } }, // #102 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 11, 5 , 9 , 0 , 0 , 0 } }, // #103 [ref=1x]
{ InstDB::RWInfo::kCategoryVmov1_2 , 41, { 0 , 0 , 0 , 0 , 0 , 0 } }, // #104 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 10, 75, 7 , 0 , 0 , 0 } }, // #105 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 42, { 10, 58, 3 , 0 , 0 , 0 } }, // #106 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 42, { 10, 75, 3 , 0 , 0 , 0 } }, // #107 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 10, 58, 9 , 0 , 0 , 0 } }, // #108 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 10, 78, 7 , 0 , 0 , 0 } }, // #105 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 42, { 10, 60, 3 , 0 , 0 , 0 } }, // #106 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 42, { 10, 78, 3 , 0 , 0 , 0 } }, // #107 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 10, 60, 9 , 0 , 0 , 0 } }, // #108 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 43, { 10, 5 , 5 , 0 , 0 , 0 } }, // #109 [ref=9x]
{ InstDB::RWInfo::kCategoryGeneric , 45, { 10, 74, 0 , 0 , 0 , 0 } }, // #110 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 45, { 10, 77, 0 , 0 , 0 , 0 } }, // #110 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 45, { 10, 3 , 0 , 0 , 0 , 0 } }, // #111 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 46, { 73, 42, 0 , 0 , 0 , 0 } }, // #112 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 46, { 76, 43, 0 , 0 , 0 , 0 } }, // #112 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 2 , 3 , 3 , 0 , 0 , 0 } }, // #113 [ref=60x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 4 , 58, 7 , 0 , 0 , 0 } }, // #114 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 4 , 75, 9 , 0 , 0 , 0 } }, // #115 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 4 , 60, 7 , 0 , 0 , 0 } }, // #114 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 4 , 78, 9 , 0 , 0 , 0 } }, // #115 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 6 , 7 , 7 , 0 , 0 , 0 } }, // #116 [ref=11x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 8 , 9 , 9 , 0 , 0 , 0 } }, // #117 [ref=11x]
{ InstDB::RWInfo::kCategoryGeneric , 47, { 11, 3 , 3 , 3 , 0 , 0 } }, // #118 [ref=15x]
{ InstDB::RWInfo::kCategoryGeneric , 48, { 34, 7 , 7 , 7 , 0 , 0 } }, // #119 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 49, { 43, 9 , 9 , 9 , 0 , 0 } }, // #120 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 25, 7 , 7 , 0 , 0 , 0 } }, // #121 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 51, 9 , 9 , 0 , 0 , 0 } }, // #122 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 34, 3 , 0 , 0 , 0 , 0 } }, // #123 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 34, 9 , 0 , 0 , 0 , 0 } }, // #124 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 48, { 35, 7 , 7 , 7 , 0 , 0 } }, // #119 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 49, { 44, 9 , 9 , 9 , 0 , 0 } }, // #120 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 26, 7 , 7 , 0 , 0 , 0 } }, // #121 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 52, 9 , 9 , 0 , 0 , 0 } }, // #122 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 14, { 35, 3 , 0 , 0 , 0 , 0 } }, // #123 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 5 , { 35, 9 , 0 , 0 , 0 , 0 } }, // #124 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 2 , 3 , 2 , 0 , 0 , 0 } }, // #125 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 2 , 3 , 2 , 0 , 0 , 0 } }, // #126 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 18, { 4 , 3 , 4 , 0 , 0 , 0 } }, // #127 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 10, 58, 7 , 0 , 0 , 0 } }, // #128 [ref=11x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 10, 75, 9 , 0 , 0 , 0 } }, // #129 [ref=13x]
{ InstDB::RWInfo::kCategoryGeneric , 43, { 73, 74, 5 , 0 , 0 , 0 } }, // #130 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 35, { 10, 60, 7 , 0 , 0 , 0 } }, // #128 [ref=11x]
{ InstDB::RWInfo::kCategoryGeneric , 36, { 10, 78, 9 , 0 , 0 , 0 } }, // #129 [ref=13x]
{ InstDB::RWInfo::kCategoryGeneric , 43, { 76, 77, 5 , 0 , 0 , 0 } }, // #130 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 43, { 11, 3 , 5 , 0 , 0 , 0 } }, // #131 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 50, { 71, 42, 74, 0 , 0 , 0 } }, // #132 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 50, { 74, 43, 77, 0 , 0 , 0 } }, // #132 [ref=4x]
{ InstDB::RWInfo::kCategoryVmaskmov , 0 , { 0 , 0 , 0 , 0 , 0 , 0 } }, // #133 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 34, 0 , 0 , 0 , 0 , 0 } }, // #134 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 21, 0 , 0 , 0 , 0 , 0 } }, // #135 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 58, 58, 0 , 0 , 0 } }, // #136 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 35, 0 , 0 , 0 , 0 , 0 } }, // #134 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 22, 0 , 0 , 0 , 0 , 0 } }, // #135 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 60, 60, 0 , 0 , 0 } }, // #136 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 10, 7 , 7 , 0 , 0 , 0 } }, // #137 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 7 , 7 , 0 , 0 , 0 } }, // #138 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 10, 58, 7 , 0 , 0 , 0 } }, // #139 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 58, 7 , 0 , 0 , 0 } }, // #140 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 75, 9 , 0 , 0 , 0 } }, // #141 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 76, 0 , 0 , 0 , 0 , 0 } }, // #142 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 54, { 34, 11, 3 , 3 , 0 , 0 } }, // #143 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 71, 42, 42, 42, 42, 5 } }, // #144 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 34, 3 , 3 , 0 , 0 , 0 } }, // #145 [ref=17x]
{ InstDB::RWInfo::kCategoryGeneric , 50, { 73, 74, 74, 0 , 0 , 0 } }, // #146 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 12, { 10, 60, 7 , 0 , 0 , 0 } }, // #139 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 60, 7 , 0 , 0 , 0 } }, // #140 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 10, 78, 9 , 0 , 0 , 0 } }, // #141 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 79, 0 , 0 , 0 , 0 , 0 } }, // #142 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 54, { 35, 11, 3 , 3 , 0 , 0 } }, // #143 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 13, { 74, 43, 43, 43, 43, 5 } }, // #144 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 6 , { 35, 3 , 3 , 0 , 0 , 0 } }, // #145 [ref=17x]
{ InstDB::RWInfo::kCategoryGeneric , 50, { 76, 77, 77, 0 , 0 , 0 } }, // #146 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 22, { 11, 3 , 3 , 0 , 0 , 0 } }, // #147 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 7 , { 47, 5 , 0 , 0 , 0 , 0 } }, // #148 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 55, { 10, 5 , 39, 0 , 0 , 0 } }, // #149 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 7 , { 48, 5 , 0 , 0 , 0 , 0 } }, // #148 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 55, { 10, 5 , 40, 0 , 0 , 0 } }, // #149 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 56, { 10, 5 , 13, 0 , 0 , 0 } }, // #150 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 43, { 10, 5 , 5 , 5 , 0 , 0 } }, // #151 [ref=12x]
{ InstDB::RWInfo::kCategoryGeneric , 61, { 10, 5 , 5 , 5 , 0 , 0 } }, // #152 [ref=1x]
{ InstDB::RWInfo::kCategoryGeneric , 62, { 10, 5 , 5 , 0 , 0 , 0 } }, // #153 [ref=12x]
{ InstDB::RWInfo::kCategoryGeneric , 22, { 11, 3 , 5 , 0 , 0 , 0 } }, // #154 [ref=9x]
{ InstDB::RWInfo::kCategoryGeneric , 63, { 11, 3 , 0 , 0 , 0 , 0 } }, // #155 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 57, 16, 28, 0 , 0 , 0 } }, // #156 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 3 , 57, 16, 0 , 0 , 0 } }, // #157 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 57, 16, 0 , 0 , 0 } } // #158 [ref=8x]
{ InstDB::RWInfo::kCategoryGeneric , 0 , { 59, 17, 29, 0 , 0 , 0 } }, // #156 [ref=2x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 3 , 59, 17, 0 , 0 , 0 } }, // #157 [ref=4x]
{ InstDB::RWInfo::kCategoryGeneric , 8 , { 11, 59, 17, 0 , 0 , 0 } } // #158 [ref=8x]
};
const InstDB::RWInfoOp InstDB::rwInfoOp[] = {
@@ -3966,72 +3966,75 @@ const InstDB::RWInfoOp InstDB::rwInfoOp[] = {
{ 0x000000000000000Fu, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kRW }, // #8 [ref=18x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #9 [ref=133x]
{ 0x0000000000000000u, 0x000000000000FFFFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #10 [ref=160x]
{ 0x0000000000000000u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #11 [ref=421x]
{ 0x0000000000000000u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #11 [ref=420x]
{ 0x0000000000000003u, 0x0000000000000003u, 0xFF, { 0 }, OpRWInfo::kRW }, // #12 [ref=1x]
{ 0x0000000000000003u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #13 [ref=34x]
{ 0x000000000000FFFFu, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #14 [ref=4x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #15 [ref=9x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #16 [ref=23x]
{ 0x00000000000000FFu, 0x00000000000000FFu, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #17 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kMemPhysId }, // #18 [ref=3x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x06, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kMemPhysId }, // #19 [ref=3x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x07, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kMemPhysId }, // #20 [ref=7x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #21 [ref=7x]
{ 0x00000000000000FFu, 0x00000000000000FFu, 0x02, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #22 [ref=1x]
{ 0x00000000000000FFu, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #23 [ref=1x]
{ 0x00000000000000FFu, 0x0000000000000000u, 0x03, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #24 [ref=1x]
{ 0x00000000000000FFu, 0x00000000000000FFu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #25 [ref=21x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0x02, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #26 [ref=1x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #27 [ref=4x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #28 [ref=13x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x03, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #29 [ref=2x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x03, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #30 [ref=1x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0x01, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #31 [ref=1x]
{ 0x0000000000000000u, 0x00000000000000FFu, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #32 [ref=1x]
{ 0x00000000000000FFu, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #33 [ref=1x]
{ 0x0000000000000000u, 0x00000000000000FFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #34 [ref=80x]
{ 0x0000000000000000u, 0x00000000000000FFu, 0xFF, { 0 }, OpRWInfo::kWrite }, // #35 [ref=6x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kWrite }, // #36 [ref=6x]
{ 0x0000000000000000u, 0x0000000000000003u, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId }, // #37 [ref=1x]
{ 0x0000000000000003u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #38 [ref=1x]
{ 0x0000000000000001u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #39 [ref=28x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRW | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #40 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #41 [ref=3x]
{ 0xFFFFFFFFFFFFFFFFu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #42 [ref=45x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #43 [ref=30x]
{ 0x00000000000003FFu, 0x00000000000003FFu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #44 [ref=22x]
{ 0x00000000000003FFu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #45 [ref=13x]
{ 0x0000000000000000u, 0x00000000000003FFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #46 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000003u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #47 [ref=15x]
{ 0x0000000000000000u, 0x0000000000000003u, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #48 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #49 [ref=2x]
{ 0x0000000000000003u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #50 [ref=4x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #51 [ref=4x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x07, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kMemPhysId }, // #52 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #53 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000001u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #54 [ref=14x]
{ 0x0000000000000000u, 0x0000000000000001u, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId }, // #55 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRW | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #56 [ref=3x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #57 [ref=22x]
{ 0x000000000000FF00u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #58 [ref=23x]
{ 0x0000000000000000u, 0x000000000000FF00u, 0xFF, { 0 }, OpRWInfo::kWrite }, // #59 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #60 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #61 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x06, { 0 }, OpRWInfo::kRead | OpRWInfo::kMemPhysId }, // #62 [ref=1x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x01, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #63 [ref=5x]
{ 0x0000000000000000u, 0x000000000000FFFFu, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #64 [ref=4x]
{ 0x0000000000000000u, 0x0000000000000007u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #65 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x04, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #66 [ref=1x]
{ 0x0000000000000001u, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #67 [ref=10x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #68 [ref=7x]
{ 0x0000000000000001u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #69 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000001u, 0xFF, { 0 }, OpRWInfo::kWrite }, // #70 [ref=30x]
{ 0x0000000000000000u, 0xFFFFFFFFFFFFFFFFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #71 [ref=20x]
{ 0xFFFFFFFFFFFFFFFFu, 0xFFFFFFFFFFFFFFFFu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #72 [ref=7x]
{ 0x0000000000000000u, 0x00000000FFFFFFFFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #73 [ref=10x]
{ 0x00000000FFFFFFFFu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #74 [ref=16x]
{ 0x000000000000FFF0u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #75 [ref=18x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId } // #76 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kMemBaseWrite | OpRWInfo::kMemIndexWrite }, // #15 [ref=1x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #16 [ref=9x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #17 [ref=23x]
{ 0x00000000000000FFu, 0x00000000000000FFu, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #18 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kMemPhysId }, // #19 [ref=3x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x06, { 0 }, OpRWInfo::kRead | OpRWInfo::kMemBaseRW | OpRWInfo::kMemBasePostModify | OpRWInfo::kMemPhysId }, // #20 [ref=3x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x07, { 0 }, OpRWInfo::kRead | OpRWInfo::kMemBaseRW | OpRWInfo::kMemBasePostModify | OpRWInfo::kMemPhysId }, // #21 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #22 [ref=7x]
{ 0x00000000000000FFu, 0x00000000000000FFu, 0x02, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #23 [ref=1x]
{ 0x00000000000000FFu, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #24 [ref=1x]
{ 0x00000000000000FFu, 0x0000000000000000u, 0x03, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #25 [ref=1x]
{ 0x00000000000000FFu, 0x00000000000000FFu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #26 [ref=21x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0x02, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #27 [ref=1x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #28 [ref=4x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #29 [ref=13x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x03, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #30 [ref=2x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x03, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #31 [ref=1x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0x01, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #32 [ref=1x]
{ 0x0000000000000000u, 0x00000000000000FFu, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #33 [ref=1x]
{ 0x00000000000000FFu, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #34 [ref=1x]
{ 0x0000000000000000u, 0x00000000000000FFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #35 [ref=80x]
{ 0x0000000000000000u, 0x00000000000000FFu, 0xFF, { 0 }, OpRWInfo::kWrite }, // #36 [ref=6x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kWrite }, // #37 [ref=6x]
{ 0x0000000000000000u, 0x0000000000000003u, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId }, // #38 [ref=1x]
{ 0x0000000000000003u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #39 [ref=1x]
{ 0x0000000000000001u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #40 [ref=28x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRW | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #41 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #42 [ref=3x]
{ 0xFFFFFFFFFFFFFFFFu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #43 [ref=45x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #44 [ref=30x]
{ 0x00000000000003FFu, 0x00000000000003FFu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #45 [ref=22x]
{ 0x00000000000003FFu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #46 [ref=13x]
{ 0x0000000000000000u, 0x00000000000003FFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #47 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000003u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #48 [ref=15x]
{ 0x0000000000000000u, 0x0000000000000003u, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #49 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #50 [ref=2x]
{ 0x0000000000000003u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #51 [ref=4x]
{ 0x000000000000000Fu, 0x000000000000000Fu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #52 [ref=4x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x07, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kMemPhysId }, // #53 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #54 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000001u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #55 [ref=14x]
{ 0x0000000000000000u, 0x0000000000000001u, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId }, // #56 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRW | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #57 [ref=3x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x07, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kMemPhysId }, // #58 [ref=3x]
{ 0x000000000000000Fu, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #59 [ref=22x]
{ 0x000000000000FF00u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #60 [ref=23x]
{ 0x0000000000000000u, 0x000000000000FF00u, 0xFF, { 0 }, OpRWInfo::kWrite }, // #61 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x07, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kMemBaseRW | OpRWInfo::kMemBasePostModify | OpRWInfo::kMemPhysId }, // #62 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kWrite | OpRWInfo::kRegPhysId | OpRWInfo::kZExt }, // #63 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x02, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #64 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x06, { 0 }, OpRWInfo::kRead | OpRWInfo::kMemPhysId }, // #65 [ref=1x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x01, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #66 [ref=5x]
{ 0x0000000000000000u, 0x000000000000FFFFu, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #67 [ref=4x]
{ 0x0000000000000000u, 0x0000000000000007u, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #68 [ref=2x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x04, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #69 [ref=1x]
{ 0x0000000000000001u, 0x0000000000000000u, 0x01, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #70 [ref=10x]
{ 0x0000000000000000u, 0x000000000000000Fu, 0x00, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt | OpRWInfo::kRegPhysId }, // #71 [ref=7x]
{ 0x0000000000000001u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRead | OpRWInfo::kRegPhysId }, // #72 [ref=1x]
{ 0x0000000000000000u, 0x0000000000000001u, 0xFF, { 0 }, OpRWInfo::kWrite }, // #73 [ref=30x]
{ 0x0000000000000000u, 0xFFFFFFFFFFFFFFFFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #74 [ref=20x]
{ 0xFFFFFFFFFFFFFFFFu, 0xFFFFFFFFFFFFFFFFu, 0xFF, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt }, // #75 [ref=7x]
{ 0x0000000000000000u, 0x00000000FFFFFFFFu, 0xFF, { 0 }, OpRWInfo::kWrite | OpRWInfo::kZExt }, // #76 [ref=10x]
{ 0x00000000FFFFFFFFu, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #77 [ref=16x]
{ 0x000000000000FFF0u, 0x0000000000000000u, 0xFF, { 0 }, OpRWInfo::kRead }, // #78 [ref=18x]
{ 0x0000000000000000u, 0x0000000000000000u, 0x00, { 0 }, OpRWInfo::kRW | OpRWInfo::kZExt | OpRWInfo::kRegPhysId } // #79 [ref=1x]
};
const InstDB::RWInfoRm InstDB::rwInfoRm[] = {

View File

@@ -31,6 +31,10 @@
using namespace asmjit;
static char accessLetter(bool r, bool w) noexcept {
return r && w ? 'X' : r ? 'R' : w ? 'W' : '_';
}
static void printInfo(uint32_t arch, const BaseInst& inst, const Operand_* operands, size_t opCount) {
StringTmp<512> sb;
@@ -52,12 +56,26 @@ static void printInfo(uint32_t arch, const BaseInst& inst, const Operand_* opera
sb.append("Operands:\n");
for (uint32_t i = 0; i < rw.opCount(); i++) {
const OpRWInfo& op = rw.operand(i);
const char* access = op.isReadOnly() ? "R" :
op.isWriteOnly() ? "W" :
op.isReadWrite() ? "X" : "_";
sb.appendFormat(" [%u] RW=%s Read=%016llX Write=%016llX Extend=%016llX",
i, access, op.readByteMask(), op.writeByteMask(), op.extendByteMask());
sb.appendFormat(" [%u] Op=%c Read=%016llX Write=%016llX Extend=%016llX",
i,
accessLetter(op.isRead(), op.isWrite()),
op.readByteMask(),
op.writeByteMask(),
op.extendByteMask());
if (op.isMemBaseUsed()) {
sb.appendFormat(" Base=%c", accessLetter(op.isMemBaseRead(), op.isMemBaseWrite()));
if (op.isMemBasePreModify())
sb.appendFormat(" <PRE>");
if (op.isMemBasePostModify())
sb.appendFormat(" <POST>");
}
if (op.isMemIndexUsed()) {
sb.appendFormat(" Index=%c", accessLetter(op.isMemIndexRead(), op.isMemIndexWrite()));
}
sb.append("\n");
}
@@ -103,6 +121,10 @@ static void testX86Arch() {
x86::Inst::kIdAdd,
x86::eax, x86::ebx);
printInfoSimple(arch,
x86::Inst::kIdLods,
x86::eax , dword_ptr(x86::rsi));
printInfoSimple(arch,
x86::Inst::kIdPshufd,
x86::xmm0, x86::xmm1, imm(0));

View File

@@ -1847,7 +1847,6 @@ class InstRWInfoTable extends core.Task {
this.rmInfoTable = new IndexedArray();
this.opInfoTable = new IndexedArray();
const _ = null;
this.rwCategoryByName = {
"imul" : "Imul",
"mov" : "Mov",
@@ -1861,6 +1860,8 @@ class InstRWInfoTable extends core.Task {
"vpmaskmovd": "Vmaskmov",
"vpmaskmovq": "Vmaskmov"
};
const _ = null;
this.rwCategoryByData = {
Vmov1_8: [
[{access: "W", flags: {}, fixed: -1, index: 0, width: 8}, {access: "R", flags: {}, fixed: -1, index: 0, width: 64},_,_,_,_],
@@ -1928,8 +1929,8 @@ class InstRWInfoTable extends core.Task {
const o2Insts = dbInsts.filter((inst) => { return inst.operands.length === 2; });
const oxInsts = dbInsts.filter((inst) => { return inst.operands.length !== 2; });
const rwInfoArray = [this.rwInfo(o2Insts), this.rwInfo(oxInsts)];
const rmInfoArray = [this.rmInfo(o2Insts), this.rmInfo(oxInsts)];
const rwInfoArray = [this.rwInfo(inst, o2Insts), this.rwInfo(inst, oxInsts)];
const rmInfoArray = [this.rmInfo(inst, o2Insts), this.rmInfo(inst, oxInsts)];
for (var i = 0; i < 2; i++) {
const rwInfo = rwInfoArray[i];
@@ -2043,7 +2044,9 @@ class InstRWInfoTable extends core.Task {
// Read/Write Info
// ---------------
rwInfo(dbInsts) {
rwInfo(asmInst, dbInsts) {
const self = this;
function nullOps() {
return [null, null, null, null, null, null];
}
@@ -2089,6 +2092,9 @@ class InstRWInfoTable extends core.Task {
if (op.zext)
d.flags.ZExt = true;
for (var k in self.rwOpFlagsForInstruction(asmInst.name, j))
d.flags[k] = true;
if ((step === -1 || step === j) || op.rwxIndex !== 0 || op.rwxWidth !== opSize) {
d.index = op.rwxIndex;
d.width = op.rwxWidth;
@@ -2184,10 +2190,29 @@ class InstRWInfoTable extends core.Task {
return null;
}
rwOpFlagsForInstruction(instName, opIndex) {
const toMap = MapUtils.arrayToMap;
// TODO: We should be able to get this information from asmdb.
switch (instName + "@" + opIndex) {
case "cmps@0": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "cmps@1": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "movs@0": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "movs@1": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "lods@1": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "stos@0": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "scas@1": return toMap(['MemBaseRW', 'MemBasePostModify']);
case "bndstx@0": return toMap(['MemBaseWrite', 'MemIndexWrite']);
default:
return {};
}
}
// Reg/Mem Info
// ------------
rmInfo(dbInsts) {
rmInfo(asmInst, dbInsts) {
const info = {
category: "None",
rmIndexes: this.rmReplaceableIndexes(dbInsts),