Added support for BND/REPNE call/jmp/jcc/ret

This commit is contained in:
kobalicek
2020-02-23 22:51:53 +01:00
parent 967dde0fc4
commit 0072c202db
4 changed files with 1652 additions and 1635 deletions

View File

@@ -377,22 +377,40 @@ public:
//! Use XRELEASE prefix. //! Use XRELEASE prefix.
inline This& xrelease() noexcept { return _addInstOptions(Inst::kOptionXRelease); } inline This& xrelease() noexcept { return _addInstOptions(Inst::kOptionXRelease); }
//! Use BND/REPNE prefix.
//!
//! \note This is the same as using `repne()` or `repnz()` prefix.
inline This& bnd() noexcept { return _addInstOptions(Inst::kOptionRepne); }
//! Use REP/REPZ prefix. //! Use REP/REPZ prefix.
//!
//! \note This is the same as using `repe()` or `repz()` prefix.
inline This& rep(const Gp& zcx) noexcept { inline This& rep(const Gp& zcx) noexcept {
static_cast<This*>(this)->_extraReg.init(zcx); static_cast<This*>(this)->_extraReg.init(zcx);
return _addInstOptions(Inst::kOptionRep); return _addInstOptions(Inst::kOptionRep);
} }
//! Use REP/REPE prefix. //! Use REP/REPE prefix.
//!
//! \note This is the same as using `rep()` or `repz()` prefix.
inline This& repe(const Gp& zcx) noexcept { return rep(zcx); } inline This& repe(const Gp& zcx) noexcept { return rep(zcx); }
//! Use REP/REPE prefix. //! Use REP/REPE prefix.
//!
//! \note This is the same as using `rep()` or `repe()` prefix.
inline This& repz(const Gp& zcx) noexcept { return rep(zcx); } inline This& repz(const Gp& zcx) noexcept { return rep(zcx); }
//! Use REPNE prefix. //! Use REPNE prefix.
//!
//! \note This is the same as using `bnd()` or `repnz()` prefix.
inline This& repne(const Gp& zcx) noexcept { inline This& repne(const Gp& zcx) noexcept {
static_cast<This*>(this)->_extraReg.init(zcx); static_cast<This*>(this)->_extraReg.init(zcx);
return _addInstOptions(Inst::kOptionRepne); return _addInstOptions(Inst::kOptionRepne);
} }
//! Use REPNE prefix. //! Use REPNE prefix.
//!
//! \note This is the same as using `bnd()` or `repne()` prefix.
inline This& repnz(const Gp& zcx) noexcept { return repne(zcx); } inline This& repnz(const Gp& zcx) noexcept { return repne(zcx); }
//! \} //! \}

File diff suppressed because it is too large Load Diff

View File

@@ -189,6 +189,7 @@ class GenUtils {
if (dbInst.attributes.Lock ) f.Lock = true; if (dbInst.attributes.Lock ) f.Lock = true;
if (dbInst.attributes.XAcquire ) f.XAcquire = true; if (dbInst.attributes.XAcquire ) f.XAcquire = true;
if (dbInst.attributes.XRelease ) f.XRelease = true; if (dbInst.attributes.XRelease ) f.XRelease = true;
if (dbInst.attributes.BND ) f.Rep = true;
if (dbInst.attributes.REP ) f.Rep = true; if (dbInst.attributes.REP ) f.Rep = true;
if (dbInst.attributes.REPNE ) f.Rep = true; if (dbInst.attributes.REPNE ) f.Rep = true;
if (dbInst.attributes.RepIgnored) f.RepIgnored = true; if (dbInst.attributes.RepIgnored) f.RepIgnored = true;

View File

@@ -23,7 +23,7 @@ const fs = require("fs");
const hasOwn = Object.prototype.hasOwnProperty; const hasOwn = Object.prototype.hasOwnProperty;
const asmdb = (function() { const asmdb = (function() {
// Try to import local 'asmdb' package, if available. // Try to import a local 'asmdb' package, if available.
try { try {
return require("./asmdb"); return require("./asmdb");
} }