add finit/fninit/fwait

This commit is contained in:
MITSUNARI Shigeo 2012-11-01 15:16:27 +09:00
parent 0e1956bf0e
commit 8cb9480e50
6 changed files with 34 additions and 23 deletions

View file

@ -489,7 +489,8 @@ void put()
{ "rdpmc", 0x0F, B00110011 }, { "rdpmc", 0x0F, B00110011 },
{ "rdtsc", 0x0F, B00110001 }, { "rdtsc", 0x0F, B00110001 },
{ "rdtscp", 0x0F, 0x01, 0xF9 }, { "rdtscp", 0x0F, 0x01, 0xF9 },
{ "wait", B10011011 }, { "wait", 0x9B },
{ "fwait", 0x9B },
{ "wbinvd", 0x0F, B00001001 }, { "wbinvd", 0x0F, B00001001 },
{ "wrmsr", 0x0F, B00110000 }, { "wrmsr", 0x0F, B00110000 },
{ "xlatb", 0xD7 }, { "xlatb", 0xD7 },
@ -515,6 +516,8 @@ void put()
{ "fdivp", 0xDE, 0xF9 }, { "fdivp", 0xDE, 0xF9 },
{ "fdivrp", 0xDE, 0xF1 }, { "fdivrp", 0xDE, 0xF1 },
{ "fincstp", 0xD9, 0xF7 }, { "fincstp", 0xD9, 0xF7 },
{ "finit", 0x9B, 0xDB, 0xE3 },
{ "fninit", 0xDB, 0xE3 },
{ "fld1", 0xD9, 0xE8 }, { "fld1", 0xD9, 0xE8 },
{ "fldl2t", 0xD9, 0xE9 }, { "fldl2t", 0xD9, 0xE9 },
{ "fldl2e", 0xD9, 0xEA }, { "fldl2e", 0xD9, 0xEA },

View file

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

View file

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

View file

@ -346,6 +346,7 @@ class Test {
"rdpmc", "rdpmc",
"rdtsc", "rdtsc",
"wait", "wait",
"fwait",
"wbinvd", "wbinvd",
"wrmsr", "wrmsr",
"xlatb", "xlatb",
@ -369,6 +370,8 @@ class Test {
"fdivp", "fdivp",
"fdivrp", "fdivrp",
"fincstp", "fincstp",
"finit",
"fninit",
"fld1", "fld1",
"fldl2t", "fldl2t",
"fldl2e", "fldl2e",
@ -379,25 +382,25 @@ class Test {
"fmulp", "fmulp",
"fnop", "fnop",
"fpatan", "fpatan",
"fprem", "fprem",
"fprem1", "fprem1",
"fptan", "fptan",
"frndint", "frndint",
"fscale", "fscale",
"fsin", "fsin",
"fsincos", "fsincos",
"fsqrt", "fsqrt",
"fsubp", "fsubp",
"fsubrp", "fsubrp",
"ftst", "ftst",
"fucom", "fucom",
"fucomp", "fucomp",
"fucompp", "fucompp",
"fxam", "fxam",
"fxch", "fxch",
"fxtract", "fxtract",
"fyl2x", "fyl2x",
"fyl2xp1", "fyl2xp1",
}; };
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) { for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
put(tbl[i]); put(tbl[i]);

View file

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

View file

@ -1,4 +1,4 @@
const char *getVersionString() const { return "3.601"; } const char *getVersionString() const { return "3.602"; }
void packssdw(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x6B); } 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 packsswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x63); }
void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); } void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); }
@ -316,6 +316,7 @@ void rdpmc() { db(0x0F); db(0x33); }
void rdtsc() { db(0x0F); db(0x31); } void rdtsc() { db(0x0F); db(0x31); }
void rdtscp() { db(0x0F); db(0x01); db(0xF9); } void rdtscp() { db(0x0F); db(0x01); db(0xF9); }
void wait() { db(0x9B); } void wait() { db(0x9B); }
void fwait() { db(0x9B); }
void wbinvd() { db(0x0F); db(0x09); } void wbinvd() { db(0x0F); db(0x09); }
void wrmsr() { db(0x0F); db(0x30); } void wrmsr() { db(0x0F); db(0x30); }
void xlatb() { db(0xD7); } void xlatb() { db(0xD7); }
@ -336,6 +337,8 @@ void fdecstp() { db(0xD9); db(0xF6); }
void fdivp() { db(0xDE); db(0xF9); } void fdivp() { db(0xDE); db(0xF9); }
void fdivrp() { db(0xDE); db(0xF1); } void fdivrp() { db(0xDE); db(0xF1); }
void fincstp() { db(0xD9); db(0xF7); } void fincstp() { db(0xD9); db(0xF7); }
void finit() { db(0x9B); db(0xDB); db(0xE3); }
void fninit() { db(0xDB); db(0xE3); }
void fld1() { db(0xD9); db(0xE8); } void fld1() { db(0xD9); db(0xE8); }
void fldl2t() { db(0xD9); db(0xE9); } void fldl2t() { db(0xD9); db(0xE9); }
void fldl2e() { db(0xD9); db(0xEA); } void fldl2e() { db(0xD9); db(0xEA); }