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_CODE_STUBS_ARM_H_ | 5 #ifndef V8_ARM_CODE_STUBS_ARM_H_ |
6 #define V8_ARM_CODE_STUBS_ARM_H_ | 6 #define V8_ARM_CODE_STUBS_ARM_H_ |
7 | 7 |
8 namespace v8 { | 8 namespace v8 { |
9 namespace internal { | 9 namespace internal { |
10 | 10 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 | 72 |
73 Register scratch() const { | 73 Register scratch() const { |
74 return Register::from_code(ScratchRegisterBits::decode(minor_key_)); | 74 return Register::from_code(ScratchRegisterBits::decode(minor_key_)); |
75 } | 75 } |
76 | 76 |
77 // Minor key encoding in 16 bits. | 77 // Minor key encoding in 16 bits. |
78 class IntRegisterBits: public BitField<int, 0, 4> {}; | 78 class IntRegisterBits: public BitField<int, 0, 4> {}; |
79 class HeapNumberRegisterBits: public BitField<int, 4, 4> {}; | 79 class HeapNumberRegisterBits: public BitField<int, 4, 4> {}; |
80 class ScratchRegisterBits: public BitField<int, 8, 4> {}; | 80 class ScratchRegisterBits: public BitField<int, 8, 4> {}; |
81 | 81 |
| 82 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); |
82 DEFINE_PLATFORM_CODE_STUB(WriteInt32ToHeapNumber, PlatformCodeStub); | 83 DEFINE_PLATFORM_CODE_STUB(WriteInt32ToHeapNumber, PlatformCodeStub); |
83 }; | 84 }; |
84 | 85 |
85 | 86 |
86 class RecordWriteStub: public PlatformCodeStub { | 87 class RecordWriteStub: public PlatformCodeStub { |
87 public: | 88 public: |
88 RecordWriteStub(Isolate* isolate, | 89 RecordWriteStub(Isolate* isolate, |
89 Register object, | 90 Register object, |
90 Register value, | 91 Register value, |
91 Register address, | 92 Register address, |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 case INCREMENTAL_COMPACTION: | 162 case INCREMENTAL_COMPACTION: |
162 DCHECK(GetMode(stub) == STORE_BUFFER_ONLY); | 163 DCHECK(GetMode(stub) == STORE_BUFFER_ONLY); |
163 PatchNopIntoBranch(&masm, Assembler::kInstrSize); | 164 PatchNopIntoBranch(&masm, Assembler::kInstrSize); |
164 break; | 165 break; |
165 } | 166 } |
166 DCHECK(GetMode(stub) == mode); | 167 DCHECK(GetMode(stub) == mode); |
167 CpuFeatures::FlushICache(stub->instruction_start(), | 168 CpuFeatures::FlushICache(stub->instruction_start(), |
168 2 * Assembler::kInstrSize); | 169 2 * Assembler::kInstrSize); |
169 } | 170 } |
170 | 171 |
| 172 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); |
| 173 |
171 private: | 174 private: |
172 // This is a helper class for freeing up 3 scratch registers. The input is | 175 // This is a helper class for freeing up 3 scratch registers. The input is |
173 // two registers that must be preserved and one scratch register provided by | 176 // two registers that must be preserved and one scratch register provided by |
174 // the caller. | 177 // the caller. |
175 class RegisterAllocation { | 178 class RegisterAllocation { |
176 public: | 179 public: |
177 RegisterAllocation(Register object, | 180 RegisterAllocation(Register object, |
178 Register address, | 181 Register address, |
179 Register scratch0) | 182 Register scratch0) |
180 : object_(object), | 183 : object_(object), |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 // simplest approach is to generate such stub early enough so it can never be | 288 // simplest approach is to generate such stub early enough so it can never be |
286 // moved by GC | 289 // moved by GC |
287 class DirectCEntryStub: public PlatformCodeStub { | 290 class DirectCEntryStub: public PlatformCodeStub { |
288 public: | 291 public: |
289 explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 292 explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} |
290 void GenerateCall(MacroAssembler* masm, Register target); | 293 void GenerateCall(MacroAssembler* masm, Register target); |
291 | 294 |
292 private: | 295 private: |
293 bool NeedsImmovableCode() { return true; } | 296 bool NeedsImmovableCode() { return true; } |
294 | 297 |
| 298 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); |
295 DEFINE_PLATFORM_CODE_STUB(DirectCEntry, PlatformCodeStub); | 299 DEFINE_PLATFORM_CODE_STUB(DirectCEntry, PlatformCodeStub); |
296 }; | 300 }; |
297 | 301 |
298 | 302 |
299 class NameDictionaryLookupStub: public PlatformCodeStub { | 303 class NameDictionaryLookupStub: public PlatformCodeStub { |
300 public: | 304 public: |
301 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; | 305 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; |
302 | 306 |
303 NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) | 307 NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) |
304 : PlatformCodeStub(isolate) { | 308 : PlatformCodeStub(isolate) { |
(...skipping 27 matching lines...) Expand all Loading... |
332 NameDictionary::kCapacityIndex * kPointerSize; | 336 NameDictionary::kCapacityIndex * kPointerSize; |
333 | 337 |
334 static const int kElementsStartOffset = | 338 static const int kElementsStartOffset = |
335 NameDictionary::kHeaderSize + | 339 NameDictionary::kHeaderSize + |
336 NameDictionary::kElementsStartIndex * kPointerSize; | 340 NameDictionary::kElementsStartIndex * kPointerSize; |
337 | 341 |
338 LookupMode mode() const { return LookupModeBits::decode(minor_key_); } | 342 LookupMode mode() const { return LookupModeBits::decode(minor_key_); } |
339 | 343 |
340 class LookupModeBits: public BitField<LookupMode, 0, 1> {}; | 344 class LookupModeBits: public BitField<LookupMode, 0, 1> {}; |
341 | 345 |
| 346 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); |
342 DEFINE_PLATFORM_CODE_STUB(NameDictionaryLookup, PlatformCodeStub); | 347 DEFINE_PLATFORM_CODE_STUB(NameDictionaryLookup, PlatformCodeStub); |
343 }; | 348 }; |
344 | 349 |
345 } } // namespace v8::internal | 350 } } // namespace v8::internal |
346 | 351 |
347 #endif // V8_ARM_CODE_STUBS_ARM_H_ | 352 #endif // V8_ARM_CODE_STUBS_ARM_H_ |
OLD | NEW |