diff options
author | kobalicek <kobalicek.petr@gmail.com> | 2017-02-26 14:19:49 +0300 |
---|---|---|
committer | kobalicek <kobalicek.petr@gmail.com> | 2017-02-26 14:19:49 +0300 |
commit | 4a94223ebda87b5fa125666e86bb66057e578a5d (patch) | |
tree | ad8f524a2f34a6cbc5f8678af9b8e9b5c345f859 /tools | |
parent | f589e7165a0f107e24df5366826207a4211e7e60 (diff) |
Added new instructions + xacquire|xrelease prefixes, reorganized instruction options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/generate-x86.js | 81 |
1 files changed, 49 insertions, 32 deletions
diff --git a/tools/generate-x86.js b/tools/generate-x86.js index 6a62e03..764df71 100644 --- a/tools/generate-x86.js +++ b/tools/generate-x86.js @@ -272,12 +272,13 @@ class GenUtils { for (i = 0; i < group.length; i++) { const inst = group[i]; const name = inst.name; - const operands = inst.operands; - if (inst.attributes.LOCK ) f.Lock = true; - if (inst.attributes.REP ) f.Rep = true; - if (inst.attributes.REPNZ) f.Repnz = true; + if (inst.attributes.LOCK ) f.Lock = true; + if (inst.attributes.REP ) f.Rep = true; + if (inst.attributes.REPNZ ) f.Repnz = true; + if (inst.attributes.XACQUIRE) f.XAcquire = true; + if (inst.attributes.XRELEASE) f.XRelease = true; if (inst.fpu) { for (var j = 0; j < operands.length; j++) { @@ -458,6 +459,7 @@ class GenUtils { case "loop": case "loope": case "loopne": + case "xbegin": return "Conditional"; case "jmp" : return "Direct"; @@ -480,7 +482,7 @@ const RegOp = MapUtils.arrayToMap([ ]); const MemOp = MapUtils.arrayToMap([ - "m8", "m16", "m32", "m64", "m80", "m128", "m256", "m512", "m1024" + "m8", "m16", "m32", "m48", "m64", "m80", "m128", "m256", "m512", "m1024" ]); const OpSortPriority = { @@ -510,22 +512,23 @@ const OpSortPriority = { "m8" : 32, "m16" : 33, "m32" : 34, - "m64" : 35, - "m80" : 36, - "m128" : 37, - "m256" : 38, - "m512" : 39, - "m1024" : 40, - "mib" : 41, - "vm32x" : 42, - "vm32y" : 43, - "vm32z" : 44, - "vm64x" : 45, - "vm64y" : 46, - "vm64z" : 47, - "memBase" : 48, - "memES" : 49, - "memDS" : 50, + "m48" : 35, + "m64" : 36, + "m80" : 37, + "m128" : 38, + "m256" : 39, + "m512" : 40, + "m1024" : 41, + "mib" : 42, + "vm32x" : 43, + "vm32y" : 44, + "vm32z" : 45, + "vm64x" : 46, + "vm64y" : 47, + "vm64z" : 48, + "memBase" : 49, + "memES" : 50, + "memDS" : 51, "i4" : 60, "u4" : 61, @@ -570,6 +573,7 @@ const OpToAsmJitOp = { "m8" : "MEM(M8)", "m16" : "MEM(M16)", "m32" : "MEM(M32)", + "m48" : "MEM(M48)", "m64" : "MEM(M64)", "m80" : "MEM(M80)", "m128" : "MEM(M128)", @@ -757,15 +761,16 @@ class OSignature { case "ymm" : case "zmm" : mFlags[k] = true; break; - case "m8" : mFlags.mem = true; mMemFlags.m8 = true; break; - case "m16" : mFlags.mem = true; mMemFlags.m16 = true; break; - case "m32" : mFlags.mem = true; mMemFlags.m32 = true; break; - case "m64" : mFlags.mem = true; mMemFlags.m64 = true; break; - case "m80" : mFlags.mem = true; mMemFlags.m80 = true; break; - case "m128" : mFlags.mem = true; mMemFlags.m128 = true; break; - case "m256" : mFlags.mem = true; mMemFlags.m256 = true; break; - case "m512" : mFlags.mem = true; mMemFlags.m512 = true; break; - case "m1024" : mFlags.mem = true; mMemFlags.m1024 = true; break; + case "m8" : + case "m16" : + case "m32" : + case "m48" : + case "m64" : + case "m80" : + case "m128" : + case "m256" : + case "m512" : + case "m1024" : mFlags.mem = true; mMemFlags[k] = true; break; case "mib" : mFlags.mem = true; mMemFlags.mib = true; break; case "mem" : mFlags.mem = true; mMemFlags.mAny = true; break; @@ -800,6 +805,12 @@ class OSignature { mFlags[k] = true; break; + case "rel16" : + mFlags.i32 = true; + mFlags.i64 = true; + mFlags.rel32 = true; + break; + default: { switch (k) { case "es" : mFlags.sreg = true; sRegMask |= 1 << 1; break; @@ -1150,6 +1161,10 @@ class X86Generator extends base.BaseGenerator { if (mem === "m32int") mem = "m32"; if (mem === "m64int") mem = "m64"; + if (mem === "m16_16") mem = "m32"; + if (mem === "m16_32") mem = "m48"; + if (mem === "m16_64") mem = "m80"; + const op = new OSignature(); if (iop.read) op.flags.read = true; @@ -1709,6 +1724,7 @@ class X86Generator extends base.BaseGenerator { StringUtils.padLeft(inst.opcode1 , 26) + ", " + StringUtils.padLeft(inst.writeIndex , 2) + ", " + StringUtils.padLeft(inst.writeSize , 2) + ", " + + StringUtils.padLeft("0", 4) + ", " + StringUtils.padLeft("0", 3) + ", " + StringUtils.padLeft("0", 3) + ", " + StringUtils.padLeft("0", 3) + "),\n"; @@ -1720,7 +1736,7 @@ class X86Generator extends base.BaseGenerator { newInstFromInsts(insts) { function composeOpCode(obj) { - return `${obj.type}(${obj.prefix},${obj.opcode},${obj.o},${obj.l},${obj.w},${obj.ew},${obj.en})`; + return `${obj.type}(${obj.prefix},${obj.opcode},${obj.o},${obj.l},${obj.w},${obj.ew},${obj.en},${obj.tt})`; } function GetAccess(inst) { @@ -1778,7 +1794,8 @@ class X86Generator extends base.BaseGenerator { l : vexL !== undefined ? vexL : "_", w : vexW !== undefined ? vexW : "_", ew : evexW !== undefined ? vexEW : "_", - en : "_" + en : "_", + tt : "_ " }); return { |