OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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_IA32_CODE_STUBS_IA32_H_ | 5 #ifndef V8_IA32_CODE_STUBS_IA32_H_ |
6 #define V8_IA32_CODE_STUBS_IA32_H_ | 6 #define V8_IA32_CODE_STUBS_IA32_H_ |
7 | 7 |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 12 matching lines...) Expand all Loading... |
23 | 23 |
24 void Generate(MacroAssembler* masm); | 24 void Generate(MacroAssembler* masm); |
25 | 25 |
26 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); | 26 static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); |
27 virtual bool SometimesSetsUpAFrame() { return false; } | 27 virtual bool SometimesSetsUpAFrame() { return false; } |
28 | 28 |
29 private: | 29 private: |
30 SaveFPRegsMode save_doubles_; | 30 SaveFPRegsMode save_doubles_; |
31 | 31 |
32 Major MajorKey() const { return StoreBufferOverflow; } | 32 Major MajorKey() const { return StoreBufferOverflow; } |
33 int MinorKey() const { return (save_doubles_ == kSaveFPRegs) ? 1 : 0; } | 33 uint32_t MinorKey() const { return (save_doubles_ == kSaveFPRegs) ? 1 : 0; } |
34 }; | 34 }; |
35 | 35 |
36 | 36 |
37 class StringHelper : public AllStatic { | 37 class StringHelper : public AllStatic { |
38 public: | 38 public: |
39 // Generate code for copying characters using the rep movs instruction. | 39 // Generate code for copying characters using the rep movs instruction. |
40 // Copies ecx characters from esi to edi. Copying of overlapping regions is | 40 // Copies ecx characters from esi to edi. Copying of overlapping regions is |
41 // not supported. | 41 // not supported. |
42 static void GenerateCopyCharacters(MacroAssembler* masm, | 42 static void GenerateCopyCharacters(MacroAssembler* masm, |
43 Register dest, | 43 Register dest, |
(...skipping 19 matching lines...) Expand all Loading... |
63 DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); | 63 DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); |
64 }; | 64 }; |
65 | 65 |
66 | 66 |
67 class SubStringStub: public PlatformCodeStub { | 67 class SubStringStub: public PlatformCodeStub { |
68 public: | 68 public: |
69 explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 69 explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {} |
70 | 70 |
71 private: | 71 private: |
72 Major MajorKey() const { return SubString; } | 72 Major MajorKey() const { return SubString; } |
73 int MinorKey() const { return 0; } | 73 uint32_t MinorKey() const { return 0; } |
74 | 74 |
75 void Generate(MacroAssembler* masm); | 75 void Generate(MacroAssembler* masm); |
76 }; | 76 }; |
77 | 77 |
78 | 78 |
79 class StringCompareStub: public PlatformCodeStub { | 79 class StringCompareStub: public PlatformCodeStub { |
80 public: | 80 public: |
81 explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) { } | 81 explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) { } |
82 | 82 |
83 // Compares two flat ASCII strings and returns result in eax. | 83 // Compares two flat ASCII strings and returns result in eax. |
84 static void GenerateCompareFlatAsciiStrings(MacroAssembler* masm, | 84 static void GenerateCompareFlatAsciiStrings(MacroAssembler* masm, |
85 Register left, | 85 Register left, |
86 Register right, | 86 Register right, |
87 Register scratch1, | 87 Register scratch1, |
88 Register scratch2, | 88 Register scratch2, |
89 Register scratch3); | 89 Register scratch3); |
90 | 90 |
91 // Compares two flat ASCII strings for equality and returns result | 91 // Compares two flat ASCII strings for equality and returns result |
92 // in eax. | 92 // in eax. |
93 static void GenerateFlatAsciiStringEquals(MacroAssembler* masm, | 93 static void GenerateFlatAsciiStringEquals(MacroAssembler* masm, |
94 Register left, | 94 Register left, |
95 Register right, | 95 Register right, |
96 Register scratch1, | 96 Register scratch1, |
97 Register scratch2); | 97 Register scratch2); |
98 | 98 |
99 private: | 99 private: |
100 virtual Major MajorKey() const { return StringCompare; } | 100 virtual Major MajorKey() const { return StringCompare; } |
101 virtual int MinorKey() const { return 0; } | 101 virtual uint32_t MinorKey() const { return 0; } |
102 virtual void Generate(MacroAssembler* masm); | 102 virtual void Generate(MacroAssembler* masm); |
103 | 103 |
104 static void GenerateAsciiCharsCompareLoop( | 104 static void GenerateAsciiCharsCompareLoop( |
105 MacroAssembler* masm, | 105 MacroAssembler* masm, |
106 Register left, | 106 Register left, |
107 Register right, | 107 Register right, |
108 Register length, | 108 Register length, |
109 Register scratch, | 109 Register scratch, |
110 Label* chars_not_equal, | 110 Label* chars_not_equal, |
111 Label::Distance chars_not_equal_near = Label::kFar); | 111 Label::Distance chars_not_equal_near = Label::kFar); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 static const int kCapacityOffset = | 150 static const int kCapacityOffset = |
151 NameDictionary::kHeaderSize + | 151 NameDictionary::kHeaderSize + |
152 NameDictionary::kCapacityIndex * kPointerSize; | 152 NameDictionary::kCapacityIndex * kPointerSize; |
153 | 153 |
154 static const int kElementsStartOffset = | 154 static const int kElementsStartOffset = |
155 NameDictionary::kHeaderSize + | 155 NameDictionary::kHeaderSize + |
156 NameDictionary::kElementsStartIndex * kPointerSize; | 156 NameDictionary::kElementsStartIndex * kPointerSize; |
157 | 157 |
158 Major MajorKey() const { return NameDictionaryLookup; } | 158 Major MajorKey() const { return NameDictionaryLookup; } |
159 | 159 |
160 int MinorKey() const { | 160 uint32_t MinorKey() const { |
161 return DictionaryBits::encode(dictionary_.code()) | | 161 return DictionaryBits::encode(dictionary_.code()) | |
162 ResultBits::encode(result_.code()) | | 162 ResultBits::encode(result_.code()) | |
163 IndexBits::encode(index_.code()) | | 163 IndexBits::encode(index_.code()) | |
164 LookupModeBits::encode(mode_); | 164 LookupModeBits::encode(mode_); |
165 } | 165 } |
166 | 166 |
167 class DictionaryBits: public BitField<int, 0, 3> {}; | 167 class DictionaryBits: public BitField<int, 0, 3> {}; |
168 class ResultBits: public BitField<int, 3, 3> {}; | 168 class ResultBits: public BitField<int, 3, 3> {}; |
169 class IndexBits: public BitField<int, 6, 3> {}; | 169 class IndexBits: public BitField<int, 6, 3> {}; |
170 class LookupModeBits: public BitField<LookupMode, 9, 1> {}; | 170 class LookupModeBits: public BitField<LookupMode, 9, 1> {}; |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 void Generate(MacroAssembler* masm); | 399 void Generate(MacroAssembler* masm); |
400 void GenerateIncremental(MacroAssembler* masm, Mode mode); | 400 void GenerateIncremental(MacroAssembler* masm, Mode mode); |
401 void CheckNeedsToInformIncrementalMarker( | 401 void CheckNeedsToInformIncrementalMarker( |
402 MacroAssembler* masm, | 402 MacroAssembler* masm, |
403 OnNoNeedToInformIncrementalMarker on_no_need, | 403 OnNoNeedToInformIncrementalMarker on_no_need, |
404 Mode mode); | 404 Mode mode); |
405 void InformIncrementalMarker(MacroAssembler* masm); | 405 void InformIncrementalMarker(MacroAssembler* masm); |
406 | 406 |
407 Major MajorKey() const { return RecordWrite; } | 407 Major MajorKey() const { return RecordWrite; } |
408 | 408 |
409 int MinorKey() const { | 409 uint32_t MinorKey() const { |
410 return ObjectBits::encode(object_.code()) | | 410 return ObjectBits::encode(object_.code()) | |
411 ValueBits::encode(value_.code()) | | 411 ValueBits::encode(value_.code()) | |
412 AddressBits::encode(address_.code()) | | 412 AddressBits::encode(address_.code()) | |
413 RememberedSetActionBits::encode(remembered_set_action_) | | 413 RememberedSetActionBits::encode(remembered_set_action_) | |
414 SaveFPRegsModeBits::encode(save_fp_regs_mode_); | 414 SaveFPRegsModeBits::encode(save_fp_regs_mode_); |
415 } | 415 } |
416 | 416 |
417 void Activate(Code* code) { | 417 void Activate(Code* code) { |
418 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); | 418 code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); |
419 } | 419 } |
420 | 420 |
421 class ObjectBits: public BitField<int, 0, 3> {}; | 421 class ObjectBits: public BitField<int, 0, 3> {}; |
422 class ValueBits: public BitField<int, 3, 3> {}; | 422 class ValueBits: public BitField<int, 3, 3> {}; |
423 class AddressBits: public BitField<int, 6, 3> {}; | 423 class AddressBits: public BitField<int, 6, 3> {}; |
424 class RememberedSetActionBits: public BitField<RememberedSetAction, 9, 1> {}; | 424 class RememberedSetActionBits: public BitField<RememberedSetAction, 9, 1> {}; |
425 class SaveFPRegsModeBits: public BitField<SaveFPRegsMode, 10, 1> {}; | 425 class SaveFPRegsModeBits: public BitField<SaveFPRegsMode, 10, 1> {}; |
426 | 426 |
427 Register object_; | 427 Register object_; |
428 Register value_; | 428 Register value_; |
429 Register address_; | 429 Register address_; |
430 RememberedSetAction remembered_set_action_; | 430 RememberedSetAction remembered_set_action_; |
431 SaveFPRegsMode save_fp_regs_mode_; | 431 SaveFPRegsMode save_fp_regs_mode_; |
432 RegisterAllocation regs_; | 432 RegisterAllocation regs_; |
433 }; | 433 }; |
434 | 434 |
435 | 435 |
436 } } // namespace v8::internal | 436 } } // namespace v8::internal |
437 | 437 |
438 #endif // V8_IA32_CODE_STUBS_IA32_H_ | 438 #endif // V8_IA32_CODE_STUBS_IA32_H_ |
OLD | NEW |