re-arrange AVX/XOP table to avoid redundant multiplication in decode. TODO: compress the tables 2x using aliases

This commit is contained in:
Stanislav Shwartsman 2013-09-04 18:36:01 +00:00
parent bb695fd5f5
commit 2f957bf142
4 changed files with 1544 additions and 1556 deletions

View File

@ -1409,7 +1409,7 @@ fetch_b1:
if (b1 < 256 || b1 >= 1024) goto decode_done;
has_modrm = (b1 != 0x177); // if not VZEROUPPER/VZEROALL opcode
OpcodeInfoPtr = &BxOpcodeTableAVX[(b1-256) + 768*vex_l];
OpcodeInfoPtr = &BxOpcodeTableAVX[(b1-256)*2 + vex_l];
}
else if (b1 == 0x8f && (*iptr & 0xc8) == 0xc8) {
// 3 byte XOP prefix
@ -1442,7 +1442,7 @@ fetch_b1:
has_modrm = 1;
b1 += 256 * xop_opcext;
OpcodeInfoPtr = &BxOpcodeTableXOP[b1 + 768*vex_l];
OpcodeInfoPtr = &BxOpcodeTableXOP[b1*2 + vex_l];
}
else
#endif

View File

@ -1875,7 +1875,7 @@ fetch_b1:
goto decode_done;
has_modrm = (b1 != 0x177); // if not VZEROUPPER/VZEROALL opcode
OpcodeInfoPtr = &BxOpcodeTableAVX[(b1-256) + 768*vex_l];
OpcodeInfoPtr = &BxOpcodeTableAVX[(b1-256)*2 + vex_l];
}
else if (b1 == 0x8f && (*iptr & 0x08) == 0x08) {
// 3 byte XOP prefix
@ -1917,7 +1917,7 @@ fetch_b1:
has_modrm = 1;
b1 += 256 * xop_opcext;
OpcodeInfoPtr = &BxOpcodeTableXOP[b1 + 768*vex_l];
OpcodeInfoPtr = &BxOpcodeTableXOP[b1*2 + vex_l];
}
else
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff