From 7fc0c2bb74e80f0aa1b5b25040131bf991a346c7 Mon Sep 17 00:00:00 2001 From: MITSUNARI Shigeo Date: Thu, 5 Sep 2019 21:17:34 +0900 Subject: add enter/leave --- gen/gen_code.cpp | 2 ++ test/make_nm.cpp | 2 ++ xbyak/xbyak_mnemonic.h | 2 ++ 3 files changed, 6 insertions(+) diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index 7feb178..5ca982e 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -638,6 +638,7 @@ void put() { "scasw", 0x66, 0xAF }, { "scasd", 0xAF }, { "movsb", 0xA4 }, + { "leave", 0xC9 }, { "lodsb", 0xAC }, { "lodsw", 0x66, 0xAD }, { "lodsd", 0xAD }, @@ -735,6 +736,7 @@ void put() { "fyl2xp1", 0xD9, 0xF9 }, }; putGeneric(tbl, NUM_OF_ARRAY(tbl)); + puts("void enter(uint16 x, uint8 y) { db(0xC8); dw(x); db(y); }"); puts("void int_(uint8 x) { db(0xCD); db(x); }"); } { diff --git a/test/make_nm.cpp b/test/make_nm.cpp index 2279988..70897fc 100644 --- a/test/make_nm.cpp +++ b/test/make_nm.cpp @@ -501,6 +501,7 @@ class Test { "cmpsw", "cmpsd", "int3", + "leave", "lodsb", "lodsw", "lodsd", @@ -604,6 +605,7 @@ class Test { put("lea", REG32e|REG16, MEM); put("clflush", MEM); put("clflushopt", MEM); + put("enter", IMM, IMM); put("fldcw", MEM); put("fldenv", MEM); put("fstcw", MEM); diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h index 55de124..2f2d768 100644 --- a/xbyak/xbyak_mnemonic.h +++ b/xbyak/xbyak_mnemonic.h @@ -171,6 +171,7 @@ void divss(const Xmm& xmm, const Operand& op) { opGen(xmm, op, 0x5E, 0xF3, isXMM void dppd(const Xmm& xmm, const Operand& op, int imm) { opGen(xmm, op, 0x41, 0x66, isXMM_XMMorMEM, static_cast(imm), 0x3A); } void dpps(const Xmm& xmm, const Operand& op, int imm) { opGen(xmm, op, 0x40, 0x66, isXMM_XMMorMEM, static_cast(imm), 0x3A); } void emms() { db(0x0F); db(0x77); } +void enter(uint16 x, uint8 y) { db(0xC8); dw(x); db(y); } void extractps(const Operand& op, const Xmm& xmm, uint8 imm) { opExt(op, xmm, 0x17, imm); } void f2xm1() { db(0xD9); db(0xF0); } void fabs() { db(0xD9); db(0xE1); } @@ -439,6 +440,7 @@ void lahf() { db(0x9F); } void lddqu(const Xmm& xmm, const Address& addr) { db(0xF2); opModM(addr, xmm, 0x0F, 0xF0); } void ldmxcsr(const Address& addr) { opModM(addr, Reg32(2), 0x0F, 0xAE); } void lea(const Reg& reg, const Address& addr) { if (!reg.isBit(16 | i32e)) throw Error(ERR_BAD_SIZE_OF_REGISTER); opModM(addr, reg, 0x8D); } +void leave() { db(0xC9); } void lfence() { db(0x0F); db(0xAE); db(0xE8); } void lock() { db(0xF0); } void lodsb() { db(0xAC); } -- cgit v1.2.3