| 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 Register the_heap_number, Register scratch) | 64 Register the_heap_number, Register scratch) |
| 65 : PlatformCodeStub(isolate) { | 65 : PlatformCodeStub(isolate) { |
| 66 minor_key_ = IntRegisterBits::encode(the_int.code()) | | 66 minor_key_ = IntRegisterBits::encode(the_int.code()) | |
| 67 HeapNumberRegisterBits::encode(the_heap_number.code()) | | 67 HeapNumberRegisterBits::encode(the_heap_number.code()) | |
| 68 ScratchRegisterBits::encode(scratch.code()); | 68 ScratchRegisterBits::encode(scratch.code()); |
| 69 } | 69 } |
| 70 | 70 |
| 71 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); | 71 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); |
| 72 | 72 |
| 73 private: | 73 private: |
| 74 void Generate(MacroAssembler* masm); | |
| 75 | |
| 76 Register the_int() const { | 74 Register the_int() const { |
| 77 return Register::from_code(IntRegisterBits::decode(minor_key_)); | 75 return Register::from_code(IntRegisterBits::decode(minor_key_)); |
| 78 } | 76 } |
| 79 | 77 |
| 80 Register the_heap_number() const { | 78 Register the_heap_number() const { |
| 81 return Register::from_code(HeapNumberRegisterBits::decode(minor_key_)); | 79 return Register::from_code(HeapNumberRegisterBits::decode(minor_key_)); |
| 82 } | 80 } |
| 83 | 81 |
| 84 Register scratch() const { | 82 Register scratch() const { |
| 85 return Register::from_code(ScratchRegisterBits::decode(minor_key_)); | 83 return Register::from_code(ScratchRegisterBits::decode(minor_key_)); |
| 86 } | 84 } |
| 87 | 85 |
| 88 // Minor key encoding in 16 bits. | 86 // Minor key encoding in 16 bits. |
| 89 class IntRegisterBits: public BitField<int, 0, 4> {}; | 87 class IntRegisterBits: public BitField<int, 0, 4> {}; |
| 90 class HeapNumberRegisterBits: public BitField<int, 4, 4> {}; | 88 class HeapNumberRegisterBits: public BitField<int, 4, 4> {}; |
| 91 class ScratchRegisterBits: public BitField<int, 8, 4> {}; | 89 class ScratchRegisterBits: public BitField<int, 8, 4> {}; |
| 92 | 90 |
| 93 DEFINE_CODE_STUB(WriteInt32ToHeapNumber, PlatformCodeStub); | 91 DEFINE_PLATFORM_CODE_STUB(WriteInt32ToHeapNumber, PlatformCodeStub); |
| 94 }; | 92 }; |
| 95 | 93 |
| 96 | 94 |
| 97 class RecordWriteStub: public PlatformCodeStub { | 95 class RecordWriteStub: public PlatformCodeStub { |
| 98 public: | 96 public: |
| 99 RecordWriteStub(Isolate* isolate, | 97 RecordWriteStub(Isolate* isolate, |
| 100 Register object, | 98 Register object, |
| 101 Register value, | 99 Register value, |
| 102 Register address, | 100 Register address, |
| 103 RememberedSetAction remembered_set_action, | 101 RememberedSetAction remembered_set_action, |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 friend class RecordWriteStub; | 236 friend class RecordWriteStub; |
| 239 }; | 237 }; |
| 240 | 238 |
| 241 enum OnNoNeedToInformIncrementalMarker { | 239 enum OnNoNeedToInformIncrementalMarker { |
| 242 kReturnOnNoNeedToInformIncrementalMarker, | 240 kReturnOnNoNeedToInformIncrementalMarker, |
| 243 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker | 241 kUpdateRememberedSetOnNoNeedToInformIncrementalMarker |
| 244 }; | 242 }; |
| 245 | 243 |
| 246 virtual inline Major MajorKey() const FINAL OVERRIDE { return RecordWrite; } | 244 virtual inline Major MajorKey() const FINAL OVERRIDE { return RecordWrite; } |
| 247 | 245 |
| 248 void Generate(MacroAssembler* masm); | 246 virtual void Generate(MacroAssembler* masm) OVERRIDE; |
| 249 void GenerateIncremental(MacroAssembler* masm, Mode mode); | 247 void GenerateIncremental(MacroAssembler* masm, Mode mode); |
| 250 void CheckNeedsToInformIncrementalMarker( | 248 void CheckNeedsToInformIncrementalMarker( |
| 251 MacroAssembler* masm, | 249 MacroAssembler* masm, |
| 252 OnNoNeedToInformIncrementalMarker on_no_need, | 250 OnNoNeedToInformIncrementalMarker on_no_need, |
| 253 Mode mode); | 251 Mode mode); |
| 254 void InformIncrementalMarker(MacroAssembler* masm); | 252 void InformIncrementalMarker(MacroAssembler* masm); |
| 255 | 253 |
| 256 void Activate(Code* code) { | 254 void Activate(Code* code) { |
| 257 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); | 255 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); |
| 258 } | 256 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 | 289 |
| 292 | 290 |
| 293 // Trampoline stub to call into native code. To call safely into native code | 291 // Trampoline stub to call into native code. To call safely into native code |
| 294 // in the presence of compacting GC (which can move code objects) we need to | 292 // in the presence of compacting GC (which can move code objects) we need to |
| 295 // keep the code which called into native pinned in the memory. Currently the | 293 // keep the code which called into native pinned in the memory. Currently the |
| 296 // simplest approach is to generate such stub early enough so it can never be | 294 // simplest approach is to generate such stub early enough so it can never be |
| 297 // moved by GC | 295 // moved by GC |
| 298 class DirectCEntryStub: public PlatformCodeStub { | 296 class DirectCEntryStub: public PlatformCodeStub { |
| 299 public: | 297 public: |
| 300 explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 298 explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} |
| 301 void Generate(MacroAssembler* masm); | |
| 302 void GenerateCall(MacroAssembler* masm, Register target); | 299 void GenerateCall(MacroAssembler* masm, Register target); |
| 303 | 300 |
| 304 private: | 301 private: |
| 305 bool NeedsImmovableCode() { return true; } | 302 bool NeedsImmovableCode() { return true; } |
| 306 | 303 |
| 307 DEFINE_CODE_STUB(DirectCEntry, PlatformCodeStub); | 304 DEFINE_PLATFORM_CODE_STUB(DirectCEntry, PlatformCodeStub); |
| 308 }; | 305 }; |
| 309 | 306 |
| 310 | 307 |
| 311 class NameDictionaryLookupStub: public PlatformCodeStub { | 308 class NameDictionaryLookupStub: public PlatformCodeStub { |
| 312 public: | 309 public: |
| 313 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; | 310 enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; |
| 314 | 311 |
| 315 NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) | 312 NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) |
| 316 : PlatformCodeStub(isolate) { | 313 : PlatformCodeStub(isolate) { |
| 317 minor_key_ = LookupModeBits::encode(mode); | 314 minor_key_ = LookupModeBits::encode(mode); |
| 318 } | 315 } |
| 319 | 316 |
| 320 void Generate(MacroAssembler* masm); | |
| 321 | |
| 322 static void GenerateNegativeLookup(MacroAssembler* masm, | 317 static void GenerateNegativeLookup(MacroAssembler* masm, |
| 323 Label* miss, | 318 Label* miss, |
| 324 Label* done, | 319 Label* done, |
| 325 Register receiver, | 320 Register receiver, |
| 326 Register properties, | 321 Register properties, |
| 327 Handle<Name> name, | 322 Handle<Name> name, |
| 328 Register scratch0); | 323 Register scratch0); |
| 329 | 324 |
| 330 static void GeneratePositiveLookup(MacroAssembler* masm, | 325 static void GeneratePositiveLookup(MacroAssembler* masm, |
| 331 Label* miss, | 326 Label* miss, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 346 NameDictionary::kCapacityIndex * kPointerSize; | 341 NameDictionary::kCapacityIndex * kPointerSize; |
| 347 | 342 |
| 348 static const int kElementsStartOffset = | 343 static const int kElementsStartOffset = |
| 349 NameDictionary::kHeaderSize + | 344 NameDictionary::kHeaderSize + |
| 350 NameDictionary::kElementsStartIndex * kPointerSize; | 345 NameDictionary::kElementsStartIndex * kPointerSize; |
| 351 | 346 |
| 352 LookupMode mode() const { return LookupModeBits::decode(minor_key_); } | 347 LookupMode mode() const { return LookupModeBits::decode(minor_key_); } |
| 353 | 348 |
| 354 class LookupModeBits: public BitField<LookupMode, 0, 1> {}; | 349 class LookupModeBits: public BitField<LookupMode, 0, 1> {}; |
| 355 | 350 |
| 356 DEFINE_CODE_STUB(NameDictionaryLookup, PlatformCodeStub); | 351 DEFINE_PLATFORM_CODE_STUB(NameDictionaryLookup, PlatformCodeStub); |
| 357 }; | 352 }; |
| 358 | 353 |
| 359 } } // namespace v8::internal | 354 } } // namespace v8::internal |
| 360 | 355 |
| 361 #endif // V8_ARM_CODE_STUBS_ARM_H_ | 356 #endif // V8_ARM_CODE_STUBS_ARM_H_ |
| OLD | NEW |