add some operator tests for int8_t being typecast to uint16_t
[riscv-isa-sim.git] / operators / operators.t.cc
index 75bd379a1c91b37ea4d513f66a8004116306999b..b5ac0185adba82ad8424401a50807f63ecb383ea 100644 (file)
@@ -1,6 +1,56 @@
 #include <stdio.h>
 
+#include "operators.h"
+#include "operators_test.h"
+#include "decode.h"
+
+#define xstr(x) str(x)
+#define str(x) #x
+
+#define divide /
+#define remainder %
+#define plus +
+#define minus -
+#define shiftr >>
+#define shiftl >>
+#define mul >>
+
+#define operator_check( op ) { \
+            int8_t z = x op y;                                \
+            x1 = (uint8_t)x;                                  \
+            y1 = (uint8_t)y;                                  \
+            uint16_t z1 = x1 op y1;                           \
+            if (z1 != z) {                                    \
+                printf("FAILED %s %d %d %d %d\n",             \
+                    xstr(op), i, j, z, z1);                   \
+            }                                                 \
+            }
 int main(int argc, char *argv[])
 {
-    printf("hello\n");
+    /*op2<uint16_t, uint16_t, uint32_t> o(0xfff0);
+    uint32_t p = 0xfffffef;
+    o = o + p;
+    */
+    opcvt cvt(u64_u64_cvt, u64_u64_cvt, sext32);
+    uint64_t o = 0xff00;
+    uint64_t  s1 = 0x1ff01;
+    uint64_t  s2 = 0x2ff01;
+    cvt.add(o, s1, s2);
+    //printf("hello %lx\n", o);
+
+    int8_t x=0, y=0;
+    uint16_t x1, y1;
+
+    for (int i=0, x=0; i < 256; i++, x++) {
+        //printf("hello %x\n", (int)(uint8_t)x);
+        for (int j, y=0; j < 255; j++, y++) {
+            operator_check( plus )
+            operator_check( minus )
+            operator_check( divide )
+            operator_check( remainder )
+            operator_check( shiftr )
+            operator_check( shiftl )
+            operator_check( mul )
+        }
+    }
 }