summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Filelist.txt3
-rw-r--r--TestPrograms/test_x86_via_aes.cxx39
-rw-r--r--TestPrograms/test_x86_via_rng.cxx38
-rw-r--r--TestPrograms/test_x86_via_sha.cxx39
4 files changed, 119 insertions, 0 deletions
diff --git a/Filelist.txt b/Filelist.txt
index 8f10b2a8..2059a880 100644
--- a/Filelist.txt
+++ b/Filelist.txt
@@ -614,3 +614,6 @@ TestPrograms/test_x86_sse3.cxx
TestPrograms/test_x86_sse41.cxx
TestPrograms/test_x86_sse42.cxx
TestPrograms/test_x86_ssse3.cxx
+TestPrograms/test_x86_via_aes.cxx
+TestPrograms/test_x86_via_rng.cxx
+TestPrograms/test_x86_via_sha.cxx
diff --git a/TestPrograms/test_x86_via_aes.cxx b/TestPrograms/test_x86_via_aes.cxx
new file mode 100644
index 00000000..a6d80b01
--- /dev/null
+++ b/TestPrograms/test_x86_via_aes.cxx
@@ -0,0 +1,39 @@
+// TODO: cut-in xcrypt-ecb
+#include <cstdlib>
+int main(int argc, char* argv[])
+{
+ unsigned int msr=0;
+ unsigned int divisor=2;
+ unsigned int buffer;
+
+ __asm__ __volatile__
+ (
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ "mov %1, %%rdi ;\n"
+ "movl %2, %%edx ;\n"
+#else
+ "mov %1, %%edi ;\n"
+ "movl %2, %%edx ;\n"
+#endif
+
+ // xstore-rng
+ ".byte 0x0f, 0xa7, 0xc0 ;\n"
+
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ "andq %%rax, 0x1f ;\n"
+ "movl %%eax, %0 ;\n"
+#else
+ "andl %%eax, 0x1f ;\n"
+ "movl %%eax, %0 ;\n"
+#endif
+
+ : "=g" (msr) : "g" (buffer), "g" (divisor)
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ : "rax", "rdx", "rdi", "cc"
+#else
+ : "eax", "edx", "edi", "cc"
+#endif
+ );
+
+ return 0;
+}
diff --git a/TestPrograms/test_x86_via_rng.cxx b/TestPrograms/test_x86_via_rng.cxx
new file mode 100644
index 00000000..0cbd52f2
--- /dev/null
+++ b/TestPrograms/test_x86_via_rng.cxx
@@ -0,0 +1,38 @@
+#include <cstdlib>
+int main(int argc, char* argv[])
+{
+ unsigned int msr=0;
+ unsigned int divisor=2;
+ unsigned int buffer;
+
+ __asm__ __volatile__
+ (
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ "mov %1, %%rdi ;\n"
+ "movl %2, %%edx ;\n"
+#else
+ "mov %1, %%edi ;\n"
+ "movl %2, %%edx ;\n"
+#endif
+
+ // xstore-rng
+ ".byte 0x0f, 0xa7, 0xc0 ;\n"
+
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ "andq %%rax, 0x1f ;\n"
+ "movl %%eax, %0 ;\n"
+#else
+ "andl %%eax, 0x1f ;\n"
+ "movl %%eax, %0 ;\n"
+#endif
+
+ : "=g" (msr) : "g" (buffer), "g" (divisor)
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ : "rax", "rdx", "rdi", "cc"
+#else
+ : "eax", "edx", "edi", "cc"
+#endif
+ );
+
+ return 0;
+}
diff --git a/TestPrograms/test_x86_via_sha.cxx b/TestPrograms/test_x86_via_sha.cxx
new file mode 100644
index 00000000..84809adc
--- /dev/null
+++ b/TestPrograms/test_x86_via_sha.cxx
@@ -0,0 +1,39 @@
+// TODO: cut-in xsha1
+#include <cstdlib>
+int main(int argc, char* argv[])
+{
+ unsigned int msr=0;
+ unsigned int divisor=2;
+ unsigned int buffer;
+
+ __asm__ __volatile__
+ (
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ "mov %1, %%rdi ;\n"
+ "movl %2, %%edx ;\n"
+#else
+ "mov %1, %%edi ;\n"
+ "movl %2, %%edx ;\n"
+#endif
+
+ // xstore-rng
+ ".byte 0x0f, 0xa7, 0xc0 ;\n"
+
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ "andq %%rax, 0x1f ;\n"
+ "movl %%eax, %0 ;\n"
+#else
+ "andl %%eax, 0x1f ;\n"
+ "movl %%eax, %0 ;\n"
+#endif
+
+ : "=g" (msr) : "g" (buffer), "g" (divisor)
+#if (CRYPTOPP_BOOL_X32 || CRYPTOPP_BOOL_X64)
+ : "rax", "rdx", "rdi", "cc"
+#else
+ : "eax", "edx", "edi", "cc"
+#endif
+ );
+
+ return 0;
+}