add fldcw/fstcw

This commit is contained in:
MITSUNARI Shigeo 2012-11-01 11:19:25 +09:00
parent 0ebe8fa7ef
commit 0e1956bf0e
6 changed files with 21 additions and 25 deletions

View File

@ -19,6 +19,8 @@ enum {
MM_0F3A = 1 << 7
};
const int NONE = 256; // same as Xbyak::CodeGenerator::NONE
std::string type2String(int type)
{
std::string str;
@ -787,18 +789,20 @@ void put()
}
{
const struct Tbl {
uint8 code;
uint8 code1;
int code2;
uint8 ext;
const char *name;
} tbl[] = {
{ B10101110, 2, "ldmxcsr" },
{ B10101110, 3, "stmxcsr" },
{ B10101110, 7, "clflush" }, // 0x80 is bug of nasm ?
// { B10000000, 7, "clflush" }, // 0x80 is bug of nasm ?
{ 0x0F, B10101110, 2, "ldmxcsr" },
{ 0x0F, B10101110, 3, "stmxcsr" },
{ 0x0F, B10101110, 7, "clflush" }, // 0x80 is bug of nasm ?
{ 0xD9, NONE, 5, "fldcw" },
{ 0x9B, 0xD9, 7, "fstcw" },
};
for (int i = 0; i < NUM_OF_ARRAY(tbl); i++) {
const Tbl *p = &tbl[i];
printf("void %s(const Address& addr) { opModM(addr, Reg32(%d), 0x0F, 0x%02X); }\n", p->name, p->ext, p->code);
printf("void %s(const Address& addr) { opModM(addr, Reg32(%d), 0x%02X, 0x%02X); }\n", p->name, p->ext, p->code1, p->code2);
}
}
{

View File

@ -1,5 +1,5 @@
Xbyak 3.60 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
Xbyak 3.61 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
=============
Abstract
@ -222,6 +222,7 @@ http://opensource.org/licenses/BSD-3-Clause
History
-------------
* 2012/Nov/01 ver 3.61 add fldcw/fstcw
* 2012/May/03 ver 3.60 change interface of Allocator
* 2012/Mar/23 ver 3.51 fix userPtr mode
* 2012/Mar/19 ver 3.50 support AutoGrow mode

View File

@ -1,5 +1,5 @@
C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak version 3.60
C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak version 3.61
-----------------------------------------------------------------------------
◎概要
@ -242,6 +242,7 @@ sample/{echo,hello}.bfは http://www.kmonos.net/alang/etc/brainfuck.php から
-----------------------------------------------------------------------------
◎履歴
2012/11/01 ver 3.61 add fldcw/fstcw
2012/05/03 ver 3.60 Allocatorクラスのインタフェースを変更
2012/03/23 ver 3.51 userPtrモードがバグったのを修正
2012/03/19 ver 3.50 AutoGrowモードサポート

View File

@ -326,7 +326,7 @@ class Test {
"cwde",
"lahf",
"lock",
// "lock",
"nop",
"sahf",
@ -405,20 +405,8 @@ class Test {
put("bswap", REG32e);
put("lea", REG32e, MEM);
#if 0
#ifdef XBYAK64
put("jmp", REG64);
put("call", REG64);
#else
put("jmp", REG32);
put("call", REG32);
#endif
put("jmp", MEM);
put("jmp", MEM);
put("jmp", MEM);
put("call", REG16|MEM|MEM_ONLY_DISP);
put("call", "getCode() + 5", "$ + 5");
#endif
put("fldcw", MEM);
put("fstcw", MEM);
}
void putJmp() const
{

View File

@ -55,7 +55,7 @@ namespace Xbyak {
enum {
DEFAULT_MAX_CODE_SIZE = 4096,
VERSION = 0x3600 /* 0xABCD = A.BC(D) */
VERSION = 0x3601 /* 0xABCD = A.BC(D) */
};
#ifndef MIE_INTEGER_TYPE_DEFINED

View File

@ -1,4 +1,4 @@
const char *getVersionString() const { return "3.60"; }
const char *getVersionString() const { return "3.601"; }
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); }
@ -485,6 +485,8 @@ void pclmulhqhdq(const Xmm& xmm, const Operand& op) { pclmulqdq(xmm, op, 0x11);
void ldmxcsr(const Address& addr) { opModM(addr, Reg32(2), 0x0F, 0xAE); }
void stmxcsr(const Address& addr) { opModM(addr, Reg32(3), 0x0F, 0xAE); }
void clflush(const Address& addr) { opModM(addr, Reg32(7), 0x0F, 0xAE); }
void fldcw(const Address& addr) { opModM(addr, Reg32(5), 0xD9, 0x100); }
void fstcw(const Address& addr) { opModM(addr, Reg32(7), 0x9B, 0xD9); }
void movntpd(const Address& addr, const Xmm& reg) { opModM(addr, Reg16(reg.getIdx()), 0x0F, 0x2B); }
void movntdq(const Address& addr, const Xmm& reg) { opModM(addr, Reg16(reg.getIdx()), 0x0F, 0xE7); }
void movsx(const Reg& reg, const Operand& op) { opMovxx(reg, op, 0xBE); }