Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Unified Diff: crosstest/test_icmp_main.cpp

Issue 265703002: Add Om1 lowering with no optimizations (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: crosstest/test_icmp_main.cpp
diff --git a/crosstest/test_icmp_main.cpp b/crosstest/test_icmp_main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6fa2f5a2b8e48fea96394344aa34a0ae3441b1f4
--- /dev/null
+++ b/crosstest/test_icmp_main.cpp
@@ -0,0 +1,209 @@
+// abtest.py --test=test_icmp.cpp --driver=test_icmp_main.cpp --prefix=Subzero_ --output=test_icmp
+
+#include <stdio.h>
+#include <stdint.h>
+
+#include "test_icmp.h"
+namespace Subzero_ {
+#include "test_icmp.h"
+}
+
+int main(int argc, char **argv) {
+ static unsigned Values[] = {
+ 0x0, 0x1, 0x7ffffffe, 0x7fffffff,
+ 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff,
+ 0x7e, 0x7f, 0x80, 0x81, 0xfe, 0xff, 0x100, 0x101,
+ 0x7ffe, 0x7fff, 0x8000, 0x8001, 0xfffe, 0xffff, 0x10000, 0x10001,
+ };
+ const static unsigned NumValues = sizeof(Values) / sizeof(*Values);
+
+ typedef bool (*FuncType8)(uint8_t, uint8_t);
+ static struct {
+ const char *Name;
+ FuncType8 FuncSz;
+ FuncType8 FuncLlc;
+ } Func8[] = { { "icmpEq8Bool", (FuncType8)Subzero_::icmpEq8Bool,
+ (FuncType8)icmpEq8Bool },
+ { "icmpNe8Bool", (FuncType8)Subzero_::icmpNe8Bool,
+ (FuncType8)icmpNe8Bool },
+ { "icmpSgt8Bool", (FuncType8)Subzero_::icmpSgt8Bool,
+ (FuncType8)icmpSgt8Bool },
+ { "icmpUgt8Bool", (FuncType8)Subzero_::icmpUgt8Bool,
+ (FuncType8)icmpUgt8Bool },
+ { "icmpSge8Bool", (FuncType8)Subzero_::icmpSge8Bool,
+ (FuncType8)icmpSge8Bool },
+ { "icmpUge8Bool", (FuncType8)Subzero_::icmpUge8Bool,
+ (FuncType8)icmpUge8Bool },
+ { "icmpSlt8Bool", (FuncType8)Subzero_::icmpSlt8Bool,
+ (FuncType8)icmpSlt8Bool },
+ { "icmpUlt8Bool", (FuncType8)Subzero_::icmpUlt8Bool,
+ (FuncType8)icmpUlt8Bool },
+ { "icmpSle8Bool", (FuncType8)Subzero_::icmpSle8Bool,
+ (FuncType8)icmpSle8Bool },
+ { "icmpUle8Bool", (FuncType8)Subzero_::icmpUle8Bool,
+ (FuncType8)icmpUle8Bool }, };
+ const static unsigned NumFunc8 = sizeof(Func8) / sizeof(*Func8);
+
+ typedef bool (*FuncType16)(uint16_t, uint16_t);
+ static struct {
+ const char *Name;
+ FuncType16 FuncSz;
+ FuncType16 FuncLlc;
+ } Func16[] = { { "icmpEq16Bool", (FuncType16)Subzero_::icmpEq16Bool,
+ (FuncType16)icmpEq16Bool },
+ { "icmpNe16Bool", (FuncType16)Subzero_::icmpNe16Bool,
+ (FuncType16)icmpNe16Bool },
+ { "icmpSgt16Bool", (FuncType16)Subzero_::icmpSgt16Bool,
+ (FuncType16)icmpSgt16Bool },
+ { "icmpUgt16Bool", (FuncType16)Subzero_::icmpUgt16Bool,
+ (FuncType16)icmpUgt16Bool },
+ { "icmpSge16Bool", (FuncType16)Subzero_::icmpSge16Bool,
+ (FuncType16)icmpSge16Bool },
+ { "icmpUge16Bool", (FuncType16)Subzero_::icmpUge16Bool,
+ (FuncType16)icmpUge16Bool },
+ { "icmpSlt16Bool", (FuncType16)Subzero_::icmpSlt16Bool,
+ (FuncType16)icmpSlt16Bool },
+ { "icmpUlt16Bool", (FuncType16)Subzero_::icmpUlt16Bool,
+ (FuncType16)icmpUlt16Bool },
+ { "icmpSle16Bool", (FuncType16)Subzero_::icmpSle16Bool,
+ (FuncType16)icmpSle16Bool },
+ { "icmpUle16Bool", (FuncType16)Subzero_::icmpUle16Bool,
+ (FuncType16)icmpUle16Bool }, };
+ const static unsigned NumFunc16 = sizeof(Func16) / sizeof(*Func16);
+
+ typedef bool (*FuncType32)(uint32_t, uint32_t);
+ static struct {
+ const char *Name;
+ FuncType32 FuncSz;
+ FuncType32 FuncLlc;
+ } Func32[] = { { "icmpEq32Bool", (FuncType32)Subzero_::icmpEq32Bool,
+ (FuncType32)icmpEq32Bool },
+ { "icmpNe32Bool", (FuncType32)Subzero_::icmpNe32Bool,
+ (FuncType32)icmpNe32Bool },
+ { "icmpSgt32Bool", (FuncType32)Subzero_::icmpSgt32Bool,
+ (FuncType32)icmpSgt32Bool },
+ { "icmpUgt32Bool", (FuncType32)Subzero_::icmpUgt32Bool,
+ (FuncType32)icmpUgt32Bool },
+ { "icmpSge32Bool", (FuncType32)Subzero_::icmpSge32Bool,
+ (FuncType32)icmpSge32Bool },
+ { "icmpUge32Bool", (FuncType32)Subzero_::icmpUge32Bool,
+ (FuncType32)icmpUge32Bool },
+ { "icmpSlt32Bool", (FuncType32)Subzero_::icmpSlt32Bool,
+ (FuncType32)icmpSlt32Bool },
+ { "icmpUlt32Bool", (FuncType32)Subzero_::icmpUlt32Bool,
+ (FuncType32)icmpUlt32Bool },
+ { "icmpSle32Bool", (FuncType32)Subzero_::icmpSle32Bool,
+ (FuncType32)icmpSle32Bool },
+ { "icmpUle32Bool", (FuncType32)Subzero_::icmpUle32Bool,
+ (FuncType32)icmpUle32Bool }, };
+ const static unsigned NumFunc32 = sizeof(Func32) / sizeof(*Func32);
+
+ typedef bool (*FuncType64)(uint64_t, uint64_t);
+ static struct {
+ const char *Name;
+ FuncType64 FuncSz;
+ FuncType64 FuncLlc;
+ } Func64[] = { { "icmpEq64Bool", (FuncType64)Subzero_::icmpEq64Bool,
+ (FuncType64)icmpEq64Bool },
+ { "icmpNe64Bool", (FuncType64)Subzero_::icmpNe64Bool,
+ (FuncType64)icmpNe64Bool },
+ { "icmpSgt64Bool", (FuncType64)Subzero_::icmpSgt64Bool,
+ (FuncType64)icmpSgt64Bool },
+ { "icmpUgt64Bool", (FuncType64)Subzero_::icmpUgt64Bool,
+ (FuncType64)icmpUgt64Bool },
+ { "icmpSge64Bool", (FuncType64)Subzero_::icmpSge64Bool,
+ (FuncType64)icmpSge64Bool },
+ { "icmpUge64Bool", (FuncType64)Subzero_::icmpUge64Bool,
+ (FuncType64)icmpUge64Bool },
+ { "icmpSlt64Bool", (FuncType64)Subzero_::icmpSlt64Bool,
+ (FuncType64)icmpSlt64Bool },
+ { "icmpUlt64Bool", (FuncType64)Subzero_::icmpUlt64Bool,
+ (FuncType64)icmpUlt64Bool },
+ { "icmpSle64Bool", (FuncType64)Subzero_::icmpSle64Bool,
+ (FuncType64)icmpSle64Bool },
+ { "icmpUle64Bool", (FuncType64)Subzero_::icmpUle64Bool,
+ (FuncType64)icmpUle64Bool }, };
+ const static unsigned NumFunc64 = sizeof(Func64) / sizeof(*Func64);
+
+ bool ResultSz, ResultLlc;
+
+ unsigned TotalTests = 0;
+ unsigned Passes = 0;
+ unsigned Failures = 0;
+
+ for (unsigned f = 0; f < NumFunc8; ++f) {
+ for (unsigned i = 0; i < NumValues; ++i) {
+ for (unsigned j = 0; j < NumValues; ++j) {
+ ++TotalTests;
+ ResultSz = Func8[f].FuncSz(Values[i], Values[j]);
+ ResultLlc = Func8[f].FuncLlc(Values[i], Values[j]);
+ if (ResultSz == ResultLlc) {
+ ++Passes;
+ } else {
+ ++Failures;
+ printf("%s(0x%08x, 0x%08x): sz=%d llc=%d\n", Func8[f].Name,
+ Values[i], Values[j], ResultSz, ResultLlc);
+ }
+ }
+ }
+ }
+
+ for (unsigned f = 0; f < NumFunc16; ++f) {
+ for (unsigned i = 0; i < NumValues; ++i) {
+ for (unsigned j = 0; j < NumValues; ++j) {
+ ++TotalTests;
+ ResultSz = Func16[f].FuncSz(Values[i], Values[j]);
+ ResultLlc = Func16[f].FuncLlc(Values[i], Values[j]);
+ if (ResultSz == ResultLlc) {
+ ++Passes;
+ } else {
+ ++Failures;
+ printf("%s(0x%08x, 0x%08x): sz=%d llc=%d\n", Func16[f].Name,
+ Values[i], Values[j], ResultSz, ResultLlc);
+ }
+ }
+ }
+ }
+
+ for (unsigned f = 0; f < NumFunc32; ++f) {
+ for (unsigned i = 0; i < NumValues; ++i) {
+ for (unsigned j = 0; j < NumValues; ++j) {
+ ++TotalTests;
+ ResultSz = Func32[f].FuncSz(Values[i], Values[j]);
+ ResultLlc = Func32[f].FuncLlc(Values[i], Values[j]);
+ if (ResultSz == ResultLlc) {
+ ++Passes;
+ } else {
+ ++Failures;
+ printf("%s(0x%08x, 0x%08x): sz=%d llc=%d\n", Func32[f].Name,
+ Values[i], Values[j], ResultSz, ResultLlc);
+ }
+ }
+ }
+ }
+
+ for (unsigned f = 0; f < NumFunc64; ++f) {
+ for (unsigned iLo = 0; iLo < NumValues; ++iLo) {
+ for (unsigned iHi = 0; iHi < NumValues; ++iHi) {
+ for (unsigned jLo = 0; jLo < NumValues; ++jLo) {
+ for (unsigned jHi = 0; jHi < NumValues; ++jHi) {
+ uint64_t Value1 = (((uint64_t)Values[iHi]) << 32) + Values[iLo];
+ uint64_t Value2 = (((uint64_t)Values[jHi]) << 32) + Values[jLo];
+ ++TotalTests;
+ ResultLlc = Func64[f].FuncLlc(Value1, Value2);
+ ResultSz = Func64[f].FuncSz(Value1, Value2);
+ if (ResultSz == ResultLlc) {
+ ++Passes;
+ } else {
+ ++Failures;
+ printf("%s(0x%016llx, 0x%016llx): sz=%d llc=%d\n", Func64[f].Name,
+ Value1, Value2, ResultSz, ResultLlc);
+ }
+ }
+ }
+ }
+ }
+ }
+ printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures);
+ return Failures;
+}

Powered by Google App Engine
This is Rietveld 408576698