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 #ifndef V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 5 #ifndef V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
6 #define V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 6 #define V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
10 #include "src/frames.h" | 10 #include "src/frames.h" |
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 // remove in a register (or no_reg, if there is nothing to remove). | 601 // remove in a register (or no_reg, if there is nothing to remove). |
602 void LeaveExitFrame(bool save_doubles, Register argument_count, | 602 void LeaveExitFrame(bool save_doubles, Register argument_count, |
603 bool restore_context, | 603 bool restore_context, |
604 bool argument_count_is_length = false); | 604 bool argument_count_is_length = false); |
605 | 605 |
606 // Get the actual activation frame alignment for target environment. | 606 // Get the actual activation frame alignment for target environment. |
607 static int ActivationFrameAlignment(); | 607 static int ActivationFrameAlignment(); |
608 | 608 |
609 void LoadContext(Register dst, int context_chain_length); | 609 void LoadContext(Register dst, int context_chain_length); |
610 | 610 |
611 // Load the global proxy from the current context. | |
612 void LoadGlobalProxy(Register dst); | |
613 | |
614 // Conditionally load the cached Array transitioned map of type | 611 // Conditionally load the cached Array transitioned map of type |
615 // transitioned_kind from the native context if the map in register | 612 // transitioned_kind from the native context if the map in register |
616 // map_in_out is the cached Array map in the native context of | 613 // map_in_out is the cached Array map in the native context of |
617 // expected_kind. | 614 // expected_kind. |
618 void LoadTransitionedArrayMapConditional( | 615 void LoadTransitionedArrayMapConditional( |
619 ElementsKind expected_kind, | 616 ElementsKind expected_kind, |
620 ElementsKind transitioned_kind, | 617 ElementsKind transitioned_kind, |
621 Register map_in_out, | 618 Register map_in_out, |
622 Register scratch, | 619 Register scratch, |
623 Label* no_map_match); | 620 Label* no_map_match); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 | 940 |
944 void GetWeakValue(Register value, Handle<WeakCell> cell); | 941 void GetWeakValue(Register value, Handle<WeakCell> cell); |
945 | 942 |
946 // Load the value of the weak cell in the value register. Branch to the given | 943 // Load the value of the weak cell in the value register. Branch to the given |
947 // miss label if the weak cell was cleared. | 944 // miss label if the weak cell was cleared. |
948 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); | 945 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); |
949 | 946 |
950 // Compare the object in a register to a value from the root list. | 947 // Compare the object in a register to a value from the root list. |
951 // Uses the ip register as scratch. | 948 // Uses the ip register as scratch. |
952 void CompareRoot(Register obj, Heap::RootListIndex index); | 949 void CompareRoot(Register obj, Heap::RootListIndex index); |
953 void PushRoot(Heap::RootListIndex index) { | |
954 LoadRoot(ip, index); | |
955 Push(ip); | |
956 } | |
957 | 950 |
958 // Compare the object in a register to a value and jump if they are equal. | |
959 void JumpIfRoot(Register with, Heap::RootListIndex index, Label* if_equal) { | |
960 CompareRoot(with, index); | |
961 b(eq, if_equal); | |
962 } | |
963 | |
964 // Compare the object in a register to a value and jump if they are not equal. | |
965 void JumpIfNotRoot(Register with, Heap::RootListIndex index, | |
966 Label* if_not_equal) { | |
967 CompareRoot(with, index); | |
968 b(ne, if_not_equal); | |
969 } | |
970 | 951 |
971 // Load and check the instance type of an object for being a string. | 952 // Load and check the instance type of an object for being a string. |
972 // Loads the type into the second argument register. | 953 // Loads the type into the second argument register. |
973 // Returns a condition that will be enabled if the object was a string | 954 // Returns a condition that will be enabled if the object was a string |
974 // and the passed-in condition passed. If the passed-in condition failed | 955 // and the passed-in condition passed. If the passed-in condition failed |
975 // then flags remain unchanged. | 956 // then flags remain unchanged. |
976 Condition IsObjectStringType(Register obj, | 957 Condition IsObjectStringType(Register obj, |
977 Register type, | 958 Register type, |
978 Condition cond = al) { | 959 Condition cond = al) { |
979 ldr(type, FieldMemOperand(obj, HeapObject::kMapOffset), cond); | 960 ldr(type, FieldMemOperand(obj, HeapObject::kMapOffset), cond); |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 // Abort execution if argument is a smi, enabled via --debug-code. | 1281 // Abort execution if argument is a smi, enabled via --debug-code. |
1301 void AssertNotSmi(Register object); | 1282 void AssertNotSmi(Register object); |
1302 void AssertSmi(Register object); | 1283 void AssertSmi(Register object); |
1303 | 1284 |
1304 // Abort execution if argument is not a string, enabled via --debug-code. | 1285 // Abort execution if argument is not a string, enabled via --debug-code. |
1305 void AssertString(Register object); | 1286 void AssertString(Register object); |
1306 | 1287 |
1307 // Abort execution if argument is not a name, enabled via --debug-code. | 1288 // Abort execution if argument is not a name, enabled via --debug-code. |
1308 void AssertName(Register object); | 1289 void AssertName(Register object); |
1309 | 1290 |
1310 // Abort execution if argument is not a JSFunction, enabled via --debug-code. | |
1311 void AssertFunction(Register object); | |
1312 | |
1313 // Abort execution if argument is not undefined or an AllocationSite, enabled | 1291 // Abort execution if argument is not undefined or an AllocationSite, enabled |
1314 // via --debug-code. | 1292 // via --debug-code. |
1315 void AssertUndefinedOrAllocationSite(Register object, Register scratch); | 1293 void AssertUndefinedOrAllocationSite(Register object, Register scratch); |
1316 | 1294 |
1317 // Abort execution if reg is not the root value with the given index, | 1295 // Abort execution if reg is not the root value with the given index, |
1318 // enabled via --debug-code. | 1296 // enabled via --debug-code. |
1319 void AssertIsRoot(Register reg, Heap::RootListIndex index); | 1297 void AssertIsRoot(Register reg, Heap::RootListIndex index); |
1320 | 1298 |
1321 // --------------------------------------------------------------------------- | 1299 // --------------------------------------------------------------------------- |
1322 // HeapNumber utilities | 1300 // HeapNumber utilities |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1568 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 1546 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
1569 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 1547 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
1570 #else | 1548 #else |
1571 #define ACCESS_MASM(masm) masm-> | 1549 #define ACCESS_MASM(masm) masm-> |
1572 #endif | 1550 #endif |
1573 | 1551 |
1574 | 1552 |
1575 } } // namespace v8::internal | 1553 } } // namespace v8::internal |
1576 | 1554 |
1577 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 1555 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
OLD | NEW |