OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 if ((regs & (1 << i)) != 0) { | 846 if ((regs & (1 << i)) != 0) { |
847 lw(ToRegister(i), MemOperand(sp, stack_offset)); | 847 lw(ToRegister(i), MemOperand(sp, stack_offset)); |
848 stack_offset += kPointerSize; | 848 stack_offset += kPointerSize; |
849 } | 849 } |
850 } | 850 } |
851 addiu(sp, sp, stack_offset); | 851 addiu(sp, sp, stack_offset); |
852 } | 852 } |
853 | 853 |
854 | 854 |
855 void MacroAssembler::MultiPushFPU(RegList regs) { | 855 void MacroAssembler::MultiPushFPU(RegList regs) { |
856 CpuFeatures::Scope scope(FPU); | 856 CpuFeatureScope scope(this, FPU); |
857 int16_t num_to_push = NumberOfBitsSet(regs); | 857 int16_t num_to_push = NumberOfBitsSet(regs); |
858 int16_t stack_offset = num_to_push * kDoubleSize; | 858 int16_t stack_offset = num_to_push * kDoubleSize; |
859 | 859 |
860 Subu(sp, sp, Operand(stack_offset)); | 860 Subu(sp, sp, Operand(stack_offset)); |
861 for (int16_t i = kNumRegisters - 1; i >= 0; i--) { | 861 for (int16_t i = kNumRegisters - 1; i >= 0; i--) { |
862 if ((regs & (1 << i)) != 0) { | 862 if ((regs & (1 << i)) != 0) { |
863 stack_offset -= kDoubleSize; | 863 stack_offset -= kDoubleSize; |
864 sdc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); | 864 sdc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); |
865 } | 865 } |
866 } | 866 } |
867 } | 867 } |
868 | 868 |
869 | 869 |
870 void MacroAssembler::MultiPushReversedFPU(RegList regs) { | 870 void MacroAssembler::MultiPushReversedFPU(RegList regs) { |
871 CpuFeatures::Scope scope(FPU); | 871 CpuFeatureScope scope(this, FPU); |
872 int16_t num_to_push = NumberOfBitsSet(regs); | 872 int16_t num_to_push = NumberOfBitsSet(regs); |
873 int16_t stack_offset = num_to_push * kDoubleSize; | 873 int16_t stack_offset = num_to_push * kDoubleSize; |
874 | 874 |
875 Subu(sp, sp, Operand(stack_offset)); | 875 Subu(sp, sp, Operand(stack_offset)); |
876 for (int16_t i = 0; i < kNumRegisters; i++) { | 876 for (int16_t i = 0; i < kNumRegisters; i++) { |
877 if ((regs & (1 << i)) != 0) { | 877 if ((regs & (1 << i)) != 0) { |
878 stack_offset -= kDoubleSize; | 878 stack_offset -= kDoubleSize; |
879 sdc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); | 879 sdc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); |
880 } | 880 } |
881 } | 881 } |
882 } | 882 } |
883 | 883 |
884 | 884 |
885 void MacroAssembler::MultiPopFPU(RegList regs) { | 885 void MacroAssembler::MultiPopFPU(RegList regs) { |
886 CpuFeatures::Scope scope(FPU); | 886 CpuFeatureScope scope(this, FPU); |
887 int16_t stack_offset = 0; | 887 int16_t stack_offset = 0; |
888 | 888 |
889 for (int16_t i = 0; i < kNumRegisters; i++) { | 889 for (int16_t i = 0; i < kNumRegisters; i++) { |
890 if ((regs & (1 << i)) != 0) { | 890 if ((regs & (1 << i)) != 0) { |
891 ldc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); | 891 ldc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); |
892 stack_offset += kDoubleSize; | 892 stack_offset += kDoubleSize; |
893 } | 893 } |
894 } | 894 } |
895 addiu(sp, sp, stack_offset); | 895 addiu(sp, sp, stack_offset); |
896 } | 896 } |
897 | 897 |
898 | 898 |
899 void MacroAssembler::MultiPopReversedFPU(RegList regs) { | 899 void MacroAssembler::MultiPopReversedFPU(RegList regs) { |
900 CpuFeatures::Scope scope(FPU); | 900 CpuFeatureScope scope(this, FPU); |
901 int16_t stack_offset = 0; | 901 int16_t stack_offset = 0; |
902 | 902 |
903 for (int16_t i = kNumRegisters - 1; i >= 0; i--) { | 903 for (int16_t i = kNumRegisters - 1; i >= 0; i--) { |
904 if ((regs & (1 << i)) != 0) { | 904 if ((regs & (1 << i)) != 0) { |
905 ldc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); | 905 ldc1(FPURegister::from_code(i), MemOperand(sp, stack_offset)); |
906 stack_offset += kDoubleSize; | 906 stack_offset += kDoubleSize; |
907 } | 907 } |
908 } | 908 } |
909 addiu(sp, sp, stack_offset); | 909 addiu(sp, sp, stack_offset); |
910 } | 910 } |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 }; | 1158 }; |
1159 } | 1159 } |
1160 | 1160 |
1161 if (bd == PROTECT) { | 1161 if (bd == PROTECT) { |
1162 nop(); | 1162 nop(); |
1163 } | 1163 } |
1164 } | 1164 } |
1165 | 1165 |
1166 | 1166 |
1167 void MacroAssembler::Move(FPURegister dst, double imm) { | 1167 void MacroAssembler::Move(FPURegister dst, double imm) { |
1168 ASSERT(CpuFeatures::IsEnabled(FPU)); | 1168 ASSERT(IsEnabled(FPU)); |
1169 static const DoubleRepresentation minus_zero(-0.0); | 1169 static const DoubleRepresentation minus_zero(-0.0); |
1170 static const DoubleRepresentation zero(0.0); | 1170 static const DoubleRepresentation zero(0.0); |
1171 DoubleRepresentation value(imm); | 1171 DoubleRepresentation value(imm); |
1172 // Handle special values first. | 1172 // Handle special values first. |
1173 bool force_load = dst.is(kDoubleRegZero); | 1173 bool force_load = dst.is(kDoubleRegZero); |
1174 if (value.bits == zero.bits && !force_load) { | 1174 if (value.bits == zero.bits && !force_load) { |
1175 mov_d(dst, kDoubleRegZero); | 1175 mov_d(dst, kDoubleRegZero); |
1176 } else if (value.bits == minus_zero.bits && !force_load) { | 1176 } else if (value.bits == minus_zero.bits && !force_load) { |
1177 neg_d(dst, kDoubleRegZero); | 1177 neg_d(dst, kDoubleRegZero); |
1178 } else { | 1178 } else { |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1338 if (!CpuFeatures::IsSupported(FPU)) { | 1338 if (!CpuFeatures::IsSupported(FPU)) { |
1339 // We have a shifted exponent between 0 and 30 in scratch2. | 1339 // We have a shifted exponent between 0 and 30 in scratch2. |
1340 srl(dest, scratch2, HeapNumber::kExponentShift); | 1340 srl(dest, scratch2, HeapNumber::kExponentShift); |
1341 // We now have the exponent in dest. Subtract from 30 to get | 1341 // We now have the exponent in dest. Subtract from 30 to get |
1342 // how much to shift down. | 1342 // how much to shift down. |
1343 li(at, Operand(30)); | 1343 li(at, Operand(30)); |
1344 subu(dest, at, dest); | 1344 subu(dest, at, dest); |
1345 } | 1345 } |
1346 bind(&right_exponent); | 1346 bind(&right_exponent); |
1347 if (CpuFeatures::IsSupported(FPU)) { | 1347 if (CpuFeatures::IsSupported(FPU)) { |
1348 CpuFeatures::Scope scope(FPU); | 1348 CpuFeatureScope scope(this, FPU); |
1349 // MIPS FPU instructions implementing double precision to integer | 1349 // MIPS FPU instructions implementing double precision to integer |
1350 // conversion using round to zero. Since the FP value was qualified | 1350 // conversion using round to zero. Since the FP value was qualified |
1351 // above, the resulting integer should be a legal int32. | 1351 // above, the resulting integer should be a legal int32. |
1352 // The original 'Exponent' word is still in scratch. | 1352 // The original 'Exponent' word is still in scratch. |
1353 lwc1(double_scratch, FieldMemOperand(source, HeapNumber::kMantissaOffset)); | 1353 lwc1(double_scratch, FieldMemOperand(source, HeapNumber::kMantissaOffset)); |
1354 mtc1(scratch, FPURegister::from_code(double_scratch.code() + 1)); | 1354 mtc1(scratch, FPURegister::from_code(double_scratch.code() + 1)); |
1355 trunc_w_d(double_scratch, double_scratch); | 1355 trunc_w_d(double_scratch, double_scratch); |
1356 mfc1(dest, double_scratch); | 1356 mfc1(dest, double_scratch); |
1357 } else { | 1357 } else { |
1358 // On entry, dest has final downshift, scratch has original sign/exp/mant. | 1358 // On entry, dest has final downshift, scratch has original sign/exp/mant. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1399 DoubleRegister double_input, | 1399 DoubleRegister double_input, |
1400 Register scratch, | 1400 Register scratch, |
1401 DoubleRegister double_scratch, | 1401 DoubleRegister double_scratch, |
1402 Register except_flag, | 1402 Register except_flag, |
1403 CheckForInexactConversion check_inexact) { | 1403 CheckForInexactConversion check_inexact) { |
1404 ASSERT(!result.is(scratch)); | 1404 ASSERT(!result.is(scratch)); |
1405 ASSERT(!double_input.is(double_scratch)); | 1405 ASSERT(!double_input.is(double_scratch)); |
1406 ASSERT(!except_flag.is(scratch)); | 1406 ASSERT(!except_flag.is(scratch)); |
1407 | 1407 |
1408 ASSERT(CpuFeatures::IsSupported(FPU)); | 1408 ASSERT(CpuFeatures::IsSupported(FPU)); |
1409 CpuFeatures::Scope scope(FPU); | 1409 CpuFeatureScope scope(this, FPU); |
1410 Label done; | 1410 Label done; |
1411 | 1411 |
1412 // Clear the except flag (0 = no exception) | 1412 // Clear the except flag (0 = no exception) |
1413 mov(except_flag, zero_reg); | 1413 mov(except_flag, zero_reg); |
1414 | 1414 |
1415 // Test for values that can be exactly represented as a signed 32-bit integer. | 1415 // Test for values that can be exactly represented as a signed 32-bit integer. |
1416 cvt_w_d(double_scratch, double_input); | 1416 cvt_w_d(double_scratch, double_input); |
1417 mfc1(result, double_scratch); | 1417 mfc1(result, double_scratch); |
1418 cvt_d_w(double_scratch, double_scratch); | 1418 cvt_d_w(double_scratch, double_scratch); |
1419 BranchF(&done, NULL, eq, double_input, double_scratch); | 1419 BranchF(&done, NULL, eq, double_input, double_scratch); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1541 bind(&done); | 1541 bind(&done); |
1542 } | 1542 } |
1543 | 1543 |
1544 | 1544 |
1545 void MacroAssembler::EmitECMATruncate(Register result, | 1545 void MacroAssembler::EmitECMATruncate(Register result, |
1546 FPURegister double_input, | 1546 FPURegister double_input, |
1547 FPURegister single_scratch, | 1547 FPURegister single_scratch, |
1548 Register scratch, | 1548 Register scratch, |
1549 Register scratch2, | 1549 Register scratch2, |
1550 Register scratch3) { | 1550 Register scratch3) { |
1551 CpuFeatures::Scope scope(FPU); | 1551 CpuFeatureScope scope(this, FPU); |
1552 ASSERT(!scratch2.is(result)); | 1552 ASSERT(!scratch2.is(result)); |
1553 ASSERT(!scratch3.is(result)); | 1553 ASSERT(!scratch3.is(result)); |
1554 ASSERT(!scratch3.is(scratch2)); | 1554 ASSERT(!scratch3.is(scratch2)); |
1555 ASSERT(!scratch.is(result) && | 1555 ASSERT(!scratch.is(result) && |
1556 !scratch.is(scratch2) && | 1556 !scratch.is(scratch2) && |
1557 !scratch.is(scratch3)); | 1557 !scratch.is(scratch3)); |
1558 ASSERT(!single_scratch.is(double_input)); | 1558 ASSERT(!single_scratch.is(double_input)); |
1559 | 1559 |
1560 Label done; | 1560 Label done; |
1561 Label manual; | 1561 Label manual; |
(...skipping 1915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3477 SmiUntag(untagged_value, value_reg); | 3477 SmiUntag(untagged_value, value_reg); |
3478 FloatingPointHelper::ConvertIntToDouble(this, | 3478 FloatingPointHelper::ConvertIntToDouble(this, |
3479 untagged_value, | 3479 untagged_value, |
3480 destination, | 3480 destination, |
3481 f0, | 3481 f0, |
3482 mantissa_reg, | 3482 mantissa_reg, |
3483 exponent_reg, | 3483 exponent_reg, |
3484 scratch4, | 3484 scratch4, |
3485 f2); | 3485 f2); |
3486 if (destination == FloatingPointHelper::kFPURegisters) { | 3486 if (destination == FloatingPointHelper::kFPURegisters) { |
3487 CpuFeatures::Scope scope(FPU); | 3487 CpuFeatureScope scope(this, FPU); |
3488 sdc1(f0, MemOperand(scratch1, 0)); | 3488 sdc1(f0, MemOperand(scratch1, 0)); |
3489 } else { | 3489 } else { |
3490 sw(mantissa_reg, MemOperand(scratch1, 0)); | 3490 sw(mantissa_reg, MemOperand(scratch1, 0)); |
3491 sw(exponent_reg, MemOperand(scratch1, Register::kSizeInBytes)); | 3491 sw(exponent_reg, MemOperand(scratch1, Register::kSizeInBytes)); |
3492 } | 3492 } |
3493 bind(&done); | 3493 bind(&done); |
3494 } | 3494 } |
3495 | 3495 |
3496 | 3496 |
3497 void MacroAssembler::CompareMapAndBranch(Register obj, | 3497 void MacroAssembler::CompareMapAndBranch(Register obj, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3570 if (smi_check_type == DO_SMI_CHECK) { | 3570 if (smi_check_type == DO_SMI_CHECK) { |
3571 JumpIfSmi(obj, fail); | 3571 JumpIfSmi(obj, fail); |
3572 } | 3572 } |
3573 lw(scratch, FieldMemOperand(obj, HeapObject::kMapOffset)); | 3573 lw(scratch, FieldMemOperand(obj, HeapObject::kMapOffset)); |
3574 LoadRoot(at, index); | 3574 LoadRoot(at, index); |
3575 Branch(fail, ne, scratch, Operand(at)); | 3575 Branch(fail, ne, scratch, Operand(at)); |
3576 } | 3576 } |
3577 | 3577 |
3578 | 3578 |
3579 void MacroAssembler::GetCFunctionDoubleResult(const DoubleRegister dst) { | 3579 void MacroAssembler::GetCFunctionDoubleResult(const DoubleRegister dst) { |
3580 CpuFeatures::Scope scope(FPU); | 3580 CpuFeatureScope scope(this, FPU); |
3581 if (IsMipsSoftFloatABI) { | 3581 if (IsMipsSoftFloatABI) { |
3582 Move(dst, v0, v1); | 3582 Move(dst, v0, v1); |
3583 } else { | 3583 } else { |
3584 Move(dst, f0); // Reg f0 is o32 ABI FP return value. | 3584 Move(dst, f0); // Reg f0 is o32 ABI FP return value. |
3585 } | 3585 } |
3586 } | 3586 } |
3587 | 3587 |
3588 | 3588 |
3589 void MacroAssembler::SetCallCDoubleArguments(DoubleRegister dreg) { | 3589 void MacroAssembler::SetCallCDoubleArguments(DoubleRegister dreg) { |
3590 CpuFeatures::Scope scope(FPU); | 3590 CpuFeatureScope scope(this, FPU); |
3591 if (!IsMipsSoftFloatABI) { | 3591 if (!IsMipsSoftFloatABI) { |
3592 Move(f12, dreg); | 3592 Move(f12, dreg); |
3593 } else { | 3593 } else { |
3594 Move(a0, a1, dreg); | 3594 Move(a0, a1, dreg); |
3595 } | 3595 } |
3596 } | 3596 } |
3597 | 3597 |
3598 | 3598 |
3599 void MacroAssembler::SetCallCDoubleArguments(DoubleRegister dreg1, | 3599 void MacroAssembler::SetCallCDoubleArguments(DoubleRegister dreg1, |
3600 DoubleRegister dreg2) { | 3600 DoubleRegister dreg2) { |
3601 CpuFeatures::Scope scope(FPU); | 3601 CpuFeatureScope scope(this, FPU); |
3602 if (!IsMipsSoftFloatABI) { | 3602 if (!IsMipsSoftFloatABI) { |
3603 if (dreg2.is(f12)) { | 3603 if (dreg2.is(f12)) { |
3604 ASSERT(!dreg1.is(f14)); | 3604 ASSERT(!dreg1.is(f14)); |
3605 Move(f14, dreg2); | 3605 Move(f14, dreg2); |
3606 Move(f12, dreg1); | 3606 Move(f12, dreg1); |
3607 } else { | 3607 } else { |
3608 Move(f12, dreg1); | 3608 Move(f12, dreg1); |
3609 Move(f14, dreg2); | 3609 Move(f14, dreg2); |
3610 } | 3610 } |
3611 } else { | 3611 } else { |
3612 Move(a0, a1, dreg1); | 3612 Move(a0, a1, dreg1); |
3613 Move(a2, a3, dreg2); | 3613 Move(a2, a3, dreg2); |
3614 } | 3614 } |
3615 } | 3615 } |
3616 | 3616 |
3617 | 3617 |
3618 void MacroAssembler::SetCallCDoubleArguments(DoubleRegister dreg, | 3618 void MacroAssembler::SetCallCDoubleArguments(DoubleRegister dreg, |
3619 Register reg) { | 3619 Register reg) { |
3620 CpuFeatures::Scope scope(FPU); | 3620 CpuFeatureScope scope(this, FPU); |
3621 if (!IsMipsSoftFloatABI) { | 3621 if (!IsMipsSoftFloatABI) { |
3622 Move(f12, dreg); | 3622 Move(f12, dreg); |
3623 Move(a2, reg); | 3623 Move(a2, reg); |
3624 } else { | 3624 } else { |
3625 Move(a2, reg); | 3625 Move(a2, reg); |
3626 Move(a0, a1, dreg); | 3626 Move(a0, a1, dreg); |
3627 } | 3627 } |
3628 } | 3628 } |
3629 | 3629 |
3630 | 3630 |
(...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4625 sw(t8, MemOperand(fp, ExitFrameConstants::kCodeOffset)); | 4625 sw(t8, MemOperand(fp, ExitFrameConstants::kCodeOffset)); |
4626 | 4626 |
4627 // Save the frame pointer and the context in top. | 4627 // Save the frame pointer and the context in top. |
4628 li(t8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); | 4628 li(t8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); |
4629 sw(fp, MemOperand(t8)); | 4629 sw(fp, MemOperand(t8)); |
4630 li(t8, Operand(ExternalReference(Isolate::kContextAddress, isolate()))); | 4630 li(t8, Operand(ExternalReference(Isolate::kContextAddress, isolate()))); |
4631 sw(cp, MemOperand(t8)); | 4631 sw(cp, MemOperand(t8)); |
4632 | 4632 |
4633 const int frame_alignment = MacroAssembler::ActivationFrameAlignment(); | 4633 const int frame_alignment = MacroAssembler::ActivationFrameAlignment(); |
4634 if (save_doubles) { | 4634 if (save_doubles) { |
4635 CpuFeatures::Scope scope(FPU); | 4635 CpuFeatureScope scope(this, FPU); |
4636 // The stack must be allign to 0 modulo 8 for stores with sdc1. | 4636 // The stack must be allign to 0 modulo 8 for stores with sdc1. |
4637 ASSERT(kDoubleSize == frame_alignment); | 4637 ASSERT(kDoubleSize == frame_alignment); |
4638 if (frame_alignment > 0) { | 4638 if (frame_alignment > 0) { |
4639 ASSERT(IsPowerOf2(frame_alignment)); | 4639 ASSERT(IsPowerOf2(frame_alignment)); |
4640 And(sp, sp, Operand(-frame_alignment)); // Align stack. | 4640 And(sp, sp, Operand(-frame_alignment)); // Align stack. |
4641 } | 4641 } |
4642 int space = FPURegister::kMaxNumRegisters * kDoubleSize; | 4642 int space = FPURegister::kMaxNumRegisters * kDoubleSize; |
4643 Subu(sp, sp, Operand(space)); | 4643 Subu(sp, sp, Operand(space)); |
4644 // Remember: we only need to save every 2nd double FPU value. | 4644 // Remember: we only need to save every 2nd double FPU value. |
4645 for (int i = 0; i < FPURegister::kMaxNumRegisters; i+=2) { | 4645 for (int i = 0; i < FPURegister::kMaxNumRegisters; i+=2) { |
(...skipping 17 matching lines...) Expand all Loading... |
4663 addiu(at, sp, kPointerSize); | 4663 addiu(at, sp, kPointerSize); |
4664 sw(at, MemOperand(fp, ExitFrameConstants::kSPOffset)); | 4664 sw(at, MemOperand(fp, ExitFrameConstants::kSPOffset)); |
4665 } | 4665 } |
4666 | 4666 |
4667 | 4667 |
4668 void MacroAssembler::LeaveExitFrame(bool save_doubles, | 4668 void MacroAssembler::LeaveExitFrame(bool save_doubles, |
4669 Register argument_count, | 4669 Register argument_count, |
4670 bool do_return) { | 4670 bool do_return) { |
4671 // Optionally restore all double registers. | 4671 // Optionally restore all double registers. |
4672 if (save_doubles) { | 4672 if (save_doubles) { |
4673 CpuFeatures::Scope scope(FPU); | 4673 CpuFeatureScope scope(this, FPU); |
4674 // Remember: we only need to restore every 2nd double FPU value. | 4674 // Remember: we only need to restore every 2nd double FPU value. |
4675 lw(t8, MemOperand(fp, ExitFrameConstants::kSPOffset)); | 4675 lw(t8, MemOperand(fp, ExitFrameConstants::kSPOffset)); |
4676 for (int i = 0; i < FPURegister::kMaxNumRegisters; i+=2) { | 4676 for (int i = 0; i < FPURegister::kMaxNumRegisters; i+=2) { |
4677 FPURegister reg = FPURegister::from_code(i); | 4677 FPURegister reg = FPURegister::from_code(i); |
4678 ldc1(reg, MemOperand(t8, i * kDoubleSize + kPointerSize)); | 4678 ldc1(reg, MemOperand(t8, i * kDoubleSize + kPointerSize)); |
4679 } | 4679 } |
4680 } | 4680 } |
4681 | 4681 |
4682 // Clear top frame. | 4682 // Clear top frame. |
4683 li(t8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); | 4683 li(t8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5531 opcode == BGTZL); | 5531 opcode == BGTZL); |
5532 opcode = (cond == eq) ? BEQ : BNE; | 5532 opcode = (cond == eq) ? BEQ : BNE; |
5533 instr = (instr & ~kOpcodeMask) | opcode; | 5533 instr = (instr & ~kOpcodeMask) | opcode; |
5534 masm_.emit(instr); | 5534 masm_.emit(instr); |
5535 } | 5535 } |
5536 | 5536 |
5537 | 5537 |
5538 } } // namespace v8::internal | 5538 } } // namespace v8::internal |
5539 | 5539 |
5540 #endif // V8_TARGET_ARCH_MIPS | 5540 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |