Home | History | Annotate | Download | only in cctest

Lines Matching refs:Smi

75 using v8::internal::Smi;
92 TEST(Smi) {
93 // Check that C++ Smi operations work as expected.
96 Smi::kMaxValue, static_cast<int64_t>(Smi::kMaxValue) + 1,
97 Smi::kMinValue, static_cast<int64_t>(Smi::kMinValue) - 1
102 bool is_valid = Smi::IsValid(number);
103 bool is_in_range = number >= Smi::kMinValue && number <= Smi::kMaxValue;
106 Smi* smi_from_intptr = Smi::FromIntptr(number);
108 Smi* smi_from_int = Smi::FromInt(static_cast<int32_t>(number));
118 static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi* value) {
120 __ Move(rcx, Smi::FromInt(0));
121 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(0)));
127 // Test that we can move a Smi value literally into a register.
141 TestMoveSmi(masm, &exit, 1, Smi::FromInt(0));
142 TestMoveSmi(masm, &exit, 2, Smi::FromInt(127));
143 TestMoveSmi(masm, &exit, 3, Smi::FromInt(128));
144 TestMoveSmi(masm, &exit, 4, Smi::FromInt(255));
145 TestMoveSmi(masm, &exit, 5, Smi::FromInt(256));
146 TestMoveSmi(masm, &exit, 6, Smi::FromInt(Smi::kMaxValue));
147 TestMoveSmi(masm, &exit, 7, Smi::FromInt(-1));
148 TestMoveSmi(masm, &exit, 8, Smi::FromInt(-128));
149 TestMoveSmi(masm, &exit, 9, Smi::FromInt(-129));
150 TestMoveSmi(masm, &exit, 10, Smi::FromInt(-256));
151 TestMoveSmi(masm, &exit, 11, Smi::FromInt(-257));
152 TestMoveSmi(masm, &exit, 12, Smi::FromInt(Smi::kMinValue));
167 __ Move(rcx, Smi::FromInt(x));
169 __ Move(rdx, Smi::FromInt(y));
234 TestSmiCompare(masm, &exit, 0x80, 0, Smi::kMinValue);
235 TestSmiCompare(masm, &exit, 0x90, Smi::kMinValue, 0);
236 TestSmiCompare(masm, &exit, 0xA0, 0, Smi::kMaxValue);
237 TestSmiCompare(masm, &exit, 0xB0, Smi::kMaxValue, 0);
238 TestSmiCompare(masm, &exit, 0xC0, -1, Smi::kMinValue);
239 TestSmiCompare(masm, &exit, 0xD0, Smi::kMinValue, -1);
240 TestSmiCompare(masm, &exit, 0xE0, -1, Smi::kMaxValue);
241 TestSmiCompare(masm, &exit, 0xF0, Smi::kMaxValue, -1);
242 TestSmiCompare(masm, &exit, 0x100, Smi::kMinValue, Smi::kMinValue);
243 TestSmiCompare(masm, &exit, 0x110, Smi::kMinValue, Smi::kMaxValue);
244 TestSmiCompare(masm, &exit, 0x120, Smi::kMaxValue, Smi::kMinValue);
245 TestSmiCompare(masm, &exit, 0x130, Smi::kMaxValue, Smi::kMaxValue);
277 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(0)));
284 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(1024)));
291 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(-1)));
296 __ movl(rcx, Immediate(Smi::kMaxValue));
298 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMaxValue)));
303 __ movl(rcx, Immediate(Smi::kMinValue));
305 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMinValue)));
314 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(0)));
321 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(1024)));
328 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(-1)));
333 __ movl(rcx, Immediate(Smi::kMaxValue));
335 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMaxValue)));
340 __ movl(rcx, Immediate(Smi::kMinValue));
342 __ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(Smi::kMinValue)));
365 ASSERT(Smi::IsValid(result));
367 __ Move(r8, Smi::FromInt(static_cast<int>(result)));
399 int64_t twice_max = static_cast<int64_t>(Smi::kMaxValue) * 2;
404 TestI64PlusConstantToSmi(masm, &exit, 0x40, Smi::kMaxValue - 5, 5);
405 TestI64PlusConstantToSmi(masm, &exit, 0x50, Smi::kMinValue + 5, 5);
406 TestI64PlusConstantToSmi(masm, &exit, 0x60, twice_max, -Smi::kMaxValue);
407 TestI64PlusConstantToSmi(masm, &exit, 0x70, -twice_max, Smi::kMaxValue);
408 TestI64PlusConstantToSmi(masm, &exit, 0x80, 0, Smi::kMinValue);
409 TestI64PlusConstantToSmi(masm, &exit, 0x90, 0, Smi::kMaxValue);
410 TestI64PlusConstantToSmi(masm, &exit, 0xA0, Smi::kMinValue, 0);
411 TestI64PlusConstantToSmi(masm, &exit, 0xB0, Smi::kMaxValue, 0);
412 TestI64PlusConstantToSmi(masm, &exit, 0xC0, twice_max, Smi::kMinValue);
467 __ movl(rcx, Immediate(Smi::kMaxValue));
478 __ movl(rcx, Immediate(Smi::kMinValue));
498 cond = masm->CheckPositiveSmi(rcx); // "zero" non-smi.
508 Smi::kMinValue));
510 cond = masm->CheckPositiveSmi(rcx); // Most negative smi is not positive.
515 cond = masm->CheckPositiveSmi(rcx); // "Negative" non-smi.
519 __ movq(rcx, Immediate(Smi::kMaxValue));
521 cond = masm->CheckPositiveSmi(rcx); // Most positive smi is positive.
526 cond = masm->CheckPositiveSmi(rcx); // "Positive" non-smi.
532 __ movq(rcx, Immediate(Smi::kMaxValue));
544 __ movq(rcx, Immediate(Smi::kMinValue));
550 __ movq(rcx, Immediate(Smi::kMinValue + 1));
558 __ movq(rcx, Immediate(Smi::kMaxValue));
560 __ movq(rdx, Immediate(Smi::kMinValue));
600 __ movq(rcx, Immediate(Smi::kMaxValue));
605 __ movq(rcx, Immediate(Smi::kMinValue));
625 __ Move(rcx, Smi::FromInt(x));
627 if (x == Smi::kMinValue || x == 0) {
646 __ Move(r8, Smi::FromInt(result));
690 TestSmiNeg(masm, &exit, 0x60, Smi::kMinValue);
691 TestSmiNeg(masm, &exit, 0x70, Smi::kMaxValue);
692 TestSmiNeg(masm, &exit, 0x80, -Smi::kMaxValue);
734 __ SmiAddConstant(r9, rcx, Smi::FromInt(second));
738 __ SmiAddConstant(rcx, rcx, Smi::FromInt(second));
746 __ SmiAddConstant(r9, rcx, Smi::FromInt(second), exit);
751 __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), exit);
776 SmiAddTest(masm, &exit, 0x60, Smi::kMinValue, 5);
777 SmiAddTest(masm, &exit, 0x70, Smi::kMaxValue, -5);
778 SmiAddTest(masm, &exit, 0x80, Smi::kMaxValue, Smi::kMinValue);
797 __ Move(rcx, Smi::FromInt(first));
798 __ Move(rdx, Smi::FromInt(second));
799 __ Move(r8, Smi::FromInt(first - second));
811 __ Move(rcx, Smi::FromInt(first));
814 __ SmiSubConstant(r9, rcx, Smi::FromInt(second));
819 __ SmiSubConstant(rcx, rcx, Smi::FromInt(second));
823 __ Move(rcx, Smi::FromInt(first));
826 __ SmiSubConstant(r9, rcx, Smi::FromInt(second), exit);
831 __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), exit);
840 // Subtracts a Smi from x so that the subtraction overflows.
841 ASSERT(x != -1); // Can't overflow by subtracting a Smi.
842 int y_max = (x < 0) ? (Smi::kMaxValue + 0) : (Smi::kMinValue + 0);
843 int y_min = (x < 0) ? (Smi::kMaxValue + x + 2) : (Smi::kMinValue + x);
846 __ Move(rcx, Smi::FromInt(x));
847 __ movq(r11, rcx); // Store original Smi value of x in r11.
848 __ Move(rdx, Smi::FromInt(y_min));
874 __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), &overflow_ok);
885 __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), &overflow_ok);
893 __ Move(rdx, Smi::FromInt(y_max));
921 __ SmiSubConstant(r9, rcx, Smi::FromInt(y_max), &overflow_ok);
932 __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), &overflow_ok);
962 SmiSubTest(masm, &exit, 0x60, Smi::kMinValue, -5);
963 SmiSubTest(masm, &exit, 0x70, Smi::kMaxValue, 5);
964 SmiSubTest(masm, &exit, 0x80, -Smi::kMaxValue, Smi::kMinValue);
965 SmiSubTest(masm, &exit, 0x90, 0, Smi::kMaxValue);
969 SmiSubOverflowTest(masm, &exit, 0xC0, Smi::kMaxValue);
972 SmiSubOverflowTest(masm, &exit, 0xF0, Smi::kMinValue);
991 __ Move(rcx, Smi::FromInt(x));
993 __ Move(rdx, Smi::FromInt(y));
994 if (Smi::IsValid(result) && !negative_zero) {
996 __ Move(r8, Smi::FromIntptr(result));
1051 TestSmiMul(masm, &exit, 0x80, Smi::kMaxValue, -1);
1052 TestSmiMul(masm, &exit, 0x90, Smi::kMaxValue, -2);
1053 TestSmiMul(masm, &exit, 0xa0, Smi::kMaxValue, 2);
1054 TestSmiMul(masm, &exit, 0xb0, (Smi::kMaxValue / 2), 2);
1055 TestSmiMul(masm, &exit, 0xc0, (Smi::kMaxValue / 2) + 1, 2);
1056 TestSmiMul(masm, &exit, 0xd0, (Smi::kMinValue / 2), 2);
1057 TestSmiMul(masm, &exit, 0xe0, (Smi::kMinValue / 2) - 1, 2);
1075 bool overflow = (x == Smi::kMinValue && y < 0); // Safe approx. used.
1077 bool overflow = (x == Smi::kMinValue && y == -1);
1080 __ Move(r11, Smi::FromInt(x));
1081 __ Move(r12, Smi::FromInt(y));
1087 __ Move(r8, Smi::FromInt(result));
1096 __ Move(r12, Smi::FromInt(y));
1160 TestSmiDiv(masm, &exit, 0xc0, 1, Smi::kMaxValue);
1161 TestSmiDiv(masm, &exit, 0xd0, -1, Smi::kMaxValue);
1162 TestSmiDiv(masm, &exit, 0xe0, Smi::kMaxValue, 1);
1163 TestSmiDiv(masm, &exit, 0xf0, Smi::kMaxValue, Smi::kMaxValue);
1164 TestSmiDiv(masm, &exit, 0x100, Smi::kMaxValue, -Smi::kMaxValue);
1165 TestSmiDiv(masm, &exit, 0x110, Smi::kMaxValue, -1);
1166 TestSmiDiv(masm, &exit, 0x120, Smi::kMinValue, 1);
1167 TestSmiDiv(masm, &exit, 0x130, Smi::kMinValue, Smi::kMinValue);
1168 TestSmiDiv(masm, &exit, 0x140, Smi::kMinValue, -1);
1187 bool division_overflow = (x == Smi::kMinValue) && (y == -1);
1190 __ Move(rcx, Smi::FromInt(x));
1192 __ Move(r12, Smi::FromInt(y));
1197 __ Move(r8, Smi::FromInt(result));
1267 TestSmiMod(masm, &exit, 0xc0, 1, Smi::kMaxValue);
1268 TestSmiMod(masm, &exit, 0xd0, -1, Smi::kMaxValue);
1269 TestSmiMod(masm, &exit, 0xe0, Smi::kMaxValue, 1);
1270 TestSmiMod(masm, &exit, 0xf0, Smi::kMaxValue, Smi::kMaxValue);
1271 TestSmiMod(masm, &exit, 0x100, Smi::kMaxValue, -Smi::kMaxValue);
1272 TestSmiMod(masm, &exit, 0x110, Smi::kMaxValue, -1);
1273 TestSmiMod(masm, &exit, 0x120, Smi::kMinValue, 1);
1274 TestSmiMod(masm, &exit, 0x130, Smi::kMinValue, Smi::kMinValue);
1275 TestSmiMod(masm, &exit, 0x140, Smi::kMinValue, -1);
1296 __ Move(rcx, Smi::FromInt(x));
1304 __ Move(rcx, Smi::FromInt(x));
1313 __ Move(rcx, Smi::FromInt(x));
1321 __ Move(rcx, Smi::FromInt(x));
1351 TestSmiIndex(masm, &exit, 0x50, Smi::kMaxValue);
1367 __ Move(rcx, Smi::FromInt(x));
1368 __ Move(rdx, Smi::FromInt(y));
1377 __ Move(rcx, Smi::FromInt(x));
1378 __ Move(rdx, Smi::FromInt(y));
1388 __ Move(rcx, Smi::FromInt(x));
1389 __ Move(rdx, Smi::FromInt(y));
1420 TestSelectNonSmi(masm, &exit, 0x80, Smi::kMinValue, Smi::kMaxValue);
1421 TestSelectNonSmi(masm, &exit, 0x90, Smi::kMinValue, Smi::kMinValue);
1440 __ Move(rcx, Smi::FromInt(x));
1442 __ Move(rdx, Smi::FromInt(y));
1443 __ Move(r8, Smi::FromInt(result));
1459 __ SmiAndConstant(r9, rcx, Smi::FromInt(y));
1468 __ SmiAndConstant(rcx, rcx, Smi::FromInt(y));
1496 TestSmiAnd(masm, &exit, 0x80, Smi::kMinValue, Smi::kMaxValue);
1497 TestSmiAnd(masm, &exit, 0x90, Smi::kMinValue, Smi::kMinValue);
1498 TestSmiAnd(masm, &exit, 0xA0, Smi::kMinValue, -1);
1499 TestSmiAnd(masm, &exit, 0xB0, Smi::kMinValue, -1);
1518 __ Move(rcx, Smi::FromInt(x));
1520 __ Move(rdx, Smi::FromInt(y));
1521 __ Move(r8, Smi::FromInt(result));
1537 __ SmiOrConstant(r9, rcx, Smi::FromInt(y));
1546 __ SmiOrConstant(rcx, rcx, Smi::FromInt(y));
1574 TestSmiOr(masm, &exit, 0x80, Smi::kMinValue, Smi::kMaxValue);
1575 TestSmiOr(masm, &exit, 0x90, Smi::kMinValue, Smi::kMinValue);
1576 TestSmiOr(masm, &exit, 0xA0, Smi::kMinValue, -1);
1579 TestSmiOr(masm, &exit, 0xD0, Smi::kMinValue, -1);
1598 __ Move(rcx, Smi::FromInt(x));
1600 __ Move(rdx, Smi::FromInt(y));
1601 __ Move(r8, Smi::FromInt(result));
1617 __ SmiXorConstant(r9, rcx, Smi::FromInt(y));
1626 __ SmiXorConstant(rcx, rcx, Smi::FromInt(y));
1654 TestSmiXor(masm, &exit, 0x80, Smi::kMinValue, Smi::kMaxValue);
1655 TestSmiXor(masm, &exit, 0x90, Smi::kMinValue, Smi::kMinValue);
1656 TestSmiXor(masm, &exit, 0xA0, Smi::kMinValue, -1);
1659 TestSmiXor(masm, &exit, 0xD0, Smi::kMinValue, -1);
1677 __ Move(r8, Smi::FromInt(result));
1678 __ Move(rcx, Smi::FromInt(x));
1716 TestSmiNot(masm, &exit, 0x60, Smi::kMinValue);
1717 TestSmiNot(masm, &exit, 0x70, Smi
1740 if (Smi::IsValid(result)) {
1741 __ Move(r8, Smi::FromInt(result));
1742 __ Move(rcx, Smi::FromInt(x));
1750 __ Move(rcx, Smi::FromInt(x));
1758 __ Move(rdx, Smi::FromInt(x));
1759 __ Move(rcx, Smi::FromInt(shift));
1767 __ Move(rdx, Smi::FromInt(x));
1768 __ Move(r11, Smi::FromInt(shift));
1776 __ Move(rdx, Smi::FromInt(x));
1777 __ Move(r11, Smi::FromInt(shift));
1788 __ Move(rcx, Smi::FromInt(x));
1809 __ Move(r8, Smi::FromInt(shift));
1820 __ Move(r8, Smi::FromInt(shift));
1856 TestSmiShiftLeft(masm, &exit, 0x110, Smi::kMaxValue);
1857 TestSmiShiftLeft(masm, &exit, 0x150, Smi::kMinValue);
1882 if (Smi::IsValid(result)) {
1883 __ Move(r8, Smi::FromInt(static_cast<int>(result)));
1884 __ Move(rcx, Smi::FromInt(x));
1892 __ Move(rdx, Smi::FromInt(x));
1893 __ Move(rcx, Smi::FromInt(shift));
1901 __ Move(rdx, Smi::FromInt(x));
1902 __ Move(r11, Smi::FromInt(shift));
1913 __ Move(rcx, Smi::FromInt(x));
1924 __ Move(r8, Smi::FromInt(shift));
1959 TestSmiShiftLogicalRight(masm, &exit, 0x90, Smi::kMaxValue);
1960 TestSmiShiftLogicalRight(masm, &exit, 0xB0, Smi::kMinValue);
1986 __ Move(r8, Smi::FromInt(result));
1987 __ Move(rcx, Smi::FromInt(x));
1994 __ Move(rdx, Smi::FromInt(x));
1995 __ Move(r11, Smi::FromInt(shift));
2025 TestSmiShiftArithmeticRight(masm, &exit, 0x50, Smi::kMaxValue);
2026 TestSmiShiftArithmeticRight(masm, &exit, 0x60, Smi::kMinValue);
2050 __ Move(rcx, Smi::FromInt(x));
2090 TestPositiveSmiPowerUp(masm, &exit, 0x140, Smi::kMaxValue);