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/arm/assembler-arm.h" | 8 #include "src/arm/assembler-arm.h" |
9 #include "src/assembler.h" | 9 #include "src/assembler.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 void InvokeFunction(Handle<JSFunction> function, | 704 void InvokeFunction(Handle<JSFunction> function, |
705 const ParameterCount& expected, | 705 const ParameterCount& expected, |
706 const ParameterCount& actual, | 706 const ParameterCount& actual, |
707 InvokeFlag flag, | 707 InvokeFlag flag, |
708 const CallWrapper& call_wrapper); | 708 const CallWrapper& call_wrapper); |
709 | 709 |
710 void IsObjectJSStringType(Register object, | 710 void IsObjectJSStringType(Register object, |
711 Register scratch, | 711 Register scratch, |
712 Label* fail); | 712 Label* fail); |
713 | 713 |
714 void IsObjectNameType(Register object, | |
715 Register scratch, | |
716 Label* fail); | |
717 | |
718 // Frame restart support | 714 // Frame restart support |
719 void MaybeDropFrames(); | 715 void MaybeDropFrames(); |
720 | 716 |
721 // Exception handling | 717 // Exception handling |
722 | 718 |
723 // Push a new stack handler and link into stack handler chain. | 719 // Push a new stack handler and link into stack handler chain. |
724 void PushStackHandler(); | 720 void PushStackHandler(); |
725 | 721 |
726 // Unlink the stack handler on top of the stack from the stack handler chain. | 722 // Unlink the stack handler on top of the stack from the stack handler chain. |
727 // Must preserve the result register. | 723 // Must preserve the result register. |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 Label* fail, | 868 Label* fail, |
873 SmiCheckType smi_check_type); | 869 SmiCheckType smi_check_type); |
874 | 870 |
875 | 871 |
876 void CheckMap(Register obj, | 872 void CheckMap(Register obj, |
877 Register scratch, | 873 Register scratch, |
878 Heap::RootListIndex index, | 874 Heap::RootListIndex index, |
879 Label* fail, | 875 Label* fail, |
880 SmiCheckType smi_check_type); | 876 SmiCheckType smi_check_type); |
881 | 877 |
882 | |
883 // Check if the map of an object is equal to a specified weak map and branch | |
884 // to a specified target if equal. Skip the smi check if not required | |
885 // (object is known to be a heap object) | |
886 void DispatchWeakMap(Register obj, Register scratch1, Register scratch2, | |
887 Handle<WeakCell> cell, Handle<Code> success, | |
888 SmiCheckType smi_check_type); | |
889 | |
890 // Compare the given value and the value of weak cell. | |
891 void CmpWeakValue(Register value, Handle<WeakCell> cell, Register scratch); | |
892 | |
893 void GetWeakValue(Register value, Handle<WeakCell> cell); | 878 void GetWeakValue(Register value, Handle<WeakCell> cell); |
894 | 879 |
895 // Load the value of the weak cell in the value register. Branch to the given | 880 // Load the value of the weak cell in the value register. Branch to the given |
896 // miss label if the weak cell was cleared. | 881 // miss label if the weak cell was cleared. |
897 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); | 882 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); |
898 | 883 |
899 // Compare the object in a register to a value from the root list. | 884 // Compare the object in a register to a value from the root list. |
900 // Uses the ip register as scratch. | 885 // Uses the ip register as scratch. |
901 void CompareRoot(Register obj, Heap::RootListIndex index); | 886 void CompareRoot(Register obj, Heap::RootListIndex index); |
902 void PushRoot(Heap::RootListIndex index) { | 887 void PushRoot(Heap::RootListIndex index) { |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1131 void DecrementCounter(StatsCounter* counter, int value, | 1116 void DecrementCounter(StatsCounter* counter, int value, |
1132 Register scratch1, Register scratch2); | 1117 Register scratch1, Register scratch2); |
1133 | 1118 |
1134 | 1119 |
1135 // --------------------------------------------------------------------------- | 1120 // --------------------------------------------------------------------------- |
1136 // Debugging | 1121 // Debugging |
1137 | 1122 |
1138 // Calls Abort(msg) if the condition cond is not satisfied. | 1123 // Calls Abort(msg) if the condition cond is not satisfied. |
1139 // Use --debug_code to enable. | 1124 // Use --debug_code to enable. |
1140 void Assert(Condition cond, BailoutReason reason); | 1125 void Assert(Condition cond, BailoutReason reason); |
1141 void AssertFastElements(Register elements); | |
1142 | 1126 |
1143 // Like Assert(), but always enabled. | 1127 // Like Assert(), but always enabled. |
1144 void Check(Condition cond, BailoutReason reason); | 1128 void Check(Condition cond, BailoutReason reason); |
1145 | 1129 |
1146 // Print a message to stdout and abort execution. | 1130 // Print a message to stdout and abort execution. |
1147 void Abort(BailoutReason msg); | 1131 void Abort(BailoutReason msg); |
1148 | 1132 |
1149 // Verify restrictions about code generated in stubs. | 1133 // Verify restrictions about code generated in stubs. |
1150 void set_generating_stub(bool value) { generating_stub_ = value; } | 1134 void set_generating_stub(bool value) { generating_stub_ = value; } |
1151 bool generating_stub() { return generating_stub_; } | 1135 bool generating_stub() { return generating_stub_; } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1220 void NonNegativeSmiTst(Register value); | 1204 void NonNegativeSmiTst(Register value); |
1221 // Jump if the register contains a smi. | 1205 // Jump if the register contains a smi. |
1222 void JumpIfSmi(Register value, Label* smi_label); | 1206 void JumpIfSmi(Register value, Label* smi_label); |
1223 // Jump if either of the registers contain a non-smi. | 1207 // Jump if either of the registers contain a non-smi. |
1224 void JumpIfNotSmi(Register value, Label* not_smi_label); | 1208 void JumpIfNotSmi(Register value, Label* not_smi_label); |
1225 // Jump if either of the registers contain a non-smi. | 1209 // Jump if either of the registers contain a non-smi. |
1226 void JumpIfNotBothSmi(Register reg1, Register reg2, Label* on_not_both_smi); | 1210 void JumpIfNotBothSmi(Register reg1, Register reg2, Label* on_not_both_smi); |
1227 // Jump if either of the registers contain a smi. | 1211 // Jump if either of the registers contain a smi. |
1228 void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi); | 1212 void JumpIfEitherSmi(Register reg1, Register reg2, Label* on_either_smi); |
1229 | 1213 |
1230 // Abort execution if argument is a number, enabled via --debug-code. | |
1231 void AssertNotNumber(Register object); | |
1232 | |
1233 // Abort execution if argument is a smi, enabled via --debug-code. | 1214 // Abort execution if argument is a smi, enabled via --debug-code. |
1234 void AssertNotSmi(Register object); | 1215 void AssertNotSmi(Register object); |
1235 void AssertSmi(Register object); | 1216 void AssertSmi(Register object); |
1236 | 1217 |
1237 // Abort execution if argument is not a string, enabled via --debug-code. | |
1238 void AssertString(Register object); | |
1239 | |
1240 // Abort execution if argument is not a name, enabled via --debug-code. | |
1241 void AssertName(Register object); | |
1242 | |
1243 // Abort execution if argument is not a JSFunction, enabled via --debug-code. | 1218 // Abort execution if argument is not a JSFunction, enabled via --debug-code. |
1244 void AssertFunction(Register object); | 1219 void AssertFunction(Register object); |
1245 | 1220 |
1246 // Abort execution if argument is not a JSBoundFunction, | 1221 // Abort execution if argument is not a JSBoundFunction, |
1247 // enabled via --debug-code. | 1222 // enabled via --debug-code. |
1248 void AssertBoundFunction(Register object); | 1223 void AssertBoundFunction(Register object); |
1249 | 1224 |
1250 // Abort execution if argument is not a JSGeneratorObject, | 1225 // Abort execution if argument is not a JSGeneratorObject, |
1251 // enabled via --debug-code. | 1226 // enabled via --debug-code. |
1252 void AssertGeneratorObject(Register object); | 1227 void AssertGeneratorObject(Register object); |
1253 | 1228 |
1254 // Abort execution if argument is not a JSReceiver, enabled via --debug-code. | |
1255 void AssertReceiver(Register object); | |
1256 | |
1257 // Abort execution if argument is not undefined or an AllocationSite, enabled | 1229 // Abort execution if argument is not undefined or an AllocationSite, enabled |
1258 // via --debug-code. | 1230 // via --debug-code. |
1259 void AssertUndefinedOrAllocationSite(Register object, Register scratch); | 1231 void AssertUndefinedOrAllocationSite(Register object, Register scratch); |
1260 | 1232 |
1261 // Abort execution if reg is not the root value with the given index, | 1233 // Abort execution if reg is not the root value with the given index, |
1262 // enabled via --debug-code. | 1234 // enabled via --debug-code. |
1263 void AssertIsRoot(Register reg, Heap::RootListIndex index); | 1235 void AssertIsRoot(Register reg, Heap::RootListIndex index); |
1264 | 1236 |
1265 // --------------------------------------------------------------------------- | 1237 // --------------------------------------------------------------------------- |
1266 // HeapNumber utilities | 1238 // HeapNumber utilities |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 inline MemOperand NativeContextMemOperand() { | 1439 inline MemOperand NativeContextMemOperand() { |
1468 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); | 1440 return ContextMemOperand(cp, Context::NATIVE_CONTEXT_INDEX); |
1469 } | 1441 } |
1470 | 1442 |
1471 #define ACCESS_MASM(masm) masm-> | 1443 #define ACCESS_MASM(masm) masm-> |
1472 | 1444 |
1473 } // namespace internal | 1445 } // namespace internal |
1474 } // namespace v8 | 1446 } // namespace v8 |
1475 | 1447 |
1476 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 1448 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
OLD | NEW |