about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-06-06 20:32:55 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-06-06 20:32:55 +0200
commit489afcfb41e841424ad9bd930702b3ec5b235573 (patch)
tree4fffc807a5fd36cd650af700e38ef41841b30152
parent5519ddad0b8042f6cc6a466ef8e76301093c9a9d (diff)
downloadbox64-489afcfb41e841424ad9bd930702b3ec5b235573.tar.gz
box64-489afcfb41e841424ad9bd930702b3ec5b235573.zip
Added a test for ucomiss opcode
-rwxr-xr-xCMakeLists.txt5
-rw-r--r--tests/ref16.txt11
-rwxr-xr-xtests/test16bin0 -> 16648 bytes
-rw-r--r--tests/test16.c55
4 files changed, 71 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index eab75caf..4c7645d8 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -507,6 +507,11 @@ add_test(test15 ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64}
     -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref15.txt
     -P ${CMAKE_SOURCE_DIR}/runTest.cmake )
 
+add_test(test16 ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} 
+    -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test16 -D TEST_OUTPUT=tmpfile.txt 
+    -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref16.txt
+    -P ${CMAKE_SOURCE_DIR}/runTest.cmake )
+
 file(GLOB extension_tests "${CMAKE_SOURCE_DIR}/tests/extensions/*.c")
 foreach(file ${extension_tests})
     get_filename_component(testname "${file}" NAME_WE)
diff --git a/tests/ref16.txt b/tests/ref16.txt
new file mode 100644
index 00000000..4f5916e0
--- /dev/null
+++ b/tests/ref16.txt
@@ -0,0 +1,11 @@
+ucomiss 1.000000, 2.000000 => 0x202
+ucomiss 2.000000, 1.000000 => 0x203
+ucomiss 1.000000, inf => 0x202
+ucomiss inf, 1.000000 => 0x203
+ucomiss 1.000000, -inf => 0x203
+ucomiss -inf, 1.000000 => 0x202
+ucomiss 1.000000, nan => 0x247
+ucomiss nan, 1.000000 => 0x247
+ucomiss 1.000000, 1.000000 => 0x242
+ucomiss inf, inf => 0x242
+ucomiss nan, nan => 0x247
diff --git a/tests/test16 b/tests/test16
new file mode 100755
index 00000000..af645769
--- /dev/null
+++ b/tests/test16
Binary files differdiff --git a/tests/test16.c b/tests/test16.c
new file mode 100644
index 00000000..2b312834
--- /dev/null
+++ b/tests/test16.c
@@ -0,0 +1,55 @@
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+
+uint64_t _ucomiss_(float a, float b)
+{
+    uint64_t ret;
+    asm volatile (
+    "ucomiss %%xmm0, %%xmm1\n"
+    "pushf\n"
+    "pop %%rax"
+    :"=a" (ret)::"xmm0","xmm1","cc");
+
+    return ret;
+}
+
+int main(int argc, const char** argv)
+{
+ float a, b;
+ uint64_t flags;
+ a = 1.0f; b = 2.0f;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+ flags = _ucomiss_(b, a);
+ printf("ucomiss %f, %f => 0x%lx\n", b, a, flags);
+ b = INFINITY;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+ flags = _ucomiss_(b, a);
+ printf("ucomiss %f, %f => 0x%lx\n", b, a, flags);
+ b = -INFINITY;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+ flags = _ucomiss_(b, a);
+ printf("ucomiss %f, %f => 0x%lx\n", b, a, flags);
+ b = NAN;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+ flags = _ucomiss_(b, a);
+ printf("ucomiss %f, %f => 0x%lx\n", b, a, flags);
+ b = a;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+ a = b = INFINITY;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+ a = b = NAN;
+ flags = _ucomiss_(a, b);
+ printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
+
+ return 0;
+}