| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 __ movl(rax, Immediate(id)); | 139 __ movl(rax, Immediate(id)); |
| 140 __ Move(rcx, Smi::FromInt(0)); | 140 __ Move(rcx, Smi::FromInt(0)); |
| 141 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(0))); | 141 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(0))); |
| 142 __ cmpq(rcx, rdx); | 142 __ cmpq(rcx, rdx); |
| 143 __ j(not_equal, exit); | 143 __ j(not_equal, exit); |
| 144 } | 144 } |
| 145 | 145 |
| 146 | 146 |
| 147 // Test that we can move a Smi value literally into a register. | 147 // Test that we can move a Smi value literally into a register. |
| 148 TEST(SmiMove) { | 148 TEST(SmiMove) { |
| 149 v8::internal::V8::Initialize(NULL); |
| 149 // Allocate an executable page of memory. | 150 // Allocate an executable page of memory. |
| 150 size_t actual_size; | 151 size_t actual_size; |
| 151 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 152 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 152 &actual_size, | 153 &actual_size, |
| 153 true)); | 154 true)); |
| 154 CHECK(buffer); | 155 CHECK(buffer); |
| 155 HandleScope handles; | 156 HandleScope handles; |
| 156 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 157 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 157 MacroAssembler* masm = &assembler; // Create a pointer for the __ macro. | 158 MacroAssembler* masm = &assembler; // Create a pointer for the __ macro. |
| 158 masm->set_allow_stub_calls(false); | 159 masm->set_allow_stub_calls(false); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 __ j(not_equal, exit); | 226 __ j(not_equal, exit); |
| 226 __ incq(rax); | 227 __ incq(rax); |
| 227 __ cmpq(rcx, r8); | 228 __ cmpq(rcx, r8); |
| 228 __ j(not_equal, exit); | 229 __ j(not_equal, exit); |
| 229 } | 230 } |
| 230 } | 231 } |
| 231 | 232 |
| 232 | 233 |
| 233 // Test that we can compare smis for equality (and more). | 234 // Test that we can compare smis for equality (and more). |
| 234 TEST(SmiCompare) { | 235 TEST(SmiCompare) { |
| 235 v8::V8::Initialize(); | 236 v8::internal::V8::Initialize(NULL); |
| 236 // Allocate an executable page of memory. | 237 // Allocate an executable page of memory. |
| 237 size_t actual_size; | 238 size_t actual_size; |
| 238 byte* buffer = | 239 byte* buffer = |
| 239 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, | 240 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
| 240 &actual_size, | 241 &actual_size, |
| 241 true)); | 242 true)); |
| 242 CHECK(buffer); | 243 CHECK(buffer); |
| 243 HandleScope handles; | 244 HandleScope handles; |
| 244 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 245 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 245 | 246 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 276 CodeDesc desc; | 277 CodeDesc desc; |
| 277 masm->GetCode(&desc); | 278 masm->GetCode(&desc); |
| 278 // Call the function from C++. | 279 // Call the function from C++. |
| 279 int result = FUNCTION_CAST<F0>(buffer)(); | 280 int result = FUNCTION_CAST<F0>(buffer)(); |
| 280 CHECK_EQ(0, result); | 281 CHECK_EQ(0, result); |
| 281 } | 282 } |
| 282 | 283 |
| 283 | 284 |
| 284 | 285 |
| 285 TEST(Integer32ToSmi) { | 286 TEST(Integer32ToSmi) { |
| 287 v8::internal::V8::Initialize(NULL); |
| 286 // Allocate an executable page of memory. | 288 // Allocate an executable page of memory. |
| 287 size_t actual_size; | 289 size_t actual_size; |
| 288 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 290 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 289 &actual_size, | 291 &actual_size, |
| 290 true)); | 292 true)); |
| 291 CHECK(buffer); | 293 CHECK(buffer); |
| 292 HandleScope handles; | 294 HandleScope handles; |
| 293 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 295 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 294 | 296 |
| 295 MacroAssembler* masm = &assembler; | 297 MacroAssembler* masm = &assembler; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 __ j(not_equal, exit); | 405 __ j(not_equal, exit); |
| 404 | 406 |
| 405 __ incq(rax); | 407 __ incq(rax); |
| 406 __ Integer64PlusConstantToSmi(rcx, rcx, y); | 408 __ Integer64PlusConstantToSmi(rcx, rcx, y); |
| 407 __ cmpq(rcx, r8); | 409 __ cmpq(rcx, r8); |
| 408 __ j(not_equal, exit); | 410 __ j(not_equal, exit); |
| 409 } | 411 } |
| 410 | 412 |
| 411 | 413 |
| 412 TEST(Integer64PlusConstantToSmi) { | 414 TEST(Integer64PlusConstantToSmi) { |
| 415 v8::internal::V8::Initialize(NULL); |
| 413 // Allocate an executable page of memory. | 416 // Allocate an executable page of memory. |
| 414 size_t actual_size; | 417 size_t actual_size; |
| 415 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 418 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 416 &actual_size, | 419 &actual_size, |
| 417 true)); | 420 true)); |
| 418 CHECK(buffer); | 421 CHECK(buffer); |
| 419 HandleScope handles; | 422 HandleScope handles; |
| 420 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 423 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 421 | 424 |
| 422 MacroAssembler* masm = &assembler; | 425 MacroAssembler* masm = &assembler; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 446 | 449 |
| 447 CodeDesc desc; | 450 CodeDesc desc; |
| 448 masm->GetCode(&desc); | 451 masm->GetCode(&desc); |
| 449 // Call the function from C++. | 452 // Call the function from C++. |
| 450 int result = FUNCTION_CAST<F0>(buffer)(); | 453 int result = FUNCTION_CAST<F0>(buffer)(); |
| 451 CHECK_EQ(0, result); | 454 CHECK_EQ(0, result); |
| 452 } | 455 } |
| 453 | 456 |
| 454 | 457 |
| 455 TEST(SmiCheck) { | 458 TEST(SmiCheck) { |
| 459 v8::internal::V8::Initialize(NULL); |
| 456 // Allocate an executable page of memory. | 460 // Allocate an executable page of memory. |
| 457 size_t actual_size; | 461 size_t actual_size; |
| 458 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 462 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 459 &actual_size, | 463 &actual_size, |
| 460 true)); | 464 true)); |
| 461 CHECK(buffer); | 465 CHECK(buffer); |
| 462 HandleScope handles; | 466 HandleScope handles; |
| 463 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 467 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 464 | 468 |
| 465 MacroAssembler* masm = &assembler; | 469 MacroAssembler* masm = &assembler; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 __ jmp(exit); | 696 __ jmp(exit); |
| 693 __ bind(&smi_ok2); | 697 __ bind(&smi_ok2); |
| 694 __ incq(rax); | 698 __ incq(rax); |
| 695 __ cmpq(rcx, r8); | 699 __ cmpq(rcx, r8); |
| 696 __ j(not_equal, exit); | 700 __ j(not_equal, exit); |
| 697 } | 701 } |
| 698 } | 702 } |
| 699 | 703 |
| 700 | 704 |
| 701 TEST(SmiNeg) { | 705 TEST(SmiNeg) { |
| 706 v8::internal::V8::Initialize(NULL); |
| 702 // Allocate an executable page of memory. | 707 // Allocate an executable page of memory. |
| 703 size_t actual_size; | 708 size_t actual_size; |
| 704 byte* buffer = | 709 byte* buffer = |
| 705 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 710 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 706 &actual_size, | 711 &actual_size, |
| 707 true)); | 712 true)); |
| 708 CHECK(buffer); | 713 CHECK(buffer); |
| 709 HandleScope handles; | 714 HandleScope handles; |
| 710 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 715 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 711 | 716 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 __ cmpq(r9, r8); | 785 __ cmpq(r9, r8); |
| 781 __ j(not_equal, exit); | 786 __ j(not_equal, exit); |
| 782 | 787 |
| 783 __ incq(rax); | 788 __ incq(rax); |
| 784 __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), exit); | 789 __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), exit); |
| 785 __ cmpq(rcx, r8); | 790 __ cmpq(rcx, r8); |
| 786 __ j(not_equal, exit); | 791 __ j(not_equal, exit); |
| 787 } | 792 } |
| 788 | 793 |
| 789 TEST(SmiAdd) { | 794 TEST(SmiAdd) { |
| 795 v8::internal::V8::Initialize(NULL); |
| 790 // Allocate an executable page of memory. | 796 // Allocate an executable page of memory. |
| 791 size_t actual_size; | 797 size_t actual_size; |
| 792 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 798 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 793 &actual_size, | 799 &actual_size, |
| 794 true)); | 800 true)); |
| 795 CHECK(buffer); | 801 CHECK(buffer); |
| 796 HandleScope handles; | 802 HandleScope handles; |
| 797 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 803 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 798 | 804 |
| 799 MacroAssembler* masm = &assembler; | 805 MacroAssembler* masm = &assembler; |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 968 __ jmp(exit); | 974 __ jmp(exit); |
| 969 __ bind(&overflow_ok); | 975 __ bind(&overflow_ok); |
| 970 __ incq(rax); | 976 __ incq(rax); |
| 971 __ cmpq(rcx, r11); | 977 __ cmpq(rcx, r11); |
| 972 __ j(not_equal, exit); | 978 __ j(not_equal, exit); |
| 973 } | 979 } |
| 974 } | 980 } |
| 975 | 981 |
| 976 | 982 |
| 977 TEST(SmiSub) { | 983 TEST(SmiSub) { |
| 984 v8::internal::V8::Initialize(NULL); |
| 978 // Allocate an executable page of memory. | 985 // Allocate an executable page of memory. |
| 979 size_t actual_size; | 986 size_t actual_size; |
| 980 byte* buffer = | 987 byte* buffer = |
| 981 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, | 988 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
| 982 &actual_size, | 989 &actual_size, |
| 983 true)); | 990 true)); |
| 984 CHECK(buffer); | 991 CHECK(buffer); |
| 985 HandleScope handles; | 992 HandleScope handles; |
| 986 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 993 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 987 | 994 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1058 __ bind(&overflow_ok2); | 1065 __ bind(&overflow_ok2); |
| 1059 // 31-bit version doesn't preserve rcx on failure. | 1066 // 31-bit version doesn't preserve rcx on failure. |
| 1060 // __ incq(rax); | 1067 // __ incq(rax); |
| 1061 // __ cmpq(r11, rcx); | 1068 // __ cmpq(r11, rcx); |
| 1062 // __ j(not_equal, exit); | 1069 // __ j(not_equal, exit); |
| 1063 } | 1070 } |
| 1064 } | 1071 } |
| 1065 | 1072 |
| 1066 | 1073 |
| 1067 TEST(SmiMul) { | 1074 TEST(SmiMul) { |
| 1075 v8::internal::V8::Initialize(NULL); |
| 1068 // Allocate an executable page of memory. | 1076 // Allocate an executable page of memory. |
| 1069 size_t actual_size; | 1077 size_t actual_size; |
| 1070 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 1078 byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 1071 &actual_size, | 1079 &actual_size, |
| 1072 true)); | 1080 true)); |
| 1073 CHECK(buffer); | 1081 CHECK(buffer); |
| 1074 HandleScope handles; | 1082 HandleScope handles; |
| 1075 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1083 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1076 | 1084 |
| 1077 MacroAssembler* masm = &assembler; | 1085 MacroAssembler* masm = &assembler; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1162 __ bind(&fail_ok2); | 1170 __ bind(&fail_ok2); |
| 1163 | 1171 |
| 1164 __ incq(r15); | 1172 __ incq(r15); |
| 1165 __ cmpq(rcx, r11); | 1173 __ cmpq(rcx, r11); |
| 1166 __ j(not_equal, exit); | 1174 __ j(not_equal, exit); |
| 1167 } | 1175 } |
| 1168 } | 1176 } |
| 1169 | 1177 |
| 1170 | 1178 |
| 1171 TEST(SmiDiv) { | 1179 TEST(SmiDiv) { |
| 1180 v8::internal::V8::Initialize(NULL); |
| 1172 // Allocate an executable page of memory. | 1181 // Allocate an executable page of memory. |
| 1173 size_t actual_size; | 1182 size_t actual_size; |
| 1174 byte* buffer = | 1183 byte* buffer = |
| 1175 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, | 1184 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
| 1176 &actual_size, | 1185 &actual_size, |
| 1177 true)); | 1186 true)); |
| 1178 CHECK(buffer); | 1187 CHECK(buffer); |
| 1179 HandleScope handles; | 1188 HandleScope handles; |
| 1180 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1189 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1181 | 1190 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 __ bind(&fail_ok2); | 1280 __ bind(&fail_ok2); |
| 1272 | 1281 |
| 1273 __ incq(r15); | 1282 __ incq(r15); |
| 1274 __ cmpq(rcx, r11); | 1283 __ cmpq(rcx, r11); |
| 1275 __ j(not_equal, exit); | 1284 __ j(not_equal, exit); |
| 1276 } | 1285 } |
| 1277 } | 1286 } |
| 1278 | 1287 |
| 1279 | 1288 |
| 1280 TEST(SmiMod) { | 1289 TEST(SmiMod) { |
| 1290 v8::internal::V8::Initialize(NULL); |
| 1281 // Allocate an executable page of memory. | 1291 // Allocate an executable page of memory. |
| 1282 size_t actual_size; | 1292 size_t actual_size; |
| 1283 byte* buffer = | 1293 byte* buffer = |
| 1284 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, | 1294 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
| 1285 &actual_size, | 1295 &actual_size, |
| 1286 true)); | 1296 true)); |
| 1287 CHECK(buffer); | 1297 CHECK(buffer); |
| 1288 HandleScope handles; | 1298 HandleScope handles; |
| 1289 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1299 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1290 | 1300 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1366 ASSERT(index.reg.is(rcx)); | 1376 ASSERT(index.reg.is(rcx)); |
| 1367 __ shl(rcx, Immediate(index.scale)); | 1377 __ shl(rcx, Immediate(index.scale)); |
| 1368 __ Set(r8, static_cast<intptr_t>(-x) << i); | 1378 __ Set(r8, static_cast<intptr_t>(-x) << i); |
| 1369 __ cmpq(rcx, r8); | 1379 __ cmpq(rcx, r8); |
| 1370 __ j(not_equal, exit); | 1380 __ j(not_equal, exit); |
| 1371 __ incq(rax); | 1381 __ incq(rax); |
| 1372 } | 1382 } |
| 1373 } | 1383 } |
| 1374 | 1384 |
| 1375 TEST(SmiIndex) { | 1385 TEST(SmiIndex) { |
| 1386 v8::internal::V8::Initialize(NULL); |
| 1376 // Allocate an executable page of memory. | 1387 // Allocate an executable page of memory. |
| 1377 size_t actual_size; | 1388 size_t actual_size; |
| 1378 byte* buffer = | 1389 byte* buffer = |
| 1379 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 3, | 1390 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 3, |
| 1380 &actual_size, | 1391 &actual_size, |
| 1381 true)); | 1392 true)); |
| 1382 CHECK(buffer); | 1393 CHECK(buffer); |
| 1383 HandleScope handles; | 1394 HandleScope handles; |
| 1384 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1395 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1385 | 1396 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1434 __ Move(rdx, Smi::FromInt(y)); | 1445 __ Move(rdx, Smi::FromInt(y)); |
| 1435 __ xor_(rcx, Immediate(kSmiTagMask)); | 1446 __ xor_(rcx, Immediate(kSmiTagMask)); |
| 1436 __ xor_(rdx, Immediate(kSmiTagMask)); | 1447 __ xor_(rdx, Immediate(kSmiTagMask)); |
| 1437 __ SelectNonSmi(r9, rcx, rdx, &fail_ok); | 1448 __ SelectNonSmi(r9, rcx, rdx, &fail_ok); |
| 1438 __ jmp(exit); | 1449 __ jmp(exit); |
| 1439 __ bind(&fail_ok); | 1450 __ bind(&fail_ok); |
| 1440 } | 1451 } |
| 1441 | 1452 |
| 1442 | 1453 |
| 1443 TEST(SmiSelectNonSmi) { | 1454 TEST(SmiSelectNonSmi) { |
| 1455 v8::internal::V8::Initialize(NULL); |
| 1444 // Allocate an executable page of memory. | 1456 // Allocate an executable page of memory. |
| 1445 size_t actual_size; | 1457 size_t actual_size; |
| 1446 byte* buffer = | 1458 byte* buffer = |
| 1447 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 1459 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 1448 &actual_size, | 1460 &actual_size, |
| 1449 true)); | 1461 true)); |
| 1450 CHECK(buffer); | 1462 CHECK(buffer); |
| 1451 HandleScope handles; | 1463 HandleScope handles; |
| 1452 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1464 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1453 | 1465 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1512 __ j(not_equal, exit); | 1524 __ j(not_equal, exit); |
| 1513 | 1525 |
| 1514 __ incq(rax); | 1526 __ incq(rax); |
| 1515 __ SmiAndConstant(rcx, rcx, Smi::FromInt(y)); | 1527 __ SmiAndConstant(rcx, rcx, Smi::FromInt(y)); |
| 1516 __ cmpq(r8, rcx); | 1528 __ cmpq(r8, rcx); |
| 1517 __ j(not_equal, exit); | 1529 __ j(not_equal, exit); |
| 1518 } | 1530 } |
| 1519 | 1531 |
| 1520 | 1532 |
| 1521 TEST(SmiAnd) { | 1533 TEST(SmiAnd) { |
| 1534 v8::internal::V8::Initialize(NULL); |
| 1522 // Allocate an executable page of memory. | 1535 // Allocate an executable page of memory. |
| 1523 size_t actual_size; | 1536 size_t actual_size; |
| 1524 byte* buffer = | 1537 byte* buffer = |
| 1525 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 1538 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 1526 &actual_size, | 1539 &actual_size, |
| 1527 true)); | 1540 true)); |
| 1528 CHECK(buffer); | 1541 CHECK(buffer); |
| 1529 HandleScope handles; | 1542 HandleScope handles; |
| 1530 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1543 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1531 | 1544 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1592 __ j(not_equal, exit); | 1605 __ j(not_equal, exit); |
| 1593 | 1606 |
| 1594 __ incq(rax); | 1607 __ incq(rax); |
| 1595 __ SmiOrConstant(rcx, rcx, Smi::FromInt(y)); | 1608 __ SmiOrConstant(rcx, rcx, Smi::FromInt(y)); |
| 1596 __ cmpq(r8, rcx); | 1609 __ cmpq(r8, rcx); |
| 1597 __ j(not_equal, exit); | 1610 __ j(not_equal, exit); |
| 1598 } | 1611 } |
| 1599 | 1612 |
| 1600 | 1613 |
| 1601 TEST(SmiOr) { | 1614 TEST(SmiOr) { |
| 1615 v8::internal::V8::Initialize(NULL); |
| 1602 // Allocate an executable page of memory. | 1616 // Allocate an executable page of memory. |
| 1603 size_t actual_size; | 1617 size_t actual_size; |
| 1604 byte* buffer = | 1618 byte* buffer = |
| 1605 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 1619 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 1606 &actual_size, | 1620 &actual_size, |
| 1607 true)); | 1621 true)); |
| 1608 CHECK(buffer); | 1622 CHECK(buffer); |
| 1609 HandleScope handles; | 1623 HandleScope handles; |
| 1610 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1624 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1611 | 1625 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1674 __ j(not_equal, exit); | 1688 __ j(not_equal, exit); |
| 1675 | 1689 |
| 1676 __ incq(rax); | 1690 __ incq(rax); |
| 1677 __ SmiXorConstant(rcx, rcx, Smi::FromInt(y)); | 1691 __ SmiXorConstant(rcx, rcx, Smi::FromInt(y)); |
| 1678 __ cmpq(r8, rcx); | 1692 __ cmpq(r8, rcx); |
| 1679 __ j(not_equal, exit); | 1693 __ j(not_equal, exit); |
| 1680 } | 1694 } |
| 1681 | 1695 |
| 1682 | 1696 |
| 1683 TEST(SmiXor) { | 1697 TEST(SmiXor) { |
| 1698 v8::internal::V8::Initialize(NULL); |
| 1684 // Allocate an executable page of memory. | 1699 // Allocate an executable page of memory. |
| 1685 size_t actual_size; | 1700 size_t actual_size; |
| 1686 byte* buffer = | 1701 byte* buffer = |
| 1687 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 1702 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 1688 &actual_size, | 1703 &actual_size, |
| 1689 true)); | 1704 true)); |
| 1690 CHECK(buffer); | 1705 CHECK(buffer); |
| 1691 HandleScope handles; | 1706 HandleScope handles; |
| 1692 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1707 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1693 | 1708 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1740 __ j(not_equal, exit); | 1755 __ j(not_equal, exit); |
| 1741 | 1756 |
| 1742 __ incq(rax); | 1757 __ incq(rax); |
| 1743 __ SmiNot(rcx, rcx); | 1758 __ SmiNot(rcx, rcx); |
| 1744 __ cmpq(rcx, r8); | 1759 __ cmpq(rcx, r8); |
| 1745 __ j(not_equal, exit); | 1760 __ j(not_equal, exit); |
| 1746 } | 1761 } |
| 1747 | 1762 |
| 1748 | 1763 |
| 1749 TEST(SmiNot) { | 1764 TEST(SmiNot) { |
| 1765 v8::internal::V8::Initialize(NULL); |
| 1750 // Allocate an executable page of memory. | 1766 // Allocate an executable page of memory. |
| 1751 size_t actual_size; | 1767 size_t actual_size; |
| 1752 byte* buffer = | 1768 byte* buffer = |
| 1753 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, | 1769 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
| 1754 &actual_size, | 1770 &actual_size, |
| 1755 true)); | 1771 true)); |
| 1756 CHECK(buffer); | 1772 CHECK(buffer); |
| 1757 HandleScope handles; | 1773 HandleScope handles; |
| 1758 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1774 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1759 | 1775 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1835 __ incq(rax); | 1851 __ incq(rax); |
| 1836 __ cmpq(rdx, r8); | 1852 __ cmpq(rdx, r8); |
| 1837 __ j(not_equal, exit); | 1853 __ j(not_equal, exit); |
| 1838 | 1854 |
| 1839 __ incq(rax); | 1855 __ incq(rax); |
| 1840 } | 1856 } |
| 1841 } | 1857 } |
| 1842 | 1858 |
| 1843 | 1859 |
| 1844 TEST(SmiShiftLeft) { | 1860 TEST(SmiShiftLeft) { |
| 1861 v8::internal::V8::Initialize(NULL); |
| 1845 // Allocate an executable page of memory. | 1862 // Allocate an executable page of memory. |
| 1846 size_t actual_size; | 1863 size_t actual_size; |
| 1847 byte* buffer = | 1864 byte* buffer = |
| 1848 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 4, | 1865 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 4, |
| 1849 &actual_size, | 1866 &actual_size, |
| 1850 true)); | 1867 true)); |
| 1851 CHECK(buffer); | 1868 CHECK(buffer); |
| 1852 HandleScope handles; | 1869 HandleScope handles; |
| 1853 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1870 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1854 | 1871 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1940 __ cmpq(rcx, r11); | 1957 __ cmpq(rcx, r11); |
| 1941 __ j(not_equal, exit); | 1958 __ j(not_equal, exit); |
| 1942 | 1959 |
| 1943 __ addq(rax, Immediate(3)); | 1960 __ addq(rax, Immediate(3)); |
| 1944 } | 1961 } |
| 1945 } | 1962 } |
| 1946 } | 1963 } |
| 1947 | 1964 |
| 1948 | 1965 |
| 1949 TEST(SmiShiftLogicalRight) { | 1966 TEST(SmiShiftLogicalRight) { |
| 1967 v8::internal::V8::Initialize(NULL); |
| 1950 // Allocate an executable page of memory. | 1968 // Allocate an executable page of memory. |
| 1951 size_t actual_size; | 1969 size_t actual_size; |
| 1952 byte* buffer = | 1970 byte* buffer = |
| 1953 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 3, | 1971 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 3, |
| 1954 &actual_size, | 1972 &actual_size, |
| 1955 true)); | 1973 true)); |
| 1956 CHECK(buffer); | 1974 CHECK(buffer); |
| 1957 HandleScope handles; | 1975 HandleScope handles; |
| 1958 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 1976 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 1959 | 1977 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2008 | 2026 |
| 2009 __ cmpq(rdx, r8); | 2027 __ cmpq(rdx, r8); |
| 2010 __ j(not_equal, exit); | 2028 __ j(not_equal, exit); |
| 2011 | 2029 |
| 2012 __ incq(rax); | 2030 __ incq(rax); |
| 2013 } | 2031 } |
| 2014 } | 2032 } |
| 2015 | 2033 |
| 2016 | 2034 |
| 2017 TEST(SmiShiftArithmeticRight) { | 2035 TEST(SmiShiftArithmeticRight) { |
| 2036 v8::internal::V8::Initialize(NULL); |
| 2018 // Allocate an executable page of memory. | 2037 // Allocate an executable page of memory. |
| 2019 size_t actual_size; | 2038 size_t actual_size; |
| 2020 byte* buffer = | 2039 byte* buffer = |
| 2021 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, | 2040 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
| 2022 &actual_size, | 2041 &actual_size, |
| 2023 true)); | 2042 true)); |
| 2024 CHECK(buffer); | 2043 CHECK(buffer); |
| 2025 HandleScope handles; | 2044 HandleScope handles; |
| 2026 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 2045 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 2027 | 2046 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2071 __ incq(rax); | 2090 __ incq(rax); |
| 2072 __ PositiveSmiTimesPowerOfTwoToInteger64(rcx, rcx, power); | 2091 __ PositiveSmiTimesPowerOfTwoToInteger64(rcx, rcx, power); |
| 2073 __ cmpq(rdx, r8); | 2092 __ cmpq(rdx, r8); |
| 2074 __ j(not_equal, exit); | 2093 __ j(not_equal, exit); |
| 2075 __ incq(rax); | 2094 __ incq(rax); |
| 2076 } | 2095 } |
| 2077 } | 2096 } |
| 2078 | 2097 |
| 2079 | 2098 |
| 2080 TEST(PositiveSmiTimesPowerOfTwoToInteger64) { | 2099 TEST(PositiveSmiTimesPowerOfTwoToInteger64) { |
| 2081 v8::V8::Initialize(); | 2100 v8::internal::V8::Initialize(NULL); |
| 2082 // Allocate an executable page of memory. | 2101 // Allocate an executable page of memory. |
| 2083 size_t actual_size; | 2102 size_t actual_size; |
| 2084 byte* buffer = | 2103 byte* buffer = |
| 2085 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 4, | 2104 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 4, |
| 2086 &actual_size, | 2105 &actual_size, |
| 2087 true)); | 2106 true)); |
| 2088 CHECK(buffer); | 2107 CHECK(buffer); |
| 2089 HandleScope handles; | 2108 HandleScope handles; |
| 2090 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); | 2109 MacroAssembler assembler(buffer, static_cast<int>(actual_size)); |
| 2091 | 2110 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2111 | 2130 |
| 2112 CodeDesc desc; | 2131 CodeDesc desc; |
| 2113 masm->GetCode(&desc); | 2132 masm->GetCode(&desc); |
| 2114 // Call the function from C++. | 2133 // Call the function from C++. |
| 2115 int result = FUNCTION_CAST<F0>(buffer)(); | 2134 int result = FUNCTION_CAST<F0>(buffer)(); |
| 2116 CHECK_EQ(0, result); | 2135 CHECK_EQ(0, result); |
| 2117 } | 2136 } |
| 2118 | 2137 |
| 2119 | 2138 |
| 2120 TEST(OperandOffset) { | 2139 TEST(OperandOffset) { |
| 2140 v8::internal::V8::Initialize(NULL); |
| 2121 int data[256]; | 2141 int data[256]; |
| 2122 for (int i = 0; i < 256; i++) { data[i] = i * 0x01010101; } | 2142 for (int i = 0; i < 256; i++) { data[i] = i * 0x01010101; } |
| 2123 | 2143 |
| 2124 // Allocate an executable page of memory. | 2144 // Allocate an executable page of memory. |
| 2125 size_t actual_size; | 2145 size_t actual_size; |
| 2126 byte* buffer = | 2146 byte* buffer = |
| 2127 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, | 2147 static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
| 2128 &actual_size, | 2148 &actual_size, |
| 2129 true)); | 2149 true)); |
| 2130 CHECK(buffer); | 2150 CHECK(buffer); |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2467 CodeDesc desc; | 2487 CodeDesc desc; |
| 2468 masm->GetCode(&desc); | 2488 masm->GetCode(&desc); |
| 2469 // Call the function from C++. | 2489 // Call the function from C++. |
| 2470 int result = FUNCTION_CAST<F0>(buffer)(); | 2490 int result = FUNCTION_CAST<F0>(buffer)(); |
| 2471 CHECK_EQ(0, result); | 2491 CHECK_EQ(0, result); |
| 2472 } | 2492 } |
| 2473 | 2493 |
| 2474 | 2494 |
| 2475 | 2495 |
| 2476 #undef __ | 2496 #undef __ |
| OLD | NEW |