| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 virtual void Visit##type(type* node); | 298 virtual void Visit##type(type* node); |
| 299 NODE_LIST(DEF_VISIT) | 299 NODE_LIST(DEF_VISIT) |
| 300 #undef DEF_VISIT | 300 #undef DEF_VISIT |
| 301 | 301 |
| 302 void RecordStatementPosition(Node* node); | 302 void RecordStatementPosition(Node* node); |
| 303 | 303 |
| 304 // Activation frames | 304 // Activation frames |
| 305 void EnterJSFrame(); | 305 void EnterJSFrame(); |
| 306 void ExitJSFrame(); | 306 void ExitJSFrame(); |
| 307 | 307 |
| 308 virtual void GenerateShiftDownAndTailCall(ZoneList<Expression*>* args); | |
| 309 virtual void GenerateSetThisFunction(ZoneList<Expression*>* args); | |
| 310 virtual void GenerateGetThisFunction(ZoneList<Expression*>* args); | |
| 311 virtual void GenerateSetThis(ZoneList<Expression*>* args); | |
| 312 virtual void GenerateGetArgumentsLength(ZoneList<Expression*>* args); | |
| 313 virtual void GenerateSetArgumentsLength(ZoneList<Expression*>* args); | |
| 314 virtual void GenerateTailCallWithArguments(ZoneList<Expression*>* args); | |
| 315 virtual void GenerateSetArgument(ZoneList<Expression*>* args); | |
| 316 virtual void GenerateSquashFrame(ZoneList<Expression*>* args); | |
| 317 virtual void GenerateExpandFrame(ZoneList<Expression*>* args); | |
| 318 virtual void GenerateIsSmi(ZoneList<Expression*>* args); | 308 virtual void GenerateIsSmi(ZoneList<Expression*>* args); |
| 319 virtual void GenerateIsNonNegativeSmi(ZoneList<Expression*>* args); | 309 virtual void GenerateIsNonNegativeSmi(ZoneList<Expression*>* args); |
| 320 virtual void GenerateIsArray(ZoneList<Expression*>* args); | 310 virtual void GenerateIsArray(ZoneList<Expression*>* args); |
| 321 | 311 |
| 322 virtual void GenerateArgumentsLength(ZoneList<Expression*>* args); | 312 virtual void GenerateArgumentsLength(ZoneList<Expression*>* args); |
| 323 virtual void GenerateArgumentsAccess(ZoneList<Expression*>* args); | 313 virtual void GenerateArgumentsAccess(ZoneList<Expression*>* args); |
| 324 | 314 |
| 325 virtual void GenerateValueOf(ZoneList<Expression*>* args); | 315 virtual void GenerateValueOf(ZoneList<Expression*>* args); |
| 326 virtual void GenerateSetValueOf(ZoneList<Expression*>* args); | 316 virtual void GenerateSetValueOf(ZoneList<Expression*>* args); |
| 327 | 317 |
| (...skipping 3499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3827 // constructor invocation. | 3817 // constructor invocation. |
| 3828 __ RecordPosition(position); | 3818 __ RecordPosition(position); |
| 3829 __ Call(Handle<Code>(Builtins::builtin(Builtins::JSConstructCall)), | 3819 __ Call(Handle<Code>(Builtins::builtin(Builtins::JSConstructCall)), |
| 3830 js_construct_call); | 3820 js_construct_call); |
| 3831 | 3821 |
| 3832 // Discard old TOS value and push r0 on the stack (same as Pop(), push(r0)). | 3822 // Discard old TOS value and push r0 on the stack (same as Pop(), push(r0)). |
| 3833 __ str(r0, MemOperand(sp, 0 * kPointerSize)); | 3823 __ str(r0, MemOperand(sp, 0 * kPointerSize)); |
| 3834 } | 3824 } |
| 3835 | 3825 |
| 3836 | 3826 |
| 3837 void ArmCodeGenerator::GenerateSetThisFunction(ZoneList<Expression*>* args) { | |
| 3838 __ stop("ArmCodeGenerator::GenerateSetThisFunction - unreachable"); | |
| 3839 } | |
| 3840 | |
| 3841 | |
| 3842 void ArmCodeGenerator::GenerateGetThisFunction(ZoneList<Expression*>* args) { | |
| 3843 __ stop("ArmCodeGenerator::GenerateGetThisFunction - unreachable"); | |
| 3844 } | |
| 3845 | |
| 3846 | |
| 3847 void ArmCodeGenerator::GenerateSetThis(ZoneList<Expression*>* args) { | |
| 3848 __ stop("ArmCodeGenerator::GenerateSetThis - unreachable"); | |
| 3849 } | |
| 3850 | |
| 3851 | |
| 3852 void ArmCodeGenerator::GenerateSetArgumentsLength(ZoneList<Expression*>* args) { | |
| 3853 __ stop("ArmCodeGenerator::GenerateSetArgumentsLength - unreachable"); | |
| 3854 } | |
| 3855 | |
| 3856 | |
| 3857 void ArmCodeGenerator::GenerateGetArgumentsLength(ZoneList<Expression*>* args) { | |
| 3858 __ stop("ArmCodeGenerator::GenerateGetArgumentsLength - unreachable"); | |
| 3859 } | |
| 3860 | |
| 3861 | |
| 3862 void ArmCodeGenerator::GenerateValueOf(ZoneList<Expression*>* args) { | 3827 void ArmCodeGenerator::GenerateValueOf(ZoneList<Expression*>* args) { |
| 3863 ASSERT(args->length() == 1); | 3828 ASSERT(args->length() == 1); |
| 3864 Label leave; | 3829 Label leave; |
| 3865 Load(args->at(0)); | 3830 Load(args->at(0)); |
| 3866 __ pop(r0); // r0 contains object. | 3831 __ pop(r0); // r0 contains object. |
| 3867 // if (object->IsSmi()) return the object. | 3832 // if (object->IsSmi()) return the object. |
| 3868 __ tst(r0, Operand(kSmiTagMask)); | 3833 __ tst(r0, Operand(kSmiTagMask)); |
| 3869 __ b(eq, &leave); | 3834 __ b(eq, &leave); |
| 3870 // It is a heap object - get map. | 3835 // It is a heap object - get map. |
| 3871 __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); | 3836 __ ldr(r1, FieldMemOperand(r0, HeapObject::kMapOffset)); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3900 __ str(r0, FieldMemOperand(r1, JSValue::kValueOffset)); | 3865 __ str(r0, FieldMemOperand(r1, JSValue::kValueOffset)); |
| 3901 // Update the write barrier. | 3866 // Update the write barrier. |
| 3902 __ mov(r2, Operand(JSValue::kValueOffset - kHeapObjectTag)); | 3867 __ mov(r2, Operand(JSValue::kValueOffset - kHeapObjectTag)); |
| 3903 __ RecordWrite(r1, r2, r3); | 3868 __ RecordWrite(r1, r2, r3); |
| 3904 // Leave. | 3869 // Leave. |
| 3905 __ bind(&leave); | 3870 __ bind(&leave); |
| 3906 __ push(r0); | 3871 __ push(r0); |
| 3907 } | 3872 } |
| 3908 | 3873 |
| 3909 | 3874 |
| 3910 void ArmCodeGenerator::GenerateTailCallWithArguments( | |
| 3911 ZoneList<Expression*>* args) { | |
| 3912 __ stop("ArmCodeGenerator::GenerateTailCallWithArguments - unreachable"); | |
| 3913 } | |
| 3914 | |
| 3915 | |
| 3916 void ArmCodeGenerator::GenerateSetArgument(ZoneList<Expression*>* args) { | |
| 3917 __ stop("ArmCodeGenerator::GenerateSetArgument - unreachable"); | |
| 3918 } | |
| 3919 | |
| 3920 | |
| 3921 void ArmCodeGenerator::GenerateSquashFrame(ZoneList<Expression*>* args) { | |
| 3922 __ stop("ArmCodeGenerator::GenerateSquashFrame - unreachable"); | |
| 3923 } | |
| 3924 | |
| 3925 | |
| 3926 void ArmCodeGenerator::GenerateExpandFrame(ZoneList<Expression*>* args) { | |
| 3927 __ stop("ArmCodeGenerator::GenerateExpandFrame - unreachable"); | |
| 3928 } | |
| 3929 | |
| 3930 | |
| 3931 void ArmCodeGenerator::GenerateIsSmi(ZoneList<Expression*>* args) { | 3875 void ArmCodeGenerator::GenerateIsSmi(ZoneList<Expression*>* args) { |
| 3932 ASSERT(args->length() == 1); | 3876 ASSERT(args->length() == 1); |
| 3933 Load(args->at(0)); | 3877 Load(args->at(0)); |
| 3934 __ pop(r0); | 3878 __ pop(r0); |
| 3935 __ tst(r0, Operand(kSmiTagMask)); | 3879 __ tst(r0, Operand(kSmiTagMask)); |
| 3936 cc_reg_ = eq; | 3880 cc_reg_ = eq; |
| 3937 } | 3881 } |
| 3938 | 3882 |
| 3939 | 3883 |
| 3940 void ArmCodeGenerator::GenerateIsNonNegativeSmi(ZoneList<Expression*>* args) { | 3884 void ArmCodeGenerator::GenerateIsNonNegativeSmi(ZoneList<Expression*>* args) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4013 // Load the two objects into registers and perform the comparison. | 3957 // Load the two objects into registers and perform the comparison. |
| 4014 Load(args->at(0)); | 3958 Load(args->at(0)); |
| 4015 Load(args->at(1)); | 3959 Load(args->at(1)); |
| 4016 __ pop(r0); | 3960 __ pop(r0); |
| 4017 __ pop(r1); | 3961 __ pop(r1); |
| 4018 __ cmp(r0, Operand(r1)); | 3962 __ cmp(r0, Operand(r1)); |
| 4019 cc_reg_ = eq; | 3963 cc_reg_ = eq; |
| 4020 } | 3964 } |
| 4021 | 3965 |
| 4022 | 3966 |
| 4023 void ArmCodeGenerator::GenerateShiftDownAndTailCall( | |
| 4024 ZoneList<Expression*>* args) { | |
| 4025 __ stop("ArmCodeGenerator::GenerateShiftDownAndTailCall - unreachable"); | |
| 4026 } | |
| 4027 | |
| 4028 | |
| 4029 void ArmCodeGenerator::VisitCallRuntime(CallRuntime* node) { | 3967 void ArmCodeGenerator::VisitCallRuntime(CallRuntime* node) { |
| 4030 if (CheckForInlineRuntimeCall(node)) return; | 3968 if (CheckForInlineRuntimeCall(node)) return; |
| 4031 | 3969 |
| 4032 ZoneList<Expression*>* args = node->arguments(); | 3970 ZoneList<Expression*>* args = node->arguments(); |
| 4033 Comment cmnt(masm_, "[ CallRuntime"); | 3971 Comment cmnt(masm_, "[ CallRuntime"); |
| 4034 Runtime::Function* function = node->function(); | 3972 Runtime::Function* function = node->function(); |
| 4035 | 3973 |
| 4036 if (function != NULL) { | 3974 if (function != NULL) { |
| 4037 // Push the arguments ("left-to-right"). | 3975 // Push the arguments ("left-to-right"). |
| 4038 for (int i = 0; i < args->length(); i++) Load(args->at(i)); | 3976 for (int i = 0; i < args->length(); i++) Load(args->at(i)); |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4640 bool is_eval) { | 4578 bool is_eval) { |
| 4641 Handle<Code> code = ArmCodeGenerator::MakeCode(fun, script, is_eval); | 4579 Handle<Code> code = ArmCodeGenerator::MakeCode(fun, script, is_eval); |
| 4642 if (!code.is_null()) { | 4580 if (!code.is_null()) { |
| 4643 Counters::total_compiled_code_size.Increment(code->instruction_size()); | 4581 Counters::total_compiled_code_size.Increment(code->instruction_size()); |
| 4644 } | 4582 } |
| 4645 return code; | 4583 return code; |
| 4646 } | 4584 } |
| 4647 | 4585 |
| 4648 | 4586 |
| 4649 } } // namespace v8::internal | 4587 } } // namespace v8::internal |
| OLD | NEW |