Browse code

Fix bswap.

Török Edvin authored on 2010/03/24 22:27:15
Showing 4 changed files
... ...
@@ -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