mirror of
https://github.com/asmjit/asmjit.git
synced 2025-12-17 20:44:37 +03:00
Fixed encoding of 'CRC32 r64, r8/m8' instruction
Fixed encoding of 'POPCNT|TZCNT|LZCNT r16, r16/m16' instruction Fixed encoding of EVEX instructions that don't provide VEX prefix equivalent Added 'LOCK MOV CR8' extension used by AMD processors in 32-bit mode and 'ALTMOVCR8' CPU feature Renamed some CPU features to respect their names used in X86/X64 architecture manuals Added validation of immediate operands (correct size, correct sign/zero extension) Added validation of explicit/implicit size of memory operands Added validation of LOCK/REP/REPNZ prefixes to x86 validator Reorganized some X86 instruction tables, removed family specific tables, introduced OperationData Improved instruction tables generator to automatically generate instruction flags Regenerated all instruction tables to respect the current state of 'asmdb.x86data'
This commit is contained in:
@@ -91,16 +91,6 @@ class StringUtils {
|
||||
return s;
|
||||
}
|
||||
|
||||
static arrayToMap(arr, value) {
|
||||
if (value === undefined)
|
||||
value = true;
|
||||
|
||||
const map = Object.create(null);
|
||||
for (var i = 0; i < arr.length; i++)
|
||||
map[arr[i]] = value;
|
||||
return map;
|
||||
}
|
||||
|
||||
static makeCxxArray(array, code, indent) {
|
||||
if (!indent) indent = kIndent;
|
||||
return `${code} = {\n${indent}` + array.join(`,\n${indent}`) + `\n};\n`;
|
||||
@@ -161,6 +151,65 @@ class StringUtils {
|
||||
}
|
||||
exports.StringUtils = StringUtils;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// [MapUtils]
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class MapUtils {
|
||||
static arrayToMap(arr, value) {
|
||||
if (value === undefined)
|
||||
value = true;
|
||||
|
||||
const map = Object.create(null);
|
||||
for (var i = 0; i < arr.length; i++)
|
||||
map[arr[i]] = value;
|
||||
return map;
|
||||
}
|
||||
|
||||
static equals(a, b) {
|
||||
for (var k in a) if (!hasOwn.call(b, k)) return false;
|
||||
for (var k in b) if (!hasOwn.call(a, k)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static firstOf(map, flags) {
|
||||
for (var k in flags)
|
||||
if (hasOwn.call(map, k))
|
||||
return k;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
static anyOf(map, flags) {
|
||||
for (var k in flags)
|
||||
if (hasOwn.call(map, k))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static add(a, b) {
|
||||
for (var k in b)
|
||||
a[k] = b[k];
|
||||
return a;
|
||||
}
|
||||
|
||||
static and(a, b) {
|
||||
const out = Object.create(null);
|
||||
for (var k in a)
|
||||
if (hasOwn.call(b, k))
|
||||
out[k] = true;
|
||||
return out;
|
||||
}
|
||||
|
||||
static xor(a, b) {
|
||||
const out = Object.create(null);
|
||||
for (var k in a) if (!hasOwn.call(b, k)) out[k] = true;
|
||||
for (var k in b) if (!hasOwn.call(a, k)) out[k] = true;
|
||||
return out;
|
||||
}
|
||||
};
|
||||
exports.MapUtils = MapUtils;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// [IndexedArray]
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user