OLD | NEW |
(Empty) | |
| 1 // abtest.py --test=test_icmp.cpp --driver=test_icmp_main.cpp --prefix=Subzero_
--output=test_icmp |
| 2 |
| 3 #include <stdio.h> |
| 4 #include <stdint.h> |
| 5 |
| 6 #include "test_icmp.h" |
| 7 namespace Subzero_ { |
| 8 #include "test_icmp.h" |
| 9 } |
| 10 |
| 11 int main(int argc, char **argv) { |
| 12 static unsigned Values[] = { |
| 13 0x0, 0x1, 0x7ffffffe, 0x7fffffff, |
| 14 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, |
| 15 0x7e, 0x7f, 0x80, 0x81, 0xfe, 0xff, 0x100, 0x101, |
| 16 0x7ffe, 0x7fff, 0x8000, 0x8001, 0xfffe, 0xffff, 0x10000, 0x10001, |
| 17 }; |
| 18 const static unsigned NumValues = sizeof(Values) / sizeof(*Values); |
| 19 |
| 20 typedef bool (*FuncType8)(uint8_t, uint8_t); |
| 21 static struct { |
| 22 const char *Name; |
| 23 FuncType8 FuncSz; |
| 24 FuncType8 FuncLlc; |
| 25 } Func8[] = { { "icmpEq8Bool", (FuncType8)Subzero_::icmpEq8Bool, |
| 26 (FuncType8)icmpEq8Bool }, |
| 27 { "icmpNe8Bool", (FuncType8)Subzero_::icmpNe8Bool, |
| 28 (FuncType8)icmpNe8Bool }, |
| 29 { "icmpSgt8Bool", (FuncType8)Subzero_::icmpSgt8Bool, |
| 30 (FuncType8)icmpSgt8Bool }, |
| 31 { "icmpUgt8Bool", (FuncType8)Subzero_::icmpUgt8Bool, |
| 32 (FuncType8)icmpUgt8Bool }, |
| 33 { "icmpSge8Bool", (FuncType8)Subzero_::icmpSge8Bool, |
| 34 (FuncType8)icmpSge8Bool }, |
| 35 { "icmpUge8Bool", (FuncType8)Subzero_::icmpUge8Bool, |
| 36 (FuncType8)icmpUge8Bool }, |
| 37 { "icmpSlt8Bool", (FuncType8)Subzero_::icmpSlt8Bool, |
| 38 (FuncType8)icmpSlt8Bool }, |
| 39 { "icmpUlt8Bool", (FuncType8)Subzero_::icmpUlt8Bool, |
| 40 (FuncType8)icmpUlt8Bool }, |
| 41 { "icmpSle8Bool", (FuncType8)Subzero_::icmpSle8Bool, |
| 42 (FuncType8)icmpSle8Bool }, |
| 43 { "icmpUle8Bool", (FuncType8)Subzero_::icmpUle8Bool, |
| 44 (FuncType8)icmpUle8Bool }, }; |
| 45 const static unsigned NumFunc8 = sizeof(Func8) / sizeof(*Func8); |
| 46 |
| 47 typedef bool (*FuncType16)(uint16_t, uint16_t); |
| 48 static struct { |
| 49 const char *Name; |
| 50 FuncType16 FuncSz; |
| 51 FuncType16 FuncLlc; |
| 52 } Func16[] = { { "icmpEq16Bool", (FuncType16)Subzero_::icmpEq16Bool, |
| 53 (FuncType16)icmpEq16Bool }, |
| 54 { "icmpNe16Bool", (FuncType16)Subzero_::icmpNe16Bool, |
| 55 (FuncType16)icmpNe16Bool }, |
| 56 { "icmpSgt16Bool", (FuncType16)Subzero_::icmpSgt16Bool, |
| 57 (FuncType16)icmpSgt16Bool }, |
| 58 { "icmpUgt16Bool", (FuncType16)Subzero_::icmpUgt16Bool, |
| 59 (FuncType16)icmpUgt16Bool }, |
| 60 { "icmpSge16Bool", (FuncType16)Subzero_::icmpSge16Bool, |
| 61 (FuncType16)icmpSge16Bool }, |
| 62 { "icmpUge16Bool", (FuncType16)Subzero_::icmpUge16Bool, |
| 63 (FuncType16)icmpUge16Bool }, |
| 64 { "icmpSlt16Bool", (FuncType16)Subzero_::icmpSlt16Bool, |
| 65 (FuncType16)icmpSlt16Bool }, |
| 66 { "icmpUlt16Bool", (FuncType16)Subzero_::icmpUlt16Bool, |
| 67 (FuncType16)icmpUlt16Bool }, |
| 68 { "icmpSle16Bool", (FuncType16)Subzero_::icmpSle16Bool, |
| 69 (FuncType16)icmpSle16Bool }, |
| 70 { "icmpUle16Bool", (FuncType16)Subzero_::icmpUle16Bool, |
| 71 (FuncType16)icmpUle16Bool }, }; |
| 72 const static unsigned NumFunc16 = sizeof(Func16) / sizeof(*Func16); |
| 73 |
| 74 typedef bool (*FuncType32)(uint32_t, uint32_t); |
| 75 static struct { |
| 76 const char *Name; |
| 77 FuncType32 FuncSz; |
| 78 FuncType32 FuncLlc; |
| 79 } Func32[] = { { "icmpEq32Bool", (FuncType32)Subzero_::icmpEq32Bool, |
| 80 (FuncType32)icmpEq32Bool }, |
| 81 { "icmpNe32Bool", (FuncType32)Subzero_::icmpNe32Bool, |
| 82 (FuncType32)icmpNe32Bool }, |
| 83 { "icmpSgt32Bool", (FuncType32)Subzero_::icmpSgt32Bool, |
| 84 (FuncType32)icmpSgt32Bool }, |
| 85 { "icmpUgt32Bool", (FuncType32)Subzero_::icmpUgt32Bool, |
| 86 (FuncType32)icmpUgt32Bool }, |
| 87 { "icmpSge32Bool", (FuncType32)Subzero_::icmpSge32Bool, |
| 88 (FuncType32)icmpSge32Bool }, |
| 89 { "icmpUge32Bool", (FuncType32)Subzero_::icmpUge32Bool, |
| 90 (FuncType32)icmpUge32Bool }, |
| 91 { "icmpSlt32Bool", (FuncType32)Subzero_::icmpSlt32Bool, |
| 92 (FuncType32)icmpSlt32Bool }, |
| 93 { "icmpUlt32Bool", (FuncType32)Subzero_::icmpUlt32Bool, |
| 94 (FuncType32)icmpUlt32Bool }, |
| 95 { "icmpSle32Bool", (FuncType32)Subzero_::icmpSle32Bool, |
| 96 (FuncType32)icmpSle32Bool }, |
| 97 { "icmpUle32Bool", (FuncType32)Subzero_::icmpUle32Bool, |
| 98 (FuncType32)icmpUle32Bool }, }; |
| 99 const static unsigned NumFunc32 = sizeof(Func32) / sizeof(*Func32); |
| 100 |
| 101 typedef bool (*FuncType64)(uint64_t, uint64_t); |
| 102 static struct { |
| 103 const char *Name; |
| 104 FuncType64 FuncSz; |
| 105 FuncType64 FuncLlc; |
| 106 } Func64[] = { { "icmpEq64Bool", (FuncType64)Subzero_::icmpEq64Bool, |
| 107 (FuncType64)icmpEq64Bool }, |
| 108 { "icmpNe64Bool", (FuncType64)Subzero_::icmpNe64Bool, |
| 109 (FuncType64)icmpNe64Bool }, |
| 110 { "icmpSgt64Bool", (FuncType64)Subzero_::icmpSgt64Bool, |
| 111 (FuncType64)icmpSgt64Bool }, |
| 112 { "icmpUgt64Bool", (FuncType64)Subzero_::icmpUgt64Bool, |
| 113 (FuncType64)icmpUgt64Bool }, |
| 114 { "icmpSge64Bool", (FuncType64)Subzero_::icmpSge64Bool, |
| 115 (FuncType64)icmpSge64Bool }, |
| 116 { "icmpUge64Bool", (FuncType64)Subzero_::icmpUge64Bool, |
| 117 (FuncType64)icmpUge64Bool }, |
| 118 { "icmpSlt64Bool", (FuncType64)Subzero_::icmpSlt64Bool, |
| 119 (FuncType64)icmpSlt64Bool }, |
| 120 { "icmpUlt64Bool", (FuncType64)Subzero_::icmpUlt64Bool, |
| 121 (FuncType64)icmpUlt64Bool }, |
| 122 { "icmpSle64Bool", (FuncType64)Subzero_::icmpSle64Bool, |
| 123 (FuncType64)icmpSle64Bool }, |
| 124 { "icmpUle64Bool", (FuncType64)Subzero_::icmpUle64Bool, |
| 125 (FuncType64)icmpUle64Bool }, }; |
| 126 const static unsigned NumFunc64 = sizeof(Func64) / sizeof(*Func64); |
| 127 |
| 128 bool ResultSz, ResultLlc; |
| 129 |
| 130 unsigned TotalTests = 0; |
| 131 unsigned Passes = 0; |
| 132 unsigned Failures = 0; |
| 133 |
| 134 for (unsigned f = 0; f < NumFunc8; ++f) { |
| 135 for (unsigned i = 0; i < NumValues; ++i) { |
| 136 for (unsigned j = 0; j < NumValues; ++j) { |
| 137 ++TotalTests; |
| 138 ResultSz = Func8[f].FuncSz(Values[i], Values[j]); |
| 139 ResultLlc = Func8[f].FuncLlc(Values[i], Values[j]); |
| 140 if (ResultSz == ResultLlc) { |
| 141 ++Passes; |
| 142 } else { |
| 143 ++Failures; |
| 144 printf("%s(0x%08x, 0x%08x): sz=%d llc=%d\n", Func8[f].Name, |
| 145 Values[i], Values[j], ResultSz, ResultLlc); |
| 146 } |
| 147 } |
| 148 } |
| 149 } |
| 150 |
| 151 for (unsigned f = 0; f < NumFunc16; ++f) { |
| 152 for (unsigned i = 0; i < NumValues; ++i) { |
| 153 for (unsigned j = 0; j < NumValues; ++j) { |
| 154 ++TotalTests; |
| 155 ResultSz = Func16[f].FuncSz(Values[i], Values[j]); |
| 156 ResultLlc = Func16[f].FuncLlc(Values[i], Values[j]); |
| 157 if (ResultSz == ResultLlc) { |
| 158 ++Passes; |
| 159 } else { |
| 160 ++Failures; |
| 161 printf("%s(0x%08x, 0x%08x): sz=%d llc=%d\n", Func16[f].Name, |
| 162 Values[i], Values[j], ResultSz, ResultLlc); |
| 163 } |
| 164 } |
| 165 } |
| 166 } |
| 167 |
| 168 for (unsigned f = 0; f < NumFunc32; ++f) { |
| 169 for (unsigned i = 0; i < NumValues; ++i) { |
| 170 for (unsigned j = 0; j < NumValues; ++j) { |
| 171 ++TotalTests; |
| 172 ResultSz = Func32[f].FuncSz(Values[i], Values[j]); |
| 173 ResultLlc = Func32[f].FuncLlc(Values[i], Values[j]); |
| 174 if (ResultSz == ResultLlc) { |
| 175 ++Passes; |
| 176 } else { |
| 177 ++Failures; |
| 178 printf("%s(0x%08x, 0x%08x): sz=%d llc=%d\n", Func32[f].Name, |
| 179 Values[i], Values[j], ResultSz, ResultLlc); |
| 180 } |
| 181 } |
| 182 } |
| 183 } |
| 184 |
| 185 for (unsigned f = 0; f < NumFunc64; ++f) { |
| 186 for (unsigned iLo = 0; iLo < NumValues; ++iLo) { |
| 187 for (unsigned iHi = 0; iHi < NumValues; ++iHi) { |
| 188 for (unsigned jLo = 0; jLo < NumValues; ++jLo) { |
| 189 for (unsigned jHi = 0; jHi < NumValues; ++jHi) { |
| 190 uint64_t Value1 = (((uint64_t)Values[iHi]) << 32) + Values[iLo]; |
| 191 uint64_t Value2 = (((uint64_t)Values[jHi]) << 32) + Values[jLo]; |
| 192 ++TotalTests; |
| 193 ResultLlc = Func64[f].FuncLlc(Value1, Value2); |
| 194 ResultSz = Func64[f].FuncSz(Value1, Value2); |
| 195 if (ResultSz == ResultLlc) { |
| 196 ++Passes; |
| 197 } else { |
| 198 ++Failures; |
| 199 printf("%s(0x%016llx, 0x%016llx): sz=%d llc=%d\n", Func64[f].Name, |
| 200 Value1, Value2, ResultSz, ResultLlc); |
| 201 } |
| 202 } |
| 203 } |
| 204 } |
| 205 } |
| 206 } |
| 207 printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures); |
| 208 return Failures; |
| 209 } |
OLD | NEW |