| 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 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 for (int i = 0; i < XMMRegister::kNumRegisters; i++) { | 549 for (int i = 0; i < XMMRegister::kNumRegisters; i++) { |
| 550 XMMRegister reg = XMMRegister::from_code(i); | 550 XMMRegister reg = XMMRegister::from_code(i); |
| 551 __ movdbl(Operand(esp, i * kDoubleSize), reg); | 551 __ movdbl(Operand(esp, i * kDoubleSize), reg); |
| 552 } | 552 } |
| 553 } | 553 } |
| 554 const int argument_count = 1; | 554 const int argument_count = 1; |
| 555 | 555 |
| 556 AllowExternalCallThatCantCauseGC scope(masm); | 556 AllowExternalCallThatCantCauseGC scope(masm); |
| 557 __ PrepareCallCFunction(argument_count, ecx); | 557 __ PrepareCallCFunction(argument_count, ecx); |
| 558 __ mov(Operand(esp, 0 * kPointerSize), | 558 __ mov(Operand(esp, 0 * kPointerSize), |
| 559 Immediate(ExternalReference::isolate_address())); | 559 Immediate(ExternalReference::isolate_address(masm->isolate()))); |
| 560 __ CallCFunction( | 560 __ CallCFunction( |
| 561 ExternalReference::store_buffer_overflow_function(masm->isolate()), | 561 ExternalReference::store_buffer_overflow_function(masm->isolate()), |
| 562 argument_count); | 562 argument_count); |
| 563 if (save_doubles_ == kSaveFPRegs) { | 563 if (save_doubles_ == kSaveFPRegs) { |
| 564 CpuFeatureScope scope(masm, SSE2); | 564 CpuFeatureScope scope(masm, SSE2); |
| 565 for (int i = 0; i < XMMRegister::kNumRegisters; i++) { | 565 for (int i = 0; i < XMMRegister::kNumRegisters; i++) { |
| 566 XMMRegister reg = XMMRegister::from_code(i); | 566 XMMRegister reg = XMMRegister::from_code(i); |
| 567 __ movdbl(reg, Operand(esp, i * kDoubleSize)); | 567 __ movdbl(reg, Operand(esp, i * kDoubleSize)); |
| 568 } | 568 } |
| 569 __ add(esp, Immediate(kDoubleSize * XMMRegister::kNumRegisters)); | 569 __ add(esp, Immediate(kDoubleSize * XMMRegister::kNumRegisters)); |
| (...skipping 3299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3869 // All checks done. Now push arguments for native regexp code. | 3869 // All checks done. Now push arguments for native regexp code. |
| 3870 Counters* counters = masm->isolate()->counters(); | 3870 Counters* counters = masm->isolate()->counters(); |
| 3871 __ IncrementCounter(counters->regexp_entry_native(), 1); | 3871 __ IncrementCounter(counters->regexp_entry_native(), 1); |
| 3872 | 3872 |
| 3873 // Isolates: note we add an additional parameter here (isolate pointer). | 3873 // Isolates: note we add an additional parameter here (isolate pointer). |
| 3874 static const int kRegExpExecuteArguments = 9; | 3874 static const int kRegExpExecuteArguments = 9; |
| 3875 __ EnterApiExitFrame(kRegExpExecuteArguments); | 3875 __ EnterApiExitFrame(kRegExpExecuteArguments); |
| 3876 | 3876 |
| 3877 // Argument 9: Pass current isolate address. | 3877 // Argument 9: Pass current isolate address. |
| 3878 __ mov(Operand(esp, 8 * kPointerSize), | 3878 __ mov(Operand(esp, 8 * kPointerSize), |
| 3879 Immediate(ExternalReference::isolate_address())); | 3879 Immediate(ExternalReference::isolate_address(masm->isolate()))); |
| 3880 | 3880 |
| 3881 // Argument 8: Indicate that this is a direct call from JavaScript. | 3881 // Argument 8: Indicate that this is a direct call from JavaScript. |
| 3882 __ mov(Operand(esp, 7 * kPointerSize), Immediate(1)); | 3882 __ mov(Operand(esp, 7 * kPointerSize), Immediate(1)); |
| 3883 | 3883 |
| 3884 // Argument 7: Start (high end) of backtracking stack memory area. | 3884 // Argument 7: Start (high end) of backtracking stack memory area. |
| 3885 __ mov(esi, Operand::StaticVariable(address_of_regexp_stack_memory_address)); | 3885 __ mov(esi, Operand::StaticVariable(address_of_regexp_stack_memory_address)); |
| 3886 __ add(esi, Operand::StaticVariable(address_of_regexp_stack_memory_size)); | 3886 __ add(esi, Operand::StaticVariable(address_of_regexp_stack_memory_size)); |
| 3887 __ mov(Operand(esp, 6 * kPointerSize), esi); | 3887 __ mov(Operand(esp, 6 * kPointerSize), esi); |
| 3888 | 3888 |
| 3889 // Argument 6: Set the number of capture registers to zero to force global | 3889 // Argument 6: Set the number of capture registers to zero to force global |
| (...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5023 ExternalReference scope_depth = | 5023 ExternalReference scope_depth = |
| 5024 ExternalReference::heap_always_allocate_scope_depth(masm->isolate()); | 5024 ExternalReference::heap_always_allocate_scope_depth(masm->isolate()); |
| 5025 if (always_allocate_scope) { | 5025 if (always_allocate_scope) { |
| 5026 __ inc(Operand::StaticVariable(scope_depth)); | 5026 __ inc(Operand::StaticVariable(scope_depth)); |
| 5027 } | 5027 } |
| 5028 | 5028 |
| 5029 // Call C function. | 5029 // Call C function. |
| 5030 __ mov(Operand(esp, 0 * kPointerSize), edi); // argc. | 5030 __ mov(Operand(esp, 0 * kPointerSize), edi); // argc. |
| 5031 __ mov(Operand(esp, 1 * kPointerSize), esi); // argv. | 5031 __ mov(Operand(esp, 1 * kPointerSize), esi); // argv. |
| 5032 __ mov(Operand(esp, 2 * kPointerSize), | 5032 __ mov(Operand(esp, 2 * kPointerSize), |
| 5033 Immediate(ExternalReference::isolate_address())); | 5033 Immediate(ExternalReference::isolate_address(masm->isolate()))); |
| 5034 __ call(ebx); | 5034 __ call(ebx); |
| 5035 // Result is in eax or edx:eax - do not destroy these registers! | 5035 // Result is in eax or edx:eax - do not destroy these registers! |
| 5036 | 5036 |
| 5037 if (always_allocate_scope) { | 5037 if (always_allocate_scope) { |
| 5038 __ dec(Operand::StaticVariable(scope_depth)); | 5038 __ dec(Operand::StaticVariable(scope_depth)); |
| 5039 } | 5039 } |
| 5040 | 5040 |
| 5041 // Make sure we're not trying to return 'the hole' from the runtime | 5041 // Make sure we're not trying to return 'the hole' from the runtime |
| 5042 // call as this may lead to crashes in the IC code later. | 5042 // call as this may lead to crashes in the IC code later. |
| 5043 if (FLAG_debug_code) { | 5043 if (FLAG_debug_code) { |
| (...skipping 2420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7464 } | 7464 } |
| 7465 | 7465 |
| 7466 | 7466 |
| 7467 void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { | 7467 void RecordWriteStub::InformIncrementalMarker(MacroAssembler* masm, Mode mode) { |
| 7468 regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); | 7468 regs_.SaveCallerSaveRegisters(masm, save_fp_regs_mode_); |
| 7469 int argument_count = 3; | 7469 int argument_count = 3; |
| 7470 __ PrepareCallCFunction(argument_count, regs_.scratch0()); | 7470 __ PrepareCallCFunction(argument_count, regs_.scratch0()); |
| 7471 __ mov(Operand(esp, 0 * kPointerSize), regs_.object()); | 7471 __ mov(Operand(esp, 0 * kPointerSize), regs_.object()); |
| 7472 __ mov(Operand(esp, 1 * kPointerSize), regs_.address()); // Slot. | 7472 __ mov(Operand(esp, 1 * kPointerSize), regs_.address()); // Slot. |
| 7473 __ mov(Operand(esp, 2 * kPointerSize), | 7473 __ mov(Operand(esp, 2 * kPointerSize), |
| 7474 Immediate(ExternalReference::isolate_address())); | 7474 Immediate(ExternalReference::isolate_address(masm->isolate()))); |
| 7475 | 7475 |
| 7476 AllowExternalCallThatCantCauseGC scope(masm); | 7476 AllowExternalCallThatCantCauseGC scope(masm); |
| 7477 if (mode == INCREMENTAL_COMPACTION) { | 7477 if (mode == INCREMENTAL_COMPACTION) { |
| 7478 __ CallCFunction( | 7478 __ CallCFunction( |
| 7479 ExternalReference::incremental_evacuation_record_write_function( | 7479 ExternalReference::incremental_evacuation_record_write_function( |
| 7480 masm->isolate()), | 7480 masm->isolate()), |
| 7481 argument_count); | 7481 argument_count); |
| 7482 } else { | 7482 } else { |
| 7483 ASSERT(mode == INCREMENTAL); | 7483 ASSERT(mode == INCREMENTAL); |
| 7484 __ CallCFunction( | 7484 __ CallCFunction( |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7709 // Restore ecx. | 7709 // Restore ecx. |
| 7710 __ pop(ecx); | 7710 __ pop(ecx); |
| 7711 __ ret(0); | 7711 __ ret(0); |
| 7712 } | 7712 } |
| 7713 | 7713 |
| 7714 #undef __ | 7714 #undef __ |
| 7715 | 7715 |
| 7716 } } // namespace v8::internal | 7716 } } // namespace v8::internal |
| 7717 | 7717 |
| 7718 #endif // V8_TARGET_ARCH_IA32 | 7718 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |