From 936ff0ff76dca60fba3bb255d3ce573bdeda0322 Mon Sep 17 00:00:00 2001 From: MITSUNARI Shigeo Date: Wed, 22 May 2013 23:06:49 +0900 Subject: [PATCH] add rdrand --- gen/gen_code.cpp | 1 - test/make_nm.cpp | 5 +++++ xbyak/xbyak.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index 7007ad1..a8c3940 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -1583,5 +1583,4 @@ void put() int main() { put(); - return 0; } diff --git a/test/make_nm.cpp b/test/make_nm.cpp index 0f91460..c36216f 100644 --- a/test/make_nm.cpp +++ b/test/make_nm.cpp @@ -1893,6 +1893,10 @@ public: #endif } } + void putRdrand() + { + put("rdrand", REG16 | REG32e); + } void put() { #ifdef USE_AVX @@ -1901,6 +1905,7 @@ public: putGprR_R_RM(); putGprR_RM_R(); putGprR_RM(); + putRdrand(); #else putAVX1(); putAVX2(); diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h index 3e573c2..a401e72 100644 --- a/xbyak/xbyak.h +++ b/xbyak/xbyak.h @@ -1689,6 +1689,7 @@ public: db(0xF2); opModRM(reg, op, op.isREG(), op.isMEM(), 0x0F, 0x38, 0xF0 | (op.isBit(8) ? 0 : 1)); } + void rdrand(const Reg& r) { if (r.isBit(8)) throw ERR_BAD_SIZE_OF_REGISTER; opModR(Reg(6, Operand::REG, r.getBit()), r, 0x0f, 0xc7); } enum { NONE = 256 }; CodeGenerator(size_t maxSize = DEFAULT_MAX_CODE_SIZE, void *userPtr = 0, Allocator *allocator = 0) : CodeArray(maxSize, userPtr, allocator)