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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 __ add(r0, r0, Operand(num_extra_args + 1)); | 70 __ add(r0, r0, Operand(num_extra_args + 1)); |
71 __ JumpToExternalReference(ExternalReference(id, masm->isolate())); | 71 __ JumpToExternalReference(ExternalReference(id, masm->isolate())); |
72 } | 72 } |
73 | 73 |
74 | 74 |
75 // Load the built-in InternalArray function from the current context. | 75 // Load the built-in InternalArray function from the current context. |
76 static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, | 76 static void GenerateLoadInternalArrayFunction(MacroAssembler* masm, |
77 Register result) { | 77 Register result) { |
78 // Load the native context. | 78 // Load the native context. |
79 | 79 |
80 __ ldr(result, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_INDEX))); | 80 __ ldr(result, |
| 81 MemOperand(cp, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
81 __ ldr(result, | 82 __ ldr(result, |
82 FieldMemOperand(result, GlobalObject::kNativeContextOffset)); | 83 FieldMemOperand(result, GlobalObject::kNativeContextOffset)); |
83 // Load the InternalArray function from the native context. | 84 // Load the InternalArray function from the native context. |
84 __ ldr(result, | 85 __ ldr(result, |
85 MemOperand(result, | 86 MemOperand(result, |
86 Context::SlotOffset( | 87 Context::SlotOffset( |
87 Context::INTERNAL_ARRAY_FUNCTION_INDEX))); | 88 Context::INTERNAL_ARRAY_FUNCTION_INDEX))); |
88 } | 89 } |
89 | 90 |
90 | 91 |
91 // Load the built-in Array function from the current context. | 92 // Load the built-in Array function from the current context. |
92 static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { | 93 static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) { |
93 // Load the native context. | 94 // Load the native context. |
94 | 95 |
95 __ ldr(result, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_INDEX))); | 96 __ ldr(result, |
| 97 MemOperand(cp, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
96 __ ldr(result, | 98 __ ldr(result, |
97 FieldMemOperand(result, GlobalObject::kNativeContextOffset)); | 99 FieldMemOperand(result, GlobalObject::kNativeContextOffset)); |
98 // Load the Array function from the native context. | 100 // Load the Array function from the native context. |
99 __ ldr(result, | 101 __ ldr(result, |
100 MemOperand(result, | 102 MemOperand(result, |
101 Context::SlotOffset(Context::ARRAY_FUNCTION_INDEX))); | 103 Context::SlotOffset(Context::ARRAY_FUNCTION_INDEX))); |
102 } | 104 } |
103 | 105 |
104 | 106 |
105 // Allocate an empty JSArray. The allocated array is put into the result | 107 // Allocate an empty JSArray. The allocated array is put into the result |
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 | 1398 |
1397 // Restore the function to r1, and the flag to r4. | 1399 // Restore the function to r1, and the flag to r4. |
1398 __ ldr(r1, MemOperand(sp, r0, LSL, kPointerSizeLog2)); | 1400 __ ldr(r1, MemOperand(sp, r0, LSL, kPointerSizeLog2)); |
1399 __ mov(r4, Operand(0, RelocInfo::NONE)); | 1401 __ mov(r4, Operand(0, RelocInfo::NONE)); |
1400 __ jmp(&patch_receiver); | 1402 __ jmp(&patch_receiver); |
1401 | 1403 |
1402 // Use the global receiver object from the called function as the | 1404 // Use the global receiver object from the called function as the |
1403 // receiver. | 1405 // receiver. |
1404 __ bind(&use_global_receiver); | 1406 __ bind(&use_global_receiver); |
1405 const int kGlobalIndex = | 1407 const int kGlobalIndex = |
1406 Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize; | 1408 Context::kHeaderSize + Context::GLOBAL_OBJECT_INDEX * kPointerSize; |
1407 __ ldr(r2, FieldMemOperand(cp, kGlobalIndex)); | 1409 __ ldr(r2, FieldMemOperand(cp, kGlobalIndex)); |
1408 __ ldr(r2, FieldMemOperand(r2, GlobalObject::kNativeContextOffset)); | 1410 __ ldr(r2, FieldMemOperand(r2, GlobalObject::kNativeContextOffset)); |
1409 __ ldr(r2, FieldMemOperand(r2, kGlobalIndex)); | 1411 __ ldr(r2, FieldMemOperand(r2, kGlobalIndex)); |
1410 __ ldr(r2, FieldMemOperand(r2, GlobalObject::kGlobalReceiverOffset)); | 1412 __ ldr(r2, FieldMemOperand(r2, GlobalObject::kGlobalReceiverOffset)); |
1411 | 1413 |
1412 __ bind(&patch_receiver); | 1414 __ bind(&patch_receiver); |
1413 __ add(r3, sp, Operand(r0, LSL, kPointerSizeLog2)); | 1415 __ add(r3, sp, Operand(r0, LSL, kPointerSizeLog2)); |
1414 __ str(r2, MemOperand(r3, -kPointerSize)); | 1416 __ str(r2, MemOperand(r3, -kPointerSize)); |
1415 | 1417 |
1416 __ jmp(&shift_arguments); | 1418 __ jmp(&shift_arguments); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1591 // Convert the receiver to a regular object. | 1593 // Convert the receiver to a regular object. |
1592 // r0: receiver | 1594 // r0: receiver |
1593 __ bind(&call_to_object); | 1595 __ bind(&call_to_object); |
1594 __ push(r0); | 1596 __ push(r0); |
1595 __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION); | 1597 __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION); |
1596 __ b(&push_receiver); | 1598 __ b(&push_receiver); |
1597 | 1599 |
1598 // Use the current global receiver object as the receiver. | 1600 // Use the current global receiver object as the receiver. |
1599 __ bind(&use_global_receiver); | 1601 __ bind(&use_global_receiver); |
1600 const int kGlobalOffset = | 1602 const int kGlobalOffset = |
1601 Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize; | 1603 Context::kHeaderSize + Context::GLOBAL_OBJECT_INDEX * kPointerSize; |
1602 __ ldr(r0, FieldMemOperand(cp, kGlobalOffset)); | 1604 __ ldr(r0, FieldMemOperand(cp, kGlobalOffset)); |
1603 __ ldr(r0, FieldMemOperand(r0, GlobalObject::kNativeContextOffset)); | 1605 __ ldr(r0, FieldMemOperand(r0, GlobalObject::kNativeContextOffset)); |
1604 __ ldr(r0, FieldMemOperand(r0, kGlobalOffset)); | 1606 __ ldr(r0, FieldMemOperand(r0, kGlobalOffset)); |
1605 __ ldr(r0, FieldMemOperand(r0, GlobalObject::kGlobalReceiverOffset)); | 1607 __ ldr(r0, FieldMemOperand(r0, GlobalObject::kGlobalReceiverOffset)); |
1606 | 1608 |
1607 // Push the receiver. | 1609 // Push the receiver. |
1608 // r0: receiver | 1610 // r0: receiver |
1609 __ bind(&push_receiver); | 1611 __ bind(&push_receiver); |
1610 __ push(r0); | 1612 __ push(r0); |
1611 | 1613 |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1797 __ bind(&dont_adapt_arguments); | 1799 __ bind(&dont_adapt_arguments); |
1798 __ Jump(r3); | 1800 __ Jump(r3); |
1799 } | 1801 } |
1800 | 1802 |
1801 | 1803 |
1802 #undef __ | 1804 #undef __ |
1803 | 1805 |
1804 } } // namespace v8::internal | 1806 } } // namespace v8::internal |
1805 | 1807 |
1806 #endif // V8_TARGET_ARCH_ARM | 1808 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |