| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
| 8 | 8 |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 __ cmp(scratch, factory->heap_number_map()); | 373 __ cmp(scratch, factory->heap_number_map()); |
| 374 __ j(not_equal, non_float); // argument in eax is not a number -> NaN | 374 __ j(not_equal, non_float); // argument in eax is not a number -> NaN |
| 375 | 375 |
| 376 // Fall-through: Both operands are numbers. | 376 // Fall-through: Both operands are numbers. |
| 377 __ bind(&done); | 377 __ bind(&done); |
| 378 } | 378 } |
| 379 | 379 |
| 380 | 380 |
| 381 void MathPowStub::Generate(MacroAssembler* masm) { | 381 void MathPowStub::Generate(MacroAssembler* masm) { |
| 382 Factory* factory = isolate()->factory(); | 382 Factory* factory = isolate()->factory(); |
| 383 const Register exponent = eax; | 383 const Register exponent = MathPowTaggedDescriptor::exponent(); |
| 384 DCHECK(exponent.is(eax)); |
| 384 const Register base = edx; | 385 const Register base = edx; |
| 385 const Register scratch = ecx; | 386 const Register scratch = ecx; |
| 386 const XMMRegister double_result = xmm3; | 387 const XMMRegister double_result = xmm3; |
| 387 const XMMRegister double_base = xmm2; | 388 const XMMRegister double_base = xmm2; |
| 388 const XMMRegister double_exponent = xmm1; | 389 const XMMRegister double_exponent = xmm1; |
| 389 const XMMRegister double_scratch = xmm4; | 390 const XMMRegister double_scratch = xmm4; |
| 390 | 391 |
| 391 Label call_runtime, done, exponent_not_smi, int_exponent; | 392 Label call_runtime, done, exponent_not_smi, int_exponent; |
| 392 | 393 |
| 393 // Save 1 in double_result - we need this several times later on. | 394 // Save 1 in double_result - we need this several times later on. |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, eax, | 653 NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, eax, |
| 653 ebx, &miss); | 654 ebx, &miss); |
| 654 __ bind(&miss); | 655 __ bind(&miss); |
| 655 PropertyAccessCompiler::TailCallBuiltin( | 656 PropertyAccessCompiler::TailCallBuiltin( |
| 656 masm, PropertyAccessCompiler::MissBuiltin(Code::LOAD_IC)); | 657 masm, PropertyAccessCompiler::MissBuiltin(Code::LOAD_IC)); |
| 657 } | 658 } |
| 658 | 659 |
| 659 | 660 |
| 660 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) { | 661 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) { |
| 661 // The key is in edx and the parameter count is in eax. | 662 // The key is in edx and the parameter count is in eax. |
| 663 DCHECK(edx.is(ArgumentsAccessReadDescriptor::index())); |
| 664 DCHECK(eax.is(ArgumentsAccessReadDescriptor::parameter_count())); |
| 662 | 665 |
| 663 // The displacement is used for skipping the frame pointer on the | 666 // The displacement is used for skipping the frame pointer on the |
| 664 // stack. It is the offset of the last parameter (if any) relative | 667 // stack. It is the offset of the last parameter (if any) relative |
| 665 // to the frame pointer. | 668 // to the frame pointer. |
| 666 static const int kDisplacement = 1 * kPointerSize; | 669 static const int kDisplacement = 1 * kPointerSize; |
| 667 | 670 |
| 668 // Check that the key is a smi. | 671 // Check that the key is a smi. |
| 669 Label slow; | 672 Label slow; |
| 670 __ JumpIfNotSmi(edx, &slow, Label::kNear); | 673 __ JumpIfNotSmi(edx, &slow, Label::kNear); |
| 671 | 674 |
| (...skipping 3955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4627 | 4630 |
| 4628 | 4631 |
| 4629 void CallApiGetterStub::Generate(MacroAssembler* masm) { | 4632 void CallApiGetterStub::Generate(MacroAssembler* masm) { |
| 4630 // ----------- S t a t e ------------- | 4633 // ----------- S t a t e ------------- |
| 4631 // -- esp[0] : return address | 4634 // -- esp[0] : return address |
| 4632 // -- esp[4] : name | 4635 // -- esp[4] : name |
| 4633 // -- esp[8 - kArgsLength*4] : PropertyCallbackArguments object | 4636 // -- esp[8 - kArgsLength*4] : PropertyCallbackArguments object |
| 4634 // -- ... | 4637 // -- ... |
| 4635 // -- edx : api_function_address | 4638 // -- edx : api_function_address |
| 4636 // ----------------------------------- | 4639 // ----------------------------------- |
| 4640 DCHECK(edx.is(ApiGetterDescriptor::function_address())); |
| 4637 | 4641 |
| 4638 // array for v8::Arguments::values_, handler for name and pointer | 4642 // array for v8::Arguments::values_, handler for name and pointer |
| 4639 // to the values (it considered as smi in GC). | 4643 // to the values (it considered as smi in GC). |
| 4640 const int kStackSpace = PropertyCallbackArguments::kArgsLength + 2; | 4644 const int kStackSpace = PropertyCallbackArguments::kArgsLength + 2; |
| 4641 // Allocate space for opional callback address parameter in case | 4645 // Allocate space for opional callback address parameter in case |
| 4642 // CPU profiler is active. | 4646 // CPU profiler is active. |
| 4643 const int kApiArgc = 2 + 1; | 4647 const int kApiArgc = 2 + 1; |
| 4644 | 4648 |
| 4645 Register api_function_address = edx; | 4649 Register api_function_address = edx; |
| 4646 Register scratch = ebx; | 4650 Register scratch = ebx; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 4663 Operand(ebp, 7 * kPointerSize), | 4667 Operand(ebp, 7 * kPointerSize), |
| 4664 NULL); | 4668 NULL); |
| 4665 } | 4669 } |
| 4666 | 4670 |
| 4667 | 4671 |
| 4668 #undef __ | 4672 #undef __ |
| 4669 | 4673 |
| 4670 } } // namespace v8::internal | 4674 } } // namespace v8::internal |
| 4671 | 4675 |
| 4672 #endif // V8_TARGET_ARCH_IA32 | 4676 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |