mirror of
https://github.com/FEX-Emu/xbyak.git
synced 2025-02-23 06:40:49 +00:00
add fldcw/fstcw
This commit is contained in:
parent
0ebe8fa7ef
commit
0e1956bf0e
@ -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);
|
||||
}
|
||||
}
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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モードサポート
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user