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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 // on access to global objects across environments. The holder register | 183 // on access to global objects across environments. The holder register |
184 // is left untouched, whereas both scratch registers are clobbered. | 184 // is left untouched, whereas both scratch registers are clobbered. |
185 void CheckAccessGlobalProxy(Register holder_reg, | 185 void CheckAccessGlobalProxy(Register holder_reg, |
186 Register scratch, | 186 Register scratch, |
187 Label* miss); | 187 Label* miss); |
188 | 188 |
189 | 189 |
190 // --------------------------------------------------------------------------- | 190 // --------------------------------------------------------------------------- |
191 // Allocation support | 191 // Allocation support |
192 | 192 |
193 // Allocate an object in new space. The object_size is specified in words (not | 193 // Allocate an object in new space. If the new space is exhausted control |
194 // bytes). If the new space is exhausted control continues at the gc_required | 194 // continues at the gc_required label. The allocated object is returned in |
195 // label. The allocated object is returned in result. If the flag | 195 // result. If the flag tag_allocated_object is true the result is tagged as |
196 // tag_allocated_object is true the result is tagged as as a heap object. | 196 // as a heap object. |
197 void AllocateObjectInNewSpace(int object_size, | 197 void AllocateObjectInNewSpace(int object_size, |
198 Register result, | 198 Register result, |
199 Register scratch1, | 199 Register scratch1, |
200 Register scratch2, | 200 Register scratch2, |
201 Label* gc_required, | 201 Label* gc_required, |
202 bool tag_allocated_object); | 202 bool tag_allocated_object); |
203 void AllocateObjectInNewSpace(Register object_size, | |
204 Register result, | |
205 Register scratch1, | |
206 Register scratch2, | |
207 Label* gc_required, | |
208 bool tag_allocated_object); | |
209 | |
210 // Undo allocation in new space. The object passed and objects allocated after | |
211 // it will no longer be allocated. The caller must make sure that no pointers | |
212 // are left to the object(s) no longer allocated as they would be invalid when | |
213 // allocation is undone. | |
214 void UndoAllocationInNewSpace(Register object, Register scratch); | |
215 | 203 |
216 // --------------------------------------------------------------------------- | 204 // --------------------------------------------------------------------------- |
217 // Support functions. | 205 // Support functions. |
218 | 206 |
219 // Try to get function prototype of a function and puts the value in | 207 // Try to get function prototype of a function and puts the value in |
220 // the result register. Checks that the function really is a | 208 // the result register. Checks that the function really is a |
221 // function and jumps to the miss label if the fast checks fail. The | 209 // function and jumps to the miss label if the fast checks fail. The |
222 // function register will be untouched; the other registers may be | 210 // function register will be untouched; the other registers may be |
223 // clobbered. | 211 // clobbered. |
224 void TryGetFunctionPrototype(Register function, | 212 void TryGetFunctionPrototype(Register function, |
225 Register result, | 213 Register result, |
226 Register scratch, | 214 Register scratch, |
227 Label* miss); | 215 Label* miss); |
228 | 216 |
229 // Compare object type for heap object. heap_object contains a non-Smi | 217 // Compare object type for heap object. heap_object contains a non-Smi |
230 // whose object type should be compared with the given type. This both | 218 // whose object type should be compared with the given type. This both |
231 // sets the flags and leaves the object type in the type_reg register. | 219 // sets the flags and leaves the object type in the type_reg register. |
232 // It leaves the map in the map register (unless the type_reg and map register | 220 // It leaves the map in the map register (unless the type_reg and map register |
233 // are the same register). It leaves the heap object in the heap_object | 221 // are the same register). It leaves the heap object in the heap_object |
234 // register unless the heap_object register is the same register as one of the | 222 // register unless the heap_object register is the same register as one of the |
235 // other registers. | 223 // other // registers. |
236 void CompareObjectType(Register heap_object, | 224 void CompareObjectType(Register heap_object, |
237 Register map, | 225 Register map, |
238 Register type_reg, | 226 Register type_reg, |
239 InstanceType type); | 227 InstanceType type); |
240 | 228 |
241 // Compare instance type in a map. map contains a valid map object whose | |
242 // object type should be compared with the given type. This both | |
243 // sets the flags and leaves the object type in the type_reg register. It | |
244 // leaves the heap object in the heap_object register unless the heap_object | |
245 // register is the same register as type_reg. | |
246 void CompareInstanceType(Register map, | |
247 Register type_reg, | |
248 InstanceType type); | |
249 | |
250 inline void BranchOnSmi(Register value, Label* smi_label) { | 229 inline void BranchOnSmi(Register value, Label* smi_label) { |
251 tst(value, Operand(kSmiTagMask)); | 230 tst(value, Operand(kSmiTagMask)); |
252 b(eq, smi_label); | 231 b(eq, smi_label); |
253 } | 232 } |
254 | 233 |
255 inline void BranchOnNotSmi(Register value, Label* not_smi_label) { | 234 inline void BranchOnNotSmi(Register value, Label* not_smi_label) { |
256 tst(value, Operand(kSmiTagMask)); | 235 tst(value, Operand(kSmiTagMask)); |
257 b(ne, not_smi_label); | 236 b(ne, not_smi_label); |
258 } | 237 } |
259 | 238 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 354 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
376 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 355 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
377 #else | 356 #else |
378 #define ACCESS_MASM(masm) masm-> | 357 #define ACCESS_MASM(masm) masm-> |
379 #endif | 358 #endif |
380 | 359 |
381 | 360 |
382 } } // namespace v8::internal | 361 } } // namespace v8::internal |
383 | 362 |
384 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 363 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
OLD | NEW |