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 2420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2431 nop(); | 2431 nop(); |
2432 } | 2432 } |
2433 | 2433 |
2434 | 2434 |
2435 void MacroAssembler::Jump(intptr_t target, | 2435 void MacroAssembler::Jump(intptr_t target, |
2436 RelocInfo::Mode rmode, | 2436 RelocInfo::Mode rmode, |
2437 Condition cond, | 2437 Condition cond, |
2438 Register rs, | 2438 Register rs, |
2439 const Operand& rt, | 2439 const Operand& rt, |
2440 BranchDelaySlot bd) { | 2440 BranchDelaySlot bd) { |
| 2441 Label skip; |
| 2442 if (cond != cc_always) { |
| 2443 Branch(USE_DELAY_SLOT, &skip, NegateCondition(cond), rs, rt); |
| 2444 } |
| 2445 // The first instruction of 'li' may be placed in the delay slot. |
| 2446 // This is not an issue, t9 is expected to be clobbered anyway. |
2441 li(t9, Operand(target, rmode)); | 2447 li(t9, Operand(target, rmode)); |
2442 Jump(t9, cond, rs, rt, bd); | 2448 Jump(t9, al, zero_reg, Operand(zero_reg), bd); |
| 2449 bind(&skip); |
2443 } | 2450 } |
2444 | 2451 |
2445 | 2452 |
2446 void MacroAssembler::Jump(Address target, | 2453 void MacroAssembler::Jump(Address target, |
2447 RelocInfo::Mode rmode, | 2454 RelocInfo::Mode rmode, |
2448 Condition cond, | 2455 Condition cond, |
2449 Register rs, | 2456 Register rs, |
2450 const Operand& rt, | 2457 const Operand& rt, |
2451 BranchDelaySlot bd) { | 2458 BranchDelaySlot bd) { |
2452 ASSERT(!RelocInfo::IsCodeTarget(rmode)); | 2459 ASSERT(!RelocInfo::IsCodeTarget(rmode)); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2562 BranchDelaySlot bd) { | 2569 BranchDelaySlot bd) { |
2563 BlockTrampolinePoolScope block_trampoline_pool(this); | 2570 BlockTrampolinePoolScope block_trampoline_pool(this); |
2564 Label start; | 2571 Label start; |
2565 bind(&start); | 2572 bind(&start); |
2566 ASSERT(RelocInfo::IsCodeTarget(rmode)); | 2573 ASSERT(RelocInfo::IsCodeTarget(rmode)); |
2567 if (rmode == RelocInfo::CODE_TARGET && ast_id != kNoASTId) { | 2574 if (rmode == RelocInfo::CODE_TARGET && ast_id != kNoASTId) { |
2568 SetRecordedAstId(ast_id); | 2575 SetRecordedAstId(ast_id); |
2569 rmode = RelocInfo::CODE_TARGET_WITH_ID; | 2576 rmode = RelocInfo::CODE_TARGET_WITH_ID; |
2570 } | 2577 } |
2571 Call(reinterpret_cast<Address>(code.location()), rmode, cond, rs, rt, bd); | 2578 Call(reinterpret_cast<Address>(code.location()), rmode, cond, rs, rt, bd); |
2572 ASSERT_EQ(CallSize(code, rmode, ast_id, cond, rs, rt), | 2579 ASSERT_EQ(CallSize(code, rmode, ast_id, cond, rs, rt, bd), |
2573 SizeOfCodeGeneratedSince(&start)); | 2580 SizeOfCodeGeneratedSince(&start)); |
2574 } | 2581 } |
2575 | 2582 |
2576 | 2583 |
2577 void MacroAssembler::Ret(Condition cond, | 2584 void MacroAssembler::Ret(Condition cond, |
2578 Register rs, | 2585 Register rs, |
2579 const Operand& rt, | 2586 const Operand& rt, |
2580 BranchDelaySlot bd) { | 2587 BranchDelaySlot bd) { |
2581 Jump(ra, cond, rs, rt, bd); | 2588 Jump(ra, cond, rs, rt, bd); |
2582 } | 2589 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2632 lui(at, (imm32 & kHiMask) >> kLuiShift); | 2639 lui(at, (imm32 & kHiMask) >> kLuiShift); |
2633 ori(at, at, (imm32 & kImm16Mask)); | 2640 ori(at, at, (imm32 & kImm16Mask)); |
2634 } | 2641 } |
2635 jalr(at); | 2642 jalr(at); |
2636 | 2643 |
2637 // Emit a nop in the branch delay slot if required. | 2644 // Emit a nop in the branch delay slot if required. |
2638 if (bdslot == PROTECT) | 2645 if (bdslot == PROTECT) |
2639 nop(); | 2646 nop(); |
2640 } | 2647 } |
2641 | 2648 |
| 2649 void MacroAssembler::DropAndRet(int drop) { |
| 2650 Ret(USE_DELAY_SLOT); |
| 2651 addiu(sp, sp, drop * kPointerSize); |
| 2652 } |
2642 | 2653 |
2643 void MacroAssembler::DropAndRet(int drop, | 2654 void MacroAssembler::DropAndRet(int drop, |
2644 Condition cond, | 2655 Condition cond, |
2645 Register r1, | 2656 Register r1, |
2646 const Operand& r2) { | 2657 const Operand& r2) { |
2647 // This is a workaround to make sure only one branch instruction is | 2658 // Both Drop and Ret need to be conditional. |
2648 // generated. It relies on Drop and Ret not creating branches if | |
2649 // cond == cc_always. | |
2650 Label skip; | 2659 Label skip; |
2651 if (cond != cc_always) { | 2660 if (cond != cc_always) { |
2652 Branch(&skip, NegateCondition(cond), r1, r2); | 2661 Branch(&skip, NegateCondition(cond), r1, r2); |
2653 } | 2662 } |
2654 | 2663 |
2655 Drop(drop); | 2664 Drop(drop); |
2656 Ret(); | 2665 Ret(); |
2657 | 2666 |
2658 if (cond != cc_always) { | 2667 if (cond != cc_always) { |
2659 bind(&skip); | 2668 bind(&skip); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2706 | 2715 |
2707 void MacroAssembler::Push(Handle<Object> handle) { | 2716 void MacroAssembler::Push(Handle<Object> handle) { |
2708 li(at, Operand(handle)); | 2717 li(at, Operand(handle)); |
2709 push(at); | 2718 push(at); |
2710 } | 2719 } |
2711 | 2720 |
2712 | 2721 |
2713 #ifdef ENABLE_DEBUGGER_SUPPORT | 2722 #ifdef ENABLE_DEBUGGER_SUPPORT |
2714 | 2723 |
2715 void MacroAssembler::DebugBreak() { | 2724 void MacroAssembler::DebugBreak() { |
2716 mov(a0, zero_reg); | 2725 PrepareCEntryArgs(0); |
2717 li(a1, Operand(ExternalReference(Runtime::kDebugBreak, isolate()))); | 2726 PrepareCEntryFunction(ExternalReference(Runtime::kDebugBreak, isolate())); |
2718 CEntryStub ces(1); | 2727 CEntryStub ces(1); |
2719 ASSERT(AllowThisStubCall(&ces)); | 2728 ASSERT(AllowThisStubCall(&ces)); |
2720 Call(ces.GetCode(), RelocInfo::DEBUG_BREAK); | 2729 Call(ces.GetCode(), RelocInfo::DEBUG_BREAK); |
2721 } | 2730 } |
2722 | 2731 |
2723 #endif // ENABLE_DEBUGGER_SUPPORT | 2732 #endif // ENABLE_DEBUGGER_SUPPORT |
2724 | 2733 |
2725 | 2734 |
2726 // --------------------------------------------------------------------------- | 2735 // --------------------------------------------------------------------------- |
2727 // Exception handling. | 2736 // Exception handling. |
(...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3869 Register map, | 3878 Register map, |
3870 Register type_reg) { | 3879 Register type_reg) { |
3871 lw(map, FieldMemOperand(object, HeapObject::kMapOffset)); | 3880 lw(map, FieldMemOperand(object, HeapObject::kMapOffset)); |
3872 lbu(type_reg, FieldMemOperand(map, Map::kInstanceTypeOffset)); | 3881 lbu(type_reg, FieldMemOperand(map, Map::kInstanceTypeOffset)); |
3873 } | 3882 } |
3874 | 3883 |
3875 | 3884 |
3876 // ----------------------------------------------------------------------------- | 3885 // ----------------------------------------------------------------------------- |
3877 // Runtime calls. | 3886 // Runtime calls. |
3878 | 3887 |
3879 void MacroAssembler::CallStub(CodeStub* stub, Condition cond, | 3888 void MacroAssembler::CallStub(CodeStub* stub, |
3880 Register r1, const Operand& r2) { | 3889 Condition cond, |
| 3890 Register r1, |
| 3891 const Operand& r2, |
| 3892 BranchDelaySlot bd) { |
3881 ASSERT(AllowThisStubCall(stub)); // Stub calls are not allowed in some stubs. | 3893 ASSERT(AllowThisStubCall(stub)); // Stub calls are not allowed in some stubs. |
3882 Call(stub->GetCode(), RelocInfo::CODE_TARGET, kNoASTId, cond, r1, r2); | 3894 Call(stub->GetCode(), RelocInfo::CODE_TARGET, kNoASTId, cond, r1, r2, bd); |
3883 } | 3895 } |
3884 | 3896 |
3885 | 3897 |
3886 void MacroAssembler::TailCallStub(CodeStub* stub) { | 3898 void MacroAssembler::TailCallStub(CodeStub* stub) { |
3887 ASSERT(allow_stub_calls_ || stub->CompilingCallsToThisStubIsGCSafe()); | 3899 ASSERT(allow_stub_calls_ || stub->CompilingCallsToThisStubIsGCSafe()); |
3888 Jump(stub->GetCode(), RelocInfo::CODE_TARGET); | 3900 Jump(stub->GetCode(), RelocInfo::CODE_TARGET); |
3889 } | 3901 } |
3890 | 3902 |
3891 | 3903 |
3892 static int AddressOffset(ExternalReference ref0, ExternalReference ref1) { | 3904 static int AddressOffset(ExternalReference ref0, ExternalReference ref1) { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3955 lw(at, MemOperand(s3, kLimitOffset)); | 3967 lw(at, MemOperand(s3, kLimitOffset)); |
3956 Branch(&delete_allocated_handles, ne, s1, Operand(at)); | 3968 Branch(&delete_allocated_handles, ne, s1, Operand(at)); |
3957 | 3969 |
3958 // Check if the function scheduled an exception. | 3970 // Check if the function scheduled an exception. |
3959 bind(&leave_exit_frame); | 3971 bind(&leave_exit_frame); |
3960 LoadRoot(t0, Heap::kTheHoleValueRootIndex); | 3972 LoadRoot(t0, Heap::kTheHoleValueRootIndex); |
3961 li(at, Operand(ExternalReference::scheduled_exception_address(isolate()))); | 3973 li(at, Operand(ExternalReference::scheduled_exception_address(isolate()))); |
3962 lw(t1, MemOperand(at)); | 3974 lw(t1, MemOperand(at)); |
3963 Branch(&promote_scheduled_exception, ne, t0, Operand(t1)); | 3975 Branch(&promote_scheduled_exception, ne, t0, Operand(t1)); |
3964 li(s0, Operand(stack_space)); | 3976 li(s0, Operand(stack_space)); |
3965 LeaveExitFrame(false, s0); | 3977 LeaveExitFrame(false, s0, true); |
3966 Ret(); | |
3967 | 3978 |
3968 bind(&promote_scheduled_exception); | 3979 bind(&promote_scheduled_exception); |
3969 TailCallExternalReference( | 3980 TailCallExternalReference( |
3970 ExternalReference(Runtime::kPromoteScheduledException, isolate()), | 3981 ExternalReference(Runtime::kPromoteScheduledException, isolate()), |
3971 0, | 3982 0, |
3972 1); | 3983 1); |
3973 | 3984 |
3974 // HandleScope limit has changed. Delete allocated extensions. | 3985 // HandleScope limit has changed. Delete allocated extensions. |
3975 bind(&delete_allocated_handles); | 3986 bind(&delete_allocated_handles); |
3976 sw(s1, MemOperand(s3, kLimitOffset)); | 3987 sw(s1, MemOperand(s3, kLimitOffset)); |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4154 // expectation. | 4165 // expectation. |
4155 if (f->nargs >= 0 && f->nargs != num_arguments) { | 4166 if (f->nargs >= 0 && f->nargs != num_arguments) { |
4156 IllegalOperation(num_arguments); | 4167 IllegalOperation(num_arguments); |
4157 return; | 4168 return; |
4158 } | 4169 } |
4159 | 4170 |
4160 // TODO(1236192): Most runtime routines don't need the number of | 4171 // TODO(1236192): Most runtime routines don't need the number of |
4161 // arguments passed in because it is constant. At some point we | 4172 // arguments passed in because it is constant. At some point we |
4162 // should remove this need and make the runtime routine entry code | 4173 // should remove this need and make the runtime routine entry code |
4163 // smarter. | 4174 // smarter. |
4164 li(a0, num_arguments); | 4175 PrepareCEntryArgs(num_arguments); |
4165 li(a1, Operand(ExternalReference(f, isolate()))); | 4176 PrepareCEntryFunction(ExternalReference(f, isolate())); |
4166 CEntryStub stub(1); | 4177 CEntryStub stub(1); |
4167 CallStub(&stub); | 4178 CallStub(&stub); |
4168 } | 4179 } |
4169 | 4180 |
4170 | 4181 |
4171 void MacroAssembler::CallRuntimeSaveDoubles(Runtime::FunctionId id) { | 4182 void MacroAssembler::CallRuntimeSaveDoubles(Runtime::FunctionId id) { |
4172 const Runtime::Function* function = Runtime::FunctionForId(id); | 4183 const Runtime::Function* function = Runtime::FunctionForId(id); |
4173 li(a0, Operand(function->nargs)); | 4184 PrepareCEntryArgs(function->nargs); |
4174 li(a1, Operand(ExternalReference(function, isolate()))); | 4185 PrepareCEntryFunction(ExternalReference(function, isolate())); |
4175 CEntryStub stub(1, kSaveFPRegs); | 4186 CEntryStub stub(1, kSaveFPRegs); |
4176 CallStub(&stub); | 4187 CallStub(&stub); |
4177 } | 4188 } |
4178 | 4189 |
4179 | 4190 |
4180 void MacroAssembler::CallRuntime(Runtime::FunctionId fid, int num_arguments) { | 4191 void MacroAssembler::CallRuntime(Runtime::FunctionId fid, int num_arguments) { |
4181 CallRuntime(Runtime::FunctionForId(fid), num_arguments); | 4192 CallRuntime(Runtime::FunctionForId(fid), num_arguments); |
4182 } | 4193 } |
4183 | 4194 |
4184 | 4195 |
4185 void MacroAssembler::CallExternalReference(const ExternalReference& ext, | 4196 void MacroAssembler::CallExternalReference(const ExternalReference& ext, |
4186 int num_arguments) { | 4197 int num_arguments, |
4187 li(a0, Operand(num_arguments)); | 4198 BranchDelaySlot bd) { |
4188 li(a1, Operand(ext)); | 4199 PrepareCEntryArgs(num_arguments); |
| 4200 PrepareCEntryFunction(ext); |
4189 | 4201 |
4190 CEntryStub stub(1); | 4202 CEntryStub stub(1); |
4191 CallStub(&stub); | 4203 CallStub(&stub, al, zero_reg, Operand(zero_reg), bd); |
4192 } | 4204 } |
4193 | 4205 |
4194 | 4206 |
4195 void MacroAssembler::TailCallExternalReference(const ExternalReference& ext, | 4207 void MacroAssembler::TailCallExternalReference(const ExternalReference& ext, |
4196 int num_arguments, | 4208 int num_arguments, |
4197 int result_size) { | 4209 int result_size) { |
4198 // TODO(1236192): Most runtime routines don't need the number of | 4210 // TODO(1236192): Most runtime routines don't need the number of |
4199 // arguments passed in because it is constant. At some point we | 4211 // arguments passed in because it is constant. At some point we |
4200 // should remove this need and make the runtime routine entry code | 4212 // should remove this need and make the runtime routine entry code |
4201 // smarter. | 4213 // smarter. |
4202 li(a0, Operand(num_arguments)); | 4214 PrepareCEntryArgs(num_arguments); |
4203 JumpToExternalReference(ext); | 4215 JumpToExternalReference(ext); |
4204 } | 4216 } |
4205 | 4217 |
4206 | 4218 |
4207 void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid, | 4219 void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid, |
4208 int num_arguments, | 4220 int num_arguments, |
4209 int result_size) { | 4221 int result_size) { |
4210 TailCallExternalReference(ExternalReference(fid, isolate()), | 4222 TailCallExternalReference(ExternalReference(fid, isolate()), |
4211 num_arguments, | 4223 num_arguments, |
4212 result_size); | 4224 result_size); |
4213 } | 4225 } |
4214 | 4226 |
4215 | 4227 |
4216 void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) { | 4228 void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, |
4217 li(a1, Operand(builtin)); | 4229 BranchDelaySlot bd) { |
| 4230 PrepareCEntryFunction(builtin); |
4218 CEntryStub stub(1); | 4231 CEntryStub stub(1); |
4219 Jump(stub.GetCode(), RelocInfo::CODE_TARGET); | 4232 Jump(stub.GetCode(), |
| 4233 RelocInfo::CODE_TARGET, |
| 4234 al, |
| 4235 zero_reg, |
| 4236 Operand(zero_reg), |
| 4237 bd); |
4220 } | 4238 } |
4221 | 4239 |
4222 | 4240 |
4223 void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, | 4241 void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, |
4224 InvokeFlag flag, | 4242 InvokeFlag flag, |
4225 const CallWrapper& call_wrapper) { | 4243 const CallWrapper& call_wrapper) { |
4226 // You can't call a builtin without a valid frame. | 4244 // You can't call a builtin without a valid frame. |
4227 ASSERT(flag == JUMP_FUNCTION || has_frame()); | 4245 ASSERT(flag == JUMP_FUNCTION || has_frame()); |
4228 | 4246 |
4229 GetBuiltinEntry(t9, id); | 4247 GetBuiltinEntry(t9, id); |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4556 } | 4574 } |
4557 | 4575 |
4558 // Set the exit frame sp value to point just before the return address | 4576 // Set the exit frame sp value to point just before the return address |
4559 // location. | 4577 // location. |
4560 addiu(at, sp, kPointerSize); | 4578 addiu(at, sp, kPointerSize); |
4561 sw(at, MemOperand(fp, ExitFrameConstants::kSPOffset)); | 4579 sw(at, MemOperand(fp, ExitFrameConstants::kSPOffset)); |
4562 } | 4580 } |
4563 | 4581 |
4564 | 4582 |
4565 void MacroAssembler::LeaveExitFrame(bool save_doubles, | 4583 void MacroAssembler::LeaveExitFrame(bool save_doubles, |
4566 Register argument_count) { | 4584 Register argument_count, |
| 4585 bool do_return) { |
4567 // Optionally restore all double registers. | 4586 // Optionally restore all double registers. |
4568 if (save_doubles) { | 4587 if (save_doubles) { |
4569 // Remember: we only need to restore every 2nd double FPU value. | 4588 // Remember: we only need to restore every 2nd double FPU value. |
4570 lw(t8, MemOperand(fp, ExitFrameConstants::kSPOffset)); | 4589 lw(t8, MemOperand(fp, ExitFrameConstants::kSPOffset)); |
4571 for (int i = 0; i < FPURegister::kNumRegisters; i+=2) { | 4590 for (int i = 0; i < FPURegister::kNumRegisters; i+=2) { |
4572 FPURegister reg = FPURegister::from_code(i); | 4591 FPURegister reg = FPURegister::from_code(i); |
4573 ldc1(reg, MemOperand(t8, i * kDoubleSize + kPointerSize)); | 4592 ldc1(reg, MemOperand(t8, i * kDoubleSize + kPointerSize)); |
4574 } | 4593 } |
4575 } | 4594 } |
4576 | 4595 |
4577 // Clear top frame. | 4596 // Clear top frame. |
4578 li(t8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); | 4597 li(t8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); |
4579 sw(zero_reg, MemOperand(t8)); | 4598 sw(zero_reg, MemOperand(t8)); |
4580 | 4599 |
4581 // Restore current context from top and clear it in debug mode. | 4600 // Restore current context from top and clear it in debug mode. |
4582 li(t8, Operand(ExternalReference(Isolate::kContextAddress, isolate()))); | 4601 li(t8, Operand(ExternalReference(Isolate::kContextAddress, isolate()))); |
4583 lw(cp, MemOperand(t8)); | 4602 lw(cp, MemOperand(t8)); |
4584 #ifdef DEBUG | 4603 #ifdef DEBUG |
4585 sw(a3, MemOperand(t8)); | 4604 sw(a3, MemOperand(t8)); |
4586 #endif | 4605 #endif |
4587 | 4606 |
4588 // Pop the arguments, restore registers, and return. | 4607 // Pop the arguments, restore registers, and return. |
4589 mov(sp, fp); // Respect ABI stack constraint. | 4608 mov(sp, fp); // Respect ABI stack constraint. |
4590 lw(fp, MemOperand(sp, ExitFrameConstants::kCallerFPOffset)); | 4609 lw(fp, MemOperand(sp, ExitFrameConstants::kCallerFPOffset)); |
4591 lw(ra, MemOperand(sp, ExitFrameConstants::kCallerPCOffset)); | 4610 lw(ra, MemOperand(sp, ExitFrameConstants::kCallerPCOffset)); |
4592 addiu(sp, sp, 8); | 4611 |
4593 if (argument_count.is_valid()) { | 4612 if (argument_count.is_valid()) { |
4594 sll(t8, argument_count, kPointerSizeLog2); | 4613 sll(t8, argument_count, kPointerSizeLog2); |
4595 addu(sp, sp, t8); | 4614 addu(sp, sp, t8); |
4596 } | 4615 } |
| 4616 |
| 4617 if (do_return) { |
| 4618 Ret(USE_DELAY_SLOT); |
| 4619 // If returning, the instruction in the delay slot will be the addiu below. |
| 4620 } |
| 4621 addiu(sp, sp, 8); |
4597 } | 4622 } |
4598 | 4623 |
4599 | 4624 |
4600 void MacroAssembler::InitializeNewString(Register string, | 4625 void MacroAssembler::InitializeNewString(Register string, |
4601 Register length, | 4626 Register length, |
4602 Heap::RootListIndex map_index, | 4627 Heap::RootListIndex map_index, |
4603 Register scratch1, | 4628 Register scratch1, |
4604 Register scratch2) { | 4629 Register scratch2) { |
4605 sll(scratch1, length, kSmiTagSize); | 4630 sll(scratch1, length, kSmiTagSize); |
4606 LoadRoot(scratch2, map_index); | 4631 LoadRoot(scratch2, map_index); |
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5389 opcode == BGTZL); | 5414 opcode == BGTZL); |
5390 opcode = (cond == eq) ? BEQ : BNE; | 5415 opcode = (cond == eq) ? BEQ : BNE; |
5391 instr = (instr & ~kOpcodeMask) | opcode; | 5416 instr = (instr & ~kOpcodeMask) | opcode; |
5392 masm_.emit(instr); | 5417 masm_.emit(instr); |
5393 } | 5418 } |
5394 | 5419 |
5395 | 5420 |
5396 } } // namespace v8::internal | 5421 } } // namespace v8::internal |
5397 | 5422 |
5398 #endif // V8_TARGET_ARCH_MIPS | 5423 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |