mirror of
https://github.com/RPCSX/xbyak.git
synced 2025-01-07 11:00:22 +00:00
vpsllw, vpslld, vpsllq, vpsraw, vpsrad, vpsrlw, vpsrld, vpsrlq support (ymm, ymm, xmm)
This commit is contained in:
parent
46084744c2
commit
42f1f46c11
@ -1134,15 +1134,15 @@ void put()
|
||||
{ 0x09, "psignw", MM_0F38 | PP_66, true, -1, false, true },
|
||||
{ 0x0A, "psignd", MM_0F38 | PP_66, true, -1, false, true },
|
||||
|
||||
{ 0xF1, "psllw", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xF2, "pslld", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xF3, "psllq", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xF1, "psllw", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xF2, "pslld", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xF3, "psllq", MM_0F | PP_66, true, -1, false, true },
|
||||
|
||||
{ 0xE1, "psraw", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xE2, "psrad", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xD1, "psrlw", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xD2, "psrld", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xD3, "psrlq", MM_0F | PP_66, false, -1, false, true },
|
||||
{ 0xE1, "psraw", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xE2, "psrad", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xD1, "psrlw", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xD2, "psrld", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xD3, "psrlq", MM_0F | PP_66, true, -1, false, true },
|
||||
|
||||
{ 0xF8, "psubb", MM_0F | PP_66, true, -1, false, true },
|
||||
{ 0xF9, "psubw", MM_0F | PP_66, true, -1, false, true },
|
||||
|
@ -235,6 +235,7 @@ http://opensource.org/licenses/BSD-3-Clause
|
||||
|
||||
History
|
||||
-------------
|
||||
* 2013/Jun/21 vpsllw, vpslld, vpsllq, vpsraw, vpsrad, vpsrlw, vpsrld, vpsrlq support (ymm, ymm, xmm)
|
||||
* 2013/May/30 ver 4.00 support AVX2, VEX-encoded GPR-instructions
|
||||
* 2013/Mar/27 ver 3.80 support mov(reg, "label");
|
||||
* 2013/Mar/13 ver 3.76 add cqo(), jcxz(), jecxz(), jrcxz()
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 4.00
|
||||
C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 4.01
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
◎概要
|
||||
@ -244,6 +244,7 @@ sample/{echo,hello}.bfは http://www.kmonos.net/alang/etc/brainfuck.php から
|
||||
-----------------------------------------------------------------------------
|
||||
◎履歴
|
||||
|
||||
2013/06/21 ver 4.01 vpsllw, vpslld, vpsllq, vpsraw, vpsrad, vpsrlw, vpsrld, vpsrlq support (ymm, ymm, xmm)
|
||||
2013/05/30 ver 4.00 AVX2, VEX-encoded GPR-instructionをサポート
|
||||
2013/03/27 ver 3.80 mov(reg, "label");をサポート
|
||||
2013/03/13 ver 3.76 cqo, jcxz, jecxz, jrcxz追加
|
||||
|
@ -1607,23 +1607,27 @@ class Test {
|
||||
{
|
||||
const struct Tbl {
|
||||
const char *name;
|
||||
bool support_Y_Y_X;
|
||||
} tbl[] = {
|
||||
{ "vpslldq" },
|
||||
{ "vpsrldq" },
|
||||
{ "vpsllw" },
|
||||
{ "vpslld" },
|
||||
{ "vpsllq" },
|
||||
{ "vpsraw" },
|
||||
{ "vpsrad" },
|
||||
{ "vpsrlw" },
|
||||
{ "vpsrld" },
|
||||
{ "vpsrlq" },
|
||||
{ "vpslldq", false },
|
||||
{ "vpsrldq", false },
|
||||
{ "vpsllw", true },
|
||||
{ "vpslld", true },
|
||||
{ "vpsllq", true },
|
||||
{ "vpsraw", true },
|
||||
{ "vpsrad", true },
|
||||
{ "vpsrlw", true },
|
||||
{ "vpsrld", true },
|
||||
{ "vpsrlq", true },
|
||||
};
|
||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||
const Tbl& p = tbl[i];
|
||||
put(p.name, XMM, XMM, IMM);
|
||||
put(p.name, YMM, YMM, IMM);
|
||||
put(p.name, YMM, IMM);
|
||||
if (p.support_Y_Y_X) {
|
||||
put(p.name, YMM, YMM, XMM);
|
||||
}
|
||||
}
|
||||
}
|
||||
void putFMA()
|
||||
|
@ -85,7 +85,7 @@ namespace Xbyak {
|
||||
|
||||
enum {
|
||||
DEFAULT_MAX_CODE_SIZE = 4096,
|
||||
VERSION = 0x4000 /* 0xABCD = A.BC(D) */
|
||||
VERSION = 0x4001 /* 0xABCD = A.BC(D) */
|
||||
};
|
||||
|
||||
#ifndef MIE_INTEGER_TYPE_DEFINED
|
||||
|
@ -1,4 +1,4 @@
|
||||
const char *getVersionString() const { return "4.00"; }
|
||||
const char *getVersionString() const { return "4.001"; }
|
||||
void packssdw(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x6B); }
|
||||
void packsswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x63); }
|
||||
void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); }
|
||||
@ -789,22 +789,22 @@ void vpsignw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(x
|
||||
void vpsignw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x09, true, -1); }
|
||||
void vpsignd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0A, true, -1); }
|
||||
void vpsignd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x0A, true, -1); }
|
||||
void vpsllw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF1, false, -1); }
|
||||
void vpsllw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF1, false, -1); }
|
||||
void vpslld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF2, false, -1); }
|
||||
void vpslld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF2, false, -1); }
|
||||
void vpsllq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF3, false, -1); }
|
||||
void vpsllq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF3, false, -1); }
|
||||
void vpsraw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE1, false, -1); }
|
||||
void vpsraw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE1, false, -1); }
|
||||
void vpsrad(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE2, false, -1); }
|
||||
void vpsrad(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE2, false, -1); }
|
||||
void vpsrlw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD1, false, -1); }
|
||||
void vpsrlw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD1, false, -1); }
|
||||
void vpsrld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD2, false, -1); }
|
||||
void vpsrld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD2, false, -1); }
|
||||
void vpsrlq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD3, false, -1); }
|
||||
void vpsrlq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD3, false, -1); }
|
||||
void vpsllw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF1, true, -1); }
|
||||
void vpsllw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF1, true, -1); }
|
||||
void vpslld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF2, true, -1); }
|
||||
void vpslld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF2, true, -1); }
|
||||
void vpsllq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF3, true, -1); }
|
||||
void vpsllq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF3, true, -1); }
|
||||
void vpsraw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE1, true, -1); }
|
||||
void vpsraw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE1, true, -1); }
|
||||
void vpsrad(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE2, true, -1); }
|
||||
void vpsrad(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE2, true, -1); }
|
||||
void vpsrlw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD1, true, -1); }
|
||||
void vpsrlw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD1, true, -1); }
|
||||
void vpsrld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD2, true, -1); }
|
||||
void vpsrld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD2, true, -1); }
|
||||
void vpsrlq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD3, true, -1); }
|
||||
void vpsrlq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD3, true, -1); }
|
||||
void vpsubb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF8, true, -1); }
|
||||
void vpsubb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF8, true, -1); }
|
||||
void vpsubw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF9, true, -1); }
|
||||
|
Loading…
Reference in New Issue
Block a user