Chromium Code Reviews| 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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 255 reinterpret_cast<intptr_t>(Smi::FromInt(p1 - p0)), | 255 reinterpret_cast<intptr_t>(Smi::FromInt(p1 - p0)), |
| 256 RelocInfo::NONE); | 256 RelocInfo::NONE); |
| 257 push(kScratchRegister); | 257 push(kScratchRegister); |
| 258 CallRuntime(Runtime::kAbort, 2); | 258 CallRuntime(Runtime::kAbort, 2); |
| 259 // will not return here | 259 // will not return here |
| 260 } | 260 } |
| 261 | 261 |
| 262 | 262 |
| 263 void MacroAssembler::CallStub(CodeStub* stub) { | 263 void MacroAssembler::CallStub(CodeStub* stub) { |
| 264 ASSERT(allow_stub_calls()); // calls are not allowed in some stubs | 264 ASSERT(allow_stub_calls()); // calls are not allowed in some stubs |
| 265 movq(kScratchRegister, stub->GetCode(), RelocInfo::CODE_TARGET); | 265 Call(stub->GetCode(), RelocInfo::CODE_TARGET); |
| 266 call(kScratchRegister); | |
| 267 } | 266 } |
| 268 | 267 |
| 269 | 268 |
| 270 void MacroAssembler::StubReturn(int argc) { | 269 void MacroAssembler::StubReturn(int argc) { |
| 271 ASSERT(argc >= 1 && generating_stub()); | 270 ASSERT(argc >= 1 && generating_stub()); |
| 272 ret((argc - 1) * kPointerSize); | 271 ret((argc - 1) * kPointerSize); |
| 273 } | 272 } |
| 274 | 273 |
| 275 | 274 |
| 276 void MacroAssembler::IllegalOperation(int num_arguments) { | 275 void MacroAssembler::IllegalOperation(int num_arguments) { |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 488 } | 487 } |
| 489 | 488 |
| 490 | 489 |
| 491 void MacroAssembler::Jump(Address destination, RelocInfo::Mode rmode) { | 490 void MacroAssembler::Jump(Address destination, RelocInfo::Mode rmode) { |
| 492 movq(kScratchRegister, destination, rmode); | 491 movq(kScratchRegister, destination, rmode); |
| 493 jmp(kScratchRegister); | 492 jmp(kScratchRegister); |
| 494 } | 493 } |
| 495 | 494 |
| 496 | 495 |
| 497 void MacroAssembler::Jump(Handle<Code> code_object, RelocInfo::Mode rmode) { | 496 void MacroAssembler::Jump(Handle<Code> code_object, RelocInfo::Mode rmode) { |
| 498 WriteRecordedPositions(); | |
|
William Hesse
2009/08/19 08:44:00
How can it be correct to remove this?
Lasse Reichstein
2009/08/19 10:12:32
It's correct in the sense that it matches what we
| |
| 499 ASSERT(RelocInfo::IsCodeTarget(rmode)); | 497 ASSERT(RelocInfo::IsCodeTarget(rmode)); |
| 500 movq(kScratchRegister, code_object, rmode); | 498 movq(kScratchRegister, code_object, rmode); |
| 501 #ifdef DEBUG | 499 #ifdef DEBUG |
| 502 Label target; | 500 Label target; |
| 503 bind(&target); | 501 bind(&target); |
| 504 #endif | 502 #endif |
| 505 jmp(kScratchRegister); | 503 jmp(kScratchRegister); |
| 506 #ifdef DEBUG | 504 #ifdef DEBUG |
| 507 ASSERT_EQ(kTargetAddrToReturnAddrDist, | 505 ASSERT_EQ(kTargetAddrToReturnAddrDist, |
| 508 SizeOfCodeGeneratedSince(&target) + kPointerSize); | 506 SizeOfCodeGeneratedSince(&target) + kPointerSize); |
| 509 #endif | 507 #endif |
| 510 } | 508 } |
| 511 | 509 |
| 512 | 510 |
| 513 void MacroAssembler::Call(ExternalReference ext) { | 511 void MacroAssembler::Call(ExternalReference ext) { |
| 514 movq(kScratchRegister, ext); | 512 movq(kScratchRegister, ext); |
| 515 call(kScratchRegister); | 513 call(kScratchRegister); |
| 516 } | 514 } |
| 517 | 515 |
| 518 | 516 |
| 519 void MacroAssembler::Call(Address destination, RelocInfo::Mode rmode) { | 517 void MacroAssembler::Call(Address destination, RelocInfo::Mode rmode) { |
| 520 movq(kScratchRegister, destination, rmode); | 518 movq(kScratchRegister, destination, rmode); |
| 521 call(kScratchRegister); | 519 call(kScratchRegister); |
| 522 } | 520 } |
| 523 | 521 |
| 524 | 522 |
| 525 void MacroAssembler::Call(Handle<Code> code_object, RelocInfo::Mode rmode) { | 523 void MacroAssembler::Call(Handle<Code> code_object, RelocInfo::Mode rmode) { |
| 524 ASSERT(RelocInfo::IsCodeTarget(rmode)); | |
| 526 WriteRecordedPositions(); | 525 WriteRecordedPositions(); |
| 527 ASSERT(RelocInfo::IsCodeTarget(rmode)); | |
| 528 movq(kScratchRegister, code_object, rmode); | 526 movq(kScratchRegister, code_object, rmode); |
| 529 #ifdef DEBUG | 527 #ifdef DEBUG |
| 530 // Patch target is kPointer size bytes *before* target label. | 528 // Patch target is kPointer size bytes *before* target label. |
| 531 Label target; | 529 Label target; |
| 532 bind(&target); | 530 bind(&target); |
| 533 #endif | 531 #endif |
| 534 call(kScratchRegister); | 532 call(kScratchRegister); |
| 535 #ifdef DEBUG | 533 #ifdef DEBUG |
| 536 ASSERT_EQ(kTargetAddrToReturnAddrDist, | 534 ASSERT_EQ(kTargetAddrToReturnAddrDist, |
| 537 SizeOfCodeGeneratedSince(&target) + kPointerSize); | 535 SizeOfCodeGeneratedSince(&target) + kPointerSize); |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 852 if (!definitely_matches) { | 850 if (!definitely_matches) { |
| 853 Handle<Code> adaptor = | 851 Handle<Code> adaptor = |
| 854 Handle<Code>(Builtins::builtin(Builtins::ArgumentsAdaptorTrampoline)); | 852 Handle<Code>(Builtins::builtin(Builtins::ArgumentsAdaptorTrampoline)); |
| 855 if (!code_constant.is_null()) { | 853 if (!code_constant.is_null()) { |
| 856 movq(rdx, code_constant, RelocInfo::EMBEDDED_OBJECT); | 854 movq(rdx, code_constant, RelocInfo::EMBEDDED_OBJECT); |
| 857 addq(rdx, Immediate(Code::kHeaderSize - kHeapObjectTag)); | 855 addq(rdx, Immediate(Code::kHeaderSize - kHeapObjectTag)); |
| 858 } else if (!code_register.is(rdx)) { | 856 } else if (!code_register.is(rdx)) { |
| 859 movq(rdx, code_register); | 857 movq(rdx, code_register); |
| 860 } | 858 } |
| 861 | 859 |
| 862 movq(kScratchRegister, adaptor, RelocInfo::CODE_TARGET); | |
| 863 if (flag == CALL_FUNCTION) { | 860 if (flag == CALL_FUNCTION) { |
| 864 call(kScratchRegister); | 861 Call(adaptor, RelocInfo::CODE_TARGET); |
| 865 jmp(done); | 862 jmp(done); |
| 866 } else { | 863 } else { |
| 867 jmp(kScratchRegister); | 864 Jump(adaptor, RelocInfo::CODE_TARGET); |
| 868 } | 865 } |
| 869 bind(&invoke); | 866 bind(&invoke); |
| 870 } | 867 } |
| 871 } | 868 } |
| 872 | 869 |
| 873 | 870 |
| 874 void MacroAssembler::InvokeCode(Register code, | 871 void MacroAssembler::InvokeCode(Register code, |
| 875 const ParameterCount& expected, | 872 const ParameterCount& expected, |
| 876 const ParameterCount& actual, | 873 const ParameterCount& actual, |
| 877 InvokeFlag flag) { | 874 InvokeFlag flag) { |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1198 Context::SECURITY_TOKEN_INDEX * kPointerSize; | 1195 Context::SECURITY_TOKEN_INDEX * kPointerSize; |
| 1199 movq(scratch, FieldOperand(scratch, token_offset)); | 1196 movq(scratch, FieldOperand(scratch, token_offset)); |
| 1200 cmpq(scratch, FieldOperand(kScratchRegister, token_offset)); | 1197 cmpq(scratch, FieldOperand(kScratchRegister, token_offset)); |
| 1201 j(not_equal, miss); | 1198 j(not_equal, miss); |
| 1202 | 1199 |
| 1203 bind(&same_contexts); | 1200 bind(&same_contexts); |
| 1204 } | 1201 } |
| 1205 | 1202 |
| 1206 | 1203 |
| 1207 } } // namespace v8::internal | 1204 } } // namespace v8::internal |
| OLD | NEW |