|
@@ -9,7 +9,7 @@ const FLAGS_IGNORE = 0xFFFF3200;
|
|
|
const assert = require("assert").strict;
|
|
|
const fs = require("fs");
|
|
|
const encodings = require("../../gen/x86_table.js");
|
|
|
-const Prand = require("./prand.js");
|
|
|
+const Rand = require("./rand.js");
|
|
|
|
|
|
generate_tests();
|
|
|
|
|
@@ -184,7 +184,7 @@ function create_nasm(op, config, nth_test)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const op_rand = new Prand(op.opcode + nth_test * 0x10000);
|
|
|
+ const rng = new Rand(op.opcode + nth_test * 0x10000);
|
|
|
|
|
|
const size = (op.os || op.opcode % 2 === 1) ? config.size : 8;
|
|
|
const is_modrm = op.e || op.fixed_g !== undefined;
|
|
@@ -193,7 +193,7 @@ function create_nasm(op, config, nth_test)
|
|
|
|
|
|
for(let reg of ["eax", "ecx", "edx", "ebx", "ebp", "esi", "edi"])
|
|
|
{
|
|
|
- let rand = op_rand.next();
|
|
|
+ let rand = rng.int32();
|
|
|
codes.push("mov " + reg + ", " + rand);
|
|
|
}
|
|
|
|
|
@@ -202,8 +202,8 @@ function create_nasm(op, config, nth_test)
|
|
|
codes.push("sub esp, 8");
|
|
|
for(let i = 0; i < 8; i++)
|
|
|
{
|
|
|
- codes.push("mov dword [esp], " + op_rand.next());
|
|
|
- codes.push("mov dword [esp + 4], " + op_rand.next());
|
|
|
+ codes.push("mov dword [esp], " + rng.int32());
|
|
|
+ codes.push("mov dword [esp + 4], " + rng.int32());
|
|
|
codes.push("movq mm" + i + ", [esp]");
|
|
|
}
|
|
|
codes.push("add esp, 8");
|
|
@@ -215,8 +215,8 @@ function create_nasm(op, config, nth_test)
|
|
|
|
|
|
for(let i = 0; i < 8; i++)
|
|
|
{
|
|
|
- codes.push("mov dword [esp], " + op_rand.next());
|
|
|
- codes.push("mov dword [esp + 4], " + op_rand.next());
|
|
|
+ codes.push("mov dword [esp], " + rng.int32());
|
|
|
+ codes.push("mov dword [esp + 4], " + rng.int32());
|
|
|
codes.push("fld qword [esp]");
|
|
|
}
|
|
|
|
|
@@ -233,10 +233,10 @@ function create_nasm(op, config, nth_test)
|
|
|
codes.push("sub esp, 16");
|
|
|
for(let i = 0; i < 8; i++)
|
|
|
{
|
|
|
- codes.push("mov dword [esp], " + op_rand.next());
|
|
|
- codes.push("mov dword [esp + 4], " + op_rand.next());
|
|
|
- codes.push("mov dword [esp + 8], " + op_rand.next());
|
|
|
- codes.push("mov dword [esp + 12], " + op_rand.next());
|
|
|
+ codes.push("mov dword [esp], " + rng.int32());
|
|
|
+ codes.push("mov dword [esp + 4], " + rng.int32());
|
|
|
+ codes.push("mov dword [esp + 8], " + rng.int32());
|
|
|
+ codes.push("mov dword [esp + 12], " + rng.int32());
|
|
|
codes.push("movdqu xmm" + i + ", [esp]");
|
|
|
}
|
|
|
codes.push("add esp, 16");
|
|
@@ -247,16 +247,16 @@ function create_nasm(op, config, nth_test)
|
|
|
for(let i = 0; i < 8; i++)
|
|
|
{
|
|
|
codes.push("sub esp, 4");
|
|
|
- codes.push("mov dword [esp], " + op_rand.next());
|
|
|
+ codes.push("mov dword [esp], " + rng.int32());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- codes.push("push dword " + (op_rand.next() & ~(1 << 8 | 1 << 9)));
|
|
|
+ codes.push("push dword " + (rng.int32() & ~(1 << 8 | 1 << 9)));
|
|
|
codes.push("popf");
|
|
|
|
|
|
if(true)
|
|
|
{
|
|
|
- // generate random flags using arithmatic instruction
|
|
|
+ // generate random flags using arithmetic instruction
|
|
|
// not well-distributed, but can trigger bugs in lazy flag calculation
|
|
|
if(true)
|
|
|
{
|