Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1402)

Unified Diff: test/cctest/test-macro-assembler-x64.cc

Issue 21014003: Optionally use 31-bits SMI value for 64-bit system (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed danno's comments Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/x64/macro-assembler-x64.cc ('K') | « test/cctest/test-log-stack-tracer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-macro-assembler-x64.cc
diff --git a/test/cctest/test-macro-assembler-x64.cc b/test/cctest/test-macro-assembler-x64.cc
index a2070a5ea8fa7cfe99dc1689e0415de6b5bee00e..75c166fed308bdf9e020712ec4f04816e224c827 100644
--- a/test/cctest/test-macro-assembler-x64.cc
+++ b/test/cctest/test-macro-assembler-x64.cc
@@ -758,6 +758,7 @@ static void SmiAddTest(MacroAssembler* masm,
int id,
int first,
int second) {
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, exit);
__ movl(rcx, Immediate(first));
__ Integer32ToSmi(rcx, rcx);
__ movl(rdx, Immediate(second));
@@ -766,12 +767,12 @@ static void SmiAddTest(MacroAssembler* masm,
__ Integer32ToSmi(r8, r8);
__ movl(rax, Immediate(id)); // Test number.
- __ SmiAdd(r9, rcx, rdx, exit);
+ __ SmiAdd(r9, rcx, rdx, wrapper);
__ cmpq(r9, r8);
__ j(not_equal, exit);
__ incq(rax);
- __ SmiAdd(rcx, rcx, rdx, exit); \
+ __ SmiAdd(rcx, rcx, rdx, wrapper);
__ cmpq(rcx, r8);
__ j(not_equal, exit);
@@ -791,12 +792,12 @@ static void SmiAddTest(MacroAssembler* masm,
__ Integer32ToSmi(rcx, rcx);
__ incq(rax);
- __ SmiAddConstant(r9, rcx, Smi::FromInt(second), exit);
+ __ SmiAddConstant(r9, rcx, Smi::FromInt(second), wrapper);
__ cmpq(r9, r8);
__ j(not_equal, exit);
__ incq(rax);
- __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), exit);
+ __ SmiAddConstant(rcx, rcx, Smi::FromInt(second), wrapper);
__ cmpq(rcx, r8);
__ j(not_equal, exit);
}
@@ -847,17 +848,18 @@ static void SmiSubTest(MacroAssembler* masm,
int id,
int first,
int second) {
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, exit);
__ Move(rcx, Smi::FromInt(first));
__ Move(rdx, Smi::FromInt(second));
__ Move(r8, Smi::FromInt(first - second));
__ movl(rax, Immediate(id)); // Test 0.
- __ SmiSub(r9, rcx, rdx, exit);
+ __ SmiSub(r9, rcx, rdx, wrapper);
__ cmpq(r9, r8);
__ j(not_equal, exit);
__ incq(rax); // Test 1.
- __ SmiSub(rcx, rcx, rdx, exit);
+ __ SmiSub(rcx, rcx, rdx, wrapper);
__ cmpq(rcx, r8);
__ j(not_equal, exit);
@@ -876,16 +878,17 @@ static void SmiSubTest(MacroAssembler* masm,
__ Move(rcx, Smi::FromInt(first));
__ incq(rax); // Test 4.
- __ SmiSubConstant(r9, rcx, Smi::FromInt(second), exit);
+ __ SmiSubConstant(r9, rcx, Smi::FromInt(second), wrapper);
__ cmpq(r9, r8);
__ j(not_equal, exit);
__ incq(rax); // Test 5.
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), exit);
+ __ SmiSubConstant(rcx, rcx, Smi::FromInt(second), wrapper);
__ cmpq(rcx, r8);
__ j(not_equal, exit);
}
+
static void SmiSubOverflowTest(MacroAssembler* masm,
Label* exit,
int id,
@@ -901,7 +904,8 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
__ Move(rdx, Smi::FromInt(y_min));
{
Label overflow_ok;
- __ SmiSub(r9, rcx, rdx, &overflow_ok);
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
+ __ SmiSub(r9, rcx, rdx, wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -911,8 +915,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSub(rcx, rcx, rdx, &overflow_ok);
+ __ SmiSub(rcx, rcx, rdx, wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -923,8 +928,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
__ movq(rcx, r11);
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), &overflow_ok);
+ __ SmiSubConstant(r9, rcx, Smi::FromInt(y_min), wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -934,8 +940,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), &overflow_ok);
+ __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_min), wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -947,8 +954,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSub(r9, rcx, rdx, &overflow_ok);
+ __ SmiSub(r9, rcx, rdx, wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -958,8 +966,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSub(rcx, rcx, rdx, &overflow_ok);
+ __ SmiSub(rcx, rcx, rdx, wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -970,8 +979,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
__ movq(rcx, r11);
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSubConstant(r9, rcx, Smi::FromInt(y_max), &overflow_ok);
+ __ SmiSubConstant(r9, rcx, Smi::FromInt(y_max), wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -981,8 +991,9 @@ static void SmiSubOverflowTest(MacroAssembler* masm,
{
Label overflow_ok;
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, &overflow_ok);
__ incq(rax);
- __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), &overflow_ok);
+ __ SmiSubConstant(rcx, rcx, Smi::FromInt(y_max), wrapper);
__ jmp(exit);
__ bind(&overflow_ok);
__ incq(rax);
@@ -1041,7 +1052,6 @@ TEST(SmiSub) {
}
-
void TestSmiMul(MacroAssembler* masm, Label* exit, int id, int x, int y) {
int64_t result = static_cast<int64_t>(x) * static_cast<int64_t>(y);
bool negative_zero = (result == 0) && (x < 0 || y < 0);
@@ -1827,55 +1837,94 @@ void TestSmiShiftLeft(MacroAssembler* masm, Label* exit, int id, int x) {
const int shifts[] = { 0, 1, 7, 24, kSmiValueSize - 1};
const int kNumShifts = 5;
__ movl(rax, Immediate(id));
+ MacroAssembler::StrictSmiInstructionWrapper wrapper(masm, exit);
for (int i = 0; i < kNumShifts; i++) {
// rax == id + i * 10.
int shift = shifts[i];
int result = x << shift;
- CHECK(Smi::IsValid(result));
- __ Move(r8, Smi::FromInt(result));
- __ Move(rcx, Smi::FromInt(x));
- __ SmiShiftLeftConstant(r9, rcx, shift);
+ if (Smi::IsValid(result)) {
+ __ Move(r8, Smi::FromInt(result));
+ __ Move(rcx, Smi::FromInt(x));
+ __ SmiShiftLeftConstant(r9, rcx, shift, wrapper);
- __ incq(rax);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
+ __ incq(rax);
+ __ cmpq(r9, r8);
+ __ j(not_equal, exit);
- __ incq(rax);
- __ Move(rcx, Smi::FromInt(x));
- __ SmiShiftLeftConstant(rcx, rcx, shift);
+ __ incq(rax);
+ __ Move(rcx, Smi::FromInt(x));
+ if (kSmiValueSize == 32) {
+ __ SmiShiftLeftConstant(rcx, rcx, shift, wrapper);
+ } else {
+ ASSERT(kSmiValueSize == 31);
+ __ SmiShiftLeftConstant(r9, rcx, shift, wrapper);
+ __ movq(rcx, r9);
+ }
- __ incq(rax);
- __ cmpq(rcx, r8);
- __ j(not_equal, exit);
+ __ incq(rax);
+ __ cmpq(rcx, r8);
+ __ j(not_equal, exit);
- __ incq(rax);
- __ Move(rdx, Smi::FromInt(x));
- __ Move(rcx, Smi::FromInt(shift));
- __ SmiShiftLeft(r9, rdx, rcx);
+ __ incq(rax);
+ __ Move(rdx, Smi::FromInt(x));
+ __ Move(rcx, Smi::FromInt(shift));
+ __ SmiShiftLeft(r9, rdx, rcx, exit);
- __ incq(rax);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
+ __ incq(rax);
+ __ cmpq(r9, r8);
+ __ j(not_equal, exit);
- __ incq(rax);
- __ Move(rdx, Smi::FromInt(x));
- __ Move(r11, Smi::FromInt(shift));
- __ SmiShiftLeft(r9, rdx, r11);
+ __ incq(rax);
+ __ Move(rdx, Smi::FromInt(x));
+ __ Move(r11, Smi::FromInt(shift));
+ __ SmiShiftLeft(r9, rdx, r11, exit);
- __ incq(rax);
- __ cmpq(r9, r8);
- __ j(not_equal, exit);
+ __ incq(rax);
+ __ cmpq(r9, r8);
+ __ j(not_equal, exit);
- __ incq(rax);
- __ Move(rdx, Smi::FromInt(x));
- __ Move(r11, Smi::FromInt(shift));
- __ SmiShiftLeft(rdx, rdx, r11);
+ __ incq(rax);
+ __ Move(rdx, Smi::FromInt(x));
+ __ Move(r11, Smi::FromInt(shift));
+ if (kSmiValueSize == 32) {
+ __ SmiShiftLeft(rdx, rdx, r11, exit);
+ } else {
+ __ SmiShiftLeft(r9, rdx, r11, exit);
+ __ movq(rdx, r9);
+ }
+ __ incq(rax);
+ __ cmpq(rdx, r8);
+ __ j(not_equal, exit);
- __ incq(rax);
- __ cmpq(rdx, r8);
- __ j(not_equal, exit);
+ __ incq(rax);
+ } else {
+ __ Move(rdx, Smi::FromInt(x));
+ __ Move(rcx, Smi::FromInt(shift));
+ __ movq(r11, rcx);
+ Label fail_ok1;
+ __ SmiShiftLeft(r9, rdx, rcx, &fail_ok1);
+ __ jmp(exit);
+ __ bind(&fail_ok1);
- __ incq(rax);
+ __ incq(rax);
+ __ cmpq(rcx, r11);
+ __ j(not_equal, exit);
+
+ __ incq(rax);
+ __ Move(rcx, Smi::FromInt(x));
+ __ Move(rdx, Smi::FromInt(shift));
+ __ movq(r11, rcx);
+ Label fail_ok2;
+ __ SmiShiftLeft(r9, rcx, rdx, &fail_ok2);
+ __ jmp(exit);
+ __ bind(&fail_ok2);
+
+ __ incq(rax);
+ __ cmpq(rcx, r11);
+ __ j(not_equal, exit);
+
+ __ addq(rax, Immediate(7));
+ }
}
}
« src/x64/macro-assembler-x64.cc ('K') | « test/cctest/test-log-stack-tracer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698