... | ... |
@@ -1731,13 +1731,9 @@ static int cli_bytecode_prepare_interpreter(struct cli_bc *bc) |
1731 | 1731 |
/* TODO */ |
1732 | 1732 |
break; |
1733 | 1733 |
case OP_BC_BSWAP16: |
1734 |
- /*TODO */ |
|
1735 |
- break; |
|
1736 | 1734 |
case OP_BC_BSWAP32: |
1737 |
- /*TODO */ |
|
1738 |
- break; |
|
1739 | 1735 |
case OP_BC_BSWAP64: |
1740 |
- /*TODO */ |
|
1736 |
+ MAP(inst->u.unaryop); |
|
1741 | 1737 |
break; |
1742 | 1738 |
case OP_BC_PTRDIFF32: |
1743 | 1739 |
/*TODO */ |
... | ... |
@@ -1235,6 +1235,7 @@ public: |
1235 | 1235 |
case OP_BC_MEMSET: |
1236 | 1236 |
{ |
1237 | 1237 |
Value *Dst = convertOperand(func, inst, inst->u.three[0]); |
1238 |
+ Dst = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1238 | 1239 |
Value *Val = convertOperand(func, Type::getInt8Ty(Context), inst->u.three[1]); |
1239 | 1240 |
Value *Len = convertOperand(func, Type::getInt32Ty(Context), inst->u.three[2]); |
1240 | 1241 |
CallInst *c = Builder.CreateCall4(CF->FMemset, Dst, Val, Len, |
... | ... |
@@ -1246,7 +1247,9 @@ public: |
1246 | 1246 |
case OP_BC_MEMCPY: |
1247 | 1247 |
{ |
1248 | 1248 |
Value *Dst = convertOperand(func, inst, inst->u.three[0]); |
1249 |
+ Dst = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1249 | 1250 |
Value *Src = convertOperand(func, inst, inst->u.three[1]); |
1251 |
+ Src = Builder.CreatePointerCast(Src, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1250 | 1252 |
Value *Len = convertOperand(func, Type::getInt32Ty(Context), inst->u.three[2]); |
1251 | 1253 |
CallInst *c = Builder.CreateCall4(CF->FMemcpy, Dst, Src, Len, |
1252 | 1254 |
ConstantInt::get(Type::getInt32Ty(Context), 1)); |
... | ... |
@@ -1257,7 +1260,9 @@ public: |
1257 | 1257 |
case OP_BC_MEMMOVE: |
1258 | 1258 |
{ |
1259 | 1259 |
Value *Dst = convertOperand(func, inst, inst->u.three[0]); |
1260 |
+ Dst = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1260 | 1261 |
Value *Src = convertOperand(func, inst, inst->u.three[1]); |
1262 |
+ Src = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1261 | 1263 |
Value *Len = convertOperand(func, Type::getInt32Ty(Context), inst->u.three[2]); |
1262 | 1264 |
CallInst *c = Builder.CreateCall4(CF->FMemmove, Dst, Src, Len, |
1263 | 1265 |
ConstantInt::get(Type::getInt32Ty(Context), 1)); |
... | ... |
@@ -1268,7 +1273,9 @@ public: |
1268 | 1268 |
case OP_BC_MEMCMP: |
1269 | 1269 |
{ |
1270 | 1270 |
Value *Dst = convertOperand(func, inst, inst->u.three[0]); |
1271 |
+ Dst = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1271 | 1272 |
Value *Src = convertOperand(func, inst, inst->u.three[1]); |
1273 |
+ Src = Builder.CreatePointerCast(Dst, PointerType::getUnqual(Type::getInt8Ty(Context))); |
|
1272 | 1274 |
Value *Len = convertOperand(func, EE->getTargetData()->getIntPtrType(Context), inst->u.three[2]); |
1273 | 1275 |
CallInst *c = Builder.CreateCall3(CF->FRealmemcmp, Dst, Src, Len); |
1274 | 1276 |
c->setTailCall(true); |
... | ... |
@@ -210,6 +210,15 @@ START_TEST (test_pdf) |
210 | 210 |
} |
211 | 211 |
END_TEST |
212 | 212 |
|
213 |
+START_TEST (test_bswap) |
|
214 |
+{ |
|
215 |
+ cl_init(CL_INIT_DEFAULT); |
|
216 |
+ if (have_clamjit) |
|
217 |
+ runtest("input/bswap.cbc", 0xbeef, 0, 0, NULL, NULL, NULL, NULL); |
|
218 |
+// runtest("input/bswap.cbc", 0xbeef, 0, 1, NULL, NULL, NULL, NULL); |
|
219 |
+} |
|
220 |
+END_TEST |
|
221 |
+ |
|
213 | 222 |
Suite *test_bytecode_suite(void) |
214 | 223 |
{ |
215 | 224 |
Suite *s = suite_create("bytecode"); |
... | ... |
@@ -225,5 +234,6 @@ Suite *test_bytecode_suite(void) |
225 | 225 |
tcase_add_test(tc_cli_arith, test_inf); |
226 | 226 |
tcase_add_test(tc_cli_arith, test_matchwithread); |
227 | 227 |
tcase_add_test(tc_cli_arith, test_pdf); |
228 |
+ tcase_add_test(tc_cli_arith, test_bswap); |
|
228 | 229 |
return s; |
229 | 230 |
} |
230 | 231 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,22 @@ |
0 |
+ClamBCafhalbajjkd|afefdfggifnf```````|bhacflfafmfbfcfmb`cnbac`cmbacdcmbgfffdfbcafbfafbc``b`aaap`clamcoincidencejb:132 |
|
1 |
+ |
|
2 |
+Tedebodebaddadb`bebgdaaaaaaaa`aabb`ab`aaabb`bb`baae`badbadb`bb`baae`badahb`bb`bdb`aah |
|
3 |
+E`` |
|
4 |
+G`ac`@`bod@AaAbAcAdAeAfAgAhAiAjAkAlAmAnAo`bad@Aa` |
|
5 |
+A`b`bLbebb`bab`bab`bab`aabgdabcd`bgdabcd`````b`a`aa`````b`a`aa```b`b`aa`````b`b`aa```aa`b`b```aa`````b`b`aa```ah`aa`b`b`b`b`Fbjbak |
|
6 |
+Bbcdaedbbhdad@dbcdagdbbhdaf@d``ibadAb`B`ad``hbaf@aB`adb`aajgbadaaaklb``bbajacTaaakaaab |
|
7 |
+Bb`aacnbajTbaab |
|
8 |
+Bb`aanbbacanaaaoeab`aanC``ab``bbEamjnmd`Taaaoacaj |
|
9 |
+Bb`bbaagbaeaabbalb``bbbaaabTaabbaadae |
|
10 |
+Bb`babobbaaTbaae |
|
11 |
+Bb`bbeabbabbeaaabfaeab`bbeaG``a`b`cd``bbEbmjnmd`Taabfaafaj |
|
12 |
+Baabhalbb`bbiaoabhaHbadcfehgdHhgfedcbad``fbbiaagaabkalb``bbbiaaaTaabkaagah |
|
13 |
+Bb`baaobbiaTbaah |
|
14 |
+Bb`bbnabbaabnaaaboaeab`bbnaHhgfedcbad``bbEdmjnmd`Taaboaaiaj |
|
15 |
+BahbabgbafaabbbfaahbabBhgab`bbcboabbbEemjnmdDonnkdTcab`bbcb |
|
16 |
+Bb`bbdbbb`bdbTcab`bbdbE |
|
17 |
+Sifnfdg`befnfdgbgig`gofifnfdghbibSkgScfhfafbg`bbfegffkeacfcme`bmc`bkgS`clbaclbbclbcclbdclbeclbfclbgclbhclbiclbac`clbacaclbacbclbaccclbacdclbacecSmgkcScfhfafbg`bbfegffbckeacfcmekc |
|
18 |
+egifnfdgccbcoedg`bhgkcSmfefmfcgefdghbfbbfegffbclb`b`clb`bcgifjgefofffhbbfegffbcibibkcSifff`bhbcflfifoebgefafdfifnfdgacfchbfbbfegffib`babmc`b`chgac`c`cibSbgefdgegbgnf`b`chgdfefafdfackc |
|
19 |
+hg`bmc`bcflfifoebgefafdfifnfdgccbchbfbbfegffibkcSifff`bhbhg`babmc`b`chg`ccc`cbc`cac`c`cibSbgefdgegbgnf`b`chgdfefafdfbckcShg`bmc`boeoebfegiflfdgifnfoebfcgggaf`gccbchbhgibkc |
|
20 |
+ifff`bhbhg`babmc`b`chg`c`c`cac`cbc`cccibSbgefdgegbgnf`b`chgdfefafdfcckcScflfifoeggbgifdgefifnfdgccbchbfbbfegffbclb`b`chgacbcccdcecfcgchcibkcSifff`bhbcflfifoebgefafdfifnfdgccbchbfbbfegffbcib`babmc`b`chgacbcccdcecfcgchcib |
|
21 |
+bgefdgegbgnf`b`chgdfefafdfdckcSifff`bhbbfegffbcke`cme`babmc`b`chggchcibSbgefdgegbgnf`b`chgdfefafdfeckcSbgefdgegbgnf`b`chgbfefefffkcSmgSS |
|
0 | 22 |
\ No newline at end of file |