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_CODE_STUBS_H_ | 5 #ifndef V8_CODE_STUBS_H_ |
6 #define V8_CODE_STUBS_H_ | 6 #define V8_CODE_STUBS_H_ |
7 | 7 |
8 #include "allocation.h" | 8 #include "allocation.h" |
9 #include "assembler.h" | 9 #include "assembler.h" |
10 #include "codegen.h" | 10 #include "codegen.h" |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 } | 183 } |
184 | 184 |
185 virtual void PrintName(StringStream* stream); | 185 virtual void PrintName(StringStream* stream); |
186 | 186 |
187 // Returns a name for logging/debugging purposes. | 187 // Returns a name for logging/debugging purposes. |
188 SmartArrayPointer<const char> GetName(); | 188 SmartArrayPointer<const char> GetName(); |
189 | 189 |
190 Isolate* isolate() const { return isolate_; } | 190 Isolate* isolate() const { return isolate_; } |
191 | 191 |
192 protected: | 192 protected: |
193 static bool CanUseFPRegisters(); | |
194 | |
195 // Generates the assembler code for the stub. | 193 // Generates the assembler code for the stub. |
196 virtual Handle<Code> GenerateCode() = 0; | 194 virtual Handle<Code> GenerateCode() = 0; |
197 | 195 |
198 virtual void VerifyPlatformFeatures(); | 196 virtual void VerifyPlatformFeatures(); |
199 | 197 |
200 // Returns whether the code generated for this stub needs to be allocated as | 198 // Returns whether the code generated for this stub needs to be allocated as |
201 // a fixed (non-moveable) code object. | 199 // a fixed (non-moveable) code object. |
202 virtual bool NeedsImmovableCode() { return false; } | 200 virtual bool NeedsImmovableCode() { return false; } |
203 | 201 |
204 virtual void PrintBaseName(StringStream* stream); | 202 virtual void PrintBaseName(StringStream* stream); |
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1160 } | 1158 } |
1161 | 1159 |
1162 virtual InlineCacheState GetICState() V8_FINAL V8_OVERRIDE { | 1160 virtual InlineCacheState GetICState() V8_FINAL V8_OVERRIDE { |
1163 return state_.GetICState(); | 1161 return state_.GetICState(); |
1164 } | 1162 } |
1165 | 1163 |
1166 virtual ExtraICState GetExtraICState() V8_FINAL V8_OVERRIDE { | 1164 virtual ExtraICState GetExtraICState() V8_FINAL V8_OVERRIDE { |
1167 return state_.GetExtraICState(); | 1165 return state_.GetExtraICState(); |
1168 } | 1166 } |
1169 | 1167 |
1170 virtual void VerifyPlatformFeatures() V8_FINAL V8_OVERRIDE { | 1168 virtual void VerifyPlatformFeatures() V8_FINAL V8_OVERRIDE { } |
1171 ASSERT(CpuFeatures::VerifyCrossCompiling(SSE2)); | |
1172 } | |
1173 | 1169 |
1174 virtual Handle<Code> GenerateCode() V8_OVERRIDE; | 1170 virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
1175 | 1171 |
1176 const BinaryOpIC::State& state() const { return state_; } | 1172 const BinaryOpIC::State& state() const { return state_; } |
1177 | 1173 |
1178 virtual void PrintState(StringStream* stream) V8_FINAL V8_OVERRIDE; | 1174 virtual void PrintState(StringStream* stream) V8_FINAL V8_OVERRIDE; |
1179 | 1175 |
1180 virtual Major MajorKey() V8_OVERRIDE { return BinaryOpIC; } | 1176 virtual Major MajorKey() V8_OVERRIDE { return BinaryOpIC; } |
1181 virtual int NotMissMinorKey() V8_FINAL V8_OVERRIDE { | 1177 virtual int NotMissMinorKey() V8_FINAL V8_OVERRIDE { |
1182 return GetExtraICState(); | 1178 return GetExtraICState(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1217 } | 1213 } |
1218 | 1214 |
1219 virtual InlineCacheState GetICState() V8_OVERRIDE { | 1215 virtual InlineCacheState GetICState() V8_OVERRIDE { |
1220 return state_.GetICState(); | 1216 return state_.GetICState(); |
1221 } | 1217 } |
1222 | 1218 |
1223 virtual ExtraICState GetExtraICState() V8_OVERRIDE { | 1219 virtual ExtraICState GetExtraICState() V8_OVERRIDE { |
1224 return state_.GetExtraICState(); | 1220 return state_.GetExtraICState(); |
1225 } | 1221 } |
1226 | 1222 |
1227 virtual void VerifyPlatformFeatures() V8_OVERRIDE { | 1223 virtual void VerifyPlatformFeatures() V8_OVERRIDE { } |
1228 ASSERT(CpuFeatures::VerifyCrossCompiling(SSE2)); | |
1229 } | |
1230 | 1224 |
1231 virtual void Generate(MacroAssembler* masm) V8_OVERRIDE; | 1225 virtual void Generate(MacroAssembler* masm) V8_OVERRIDE; |
1232 | 1226 |
1233 virtual void PrintState(StringStream* stream) V8_OVERRIDE; | 1227 virtual void PrintState(StringStream* stream) V8_OVERRIDE; |
1234 | 1228 |
1235 virtual Major MajorKey() V8_OVERRIDE { return BinaryOpICWithAllocationSite; } | 1229 virtual Major MajorKey() V8_OVERRIDE { return BinaryOpICWithAllocationSite; } |
1236 virtual int MinorKey() V8_OVERRIDE { return GetExtraICState(); } | 1230 virtual int MinorKey() V8_OVERRIDE { return GetExtraICState(); } |
1237 | 1231 |
1238 private: | 1232 private: |
1239 static void GenerateAheadOfTime(Isolate* isolate, | 1233 static void GenerateAheadOfTime(Isolate* isolate, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 PretenureFlagBits::encode(pretenure_flag)) {} | 1294 PretenureFlagBits::encode(pretenure_flag)) {} |
1301 | 1295 |
1302 StringAddFlags flags() const { | 1296 StringAddFlags flags() const { |
1303 return StringAddFlagsBits::decode(bit_field_); | 1297 return StringAddFlagsBits::decode(bit_field_); |
1304 } | 1298 } |
1305 | 1299 |
1306 PretenureFlag pretenure_flag() const { | 1300 PretenureFlag pretenure_flag() const { |
1307 return PretenureFlagBits::decode(bit_field_); | 1301 return PretenureFlagBits::decode(bit_field_); |
1308 } | 1302 } |
1309 | 1303 |
1310 virtual void VerifyPlatformFeatures() V8_OVERRIDE { | 1304 virtual void VerifyPlatformFeatures() V8_OVERRIDE { } |
1311 ASSERT(CpuFeatures::VerifyCrossCompiling(SSE2)); | |
1312 } | |
1313 | 1305 |
1314 virtual Handle<Code> GenerateCode() V8_OVERRIDE; | 1306 virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
1315 | 1307 |
1316 virtual void InitializeInterfaceDescriptor( | 1308 virtual void InitializeInterfaceDescriptor( |
1317 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; | 1309 CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; |
1318 | 1310 |
1319 static void InstallDescriptors(Isolate* isolate); | 1311 static void InstallDescriptors(Isolate* isolate); |
1320 | 1312 |
1321 // Parameters accessed via CodeStubGraphBuilder::GetParameter() | 1313 // Parameters accessed via CodeStubGraphBuilder::GetParameter() |
1322 static const int kLeft = 0; | 1314 static const int kLeft = 0; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1514 | 1506 |
1515 void Generate(MacroAssembler* masm); | 1507 void Generate(MacroAssembler* masm); |
1516 | 1508 |
1517 // The version of this stub that doesn't save doubles is generated ahead of | 1509 // The version of this stub that doesn't save doubles is generated ahead of |
1518 // time, so it's OK to call it from other stubs that can't cope with GC during | 1510 // time, so it's OK to call it from other stubs that can't cope with GC during |
1519 // their code generation. On machines that always have gp registers (x64) we | 1511 // their code generation. On machines that always have gp registers (x64) we |
1520 // can generate both variants ahead of time. | 1512 // can generate both variants ahead of time. |
1521 static void GenerateAheadOfTime(Isolate* isolate); | 1513 static void GenerateAheadOfTime(Isolate* isolate); |
1522 | 1514 |
1523 protected: | 1515 protected: |
1524 virtual void VerifyPlatformFeatures() V8_OVERRIDE { | 1516 virtual void VerifyPlatformFeatures() V8_OVERRIDE { } |
1525 ASSERT(CpuFeatures::VerifyCrossCompiling(SSE2)); | |
1526 }; | |
1527 | 1517 |
1528 private: | 1518 private: |
1529 // Number of pointers/values returned. | 1519 // Number of pointers/values returned. |
1530 const int result_size_; | 1520 const int result_size_; |
1531 SaveFPRegsMode save_doubles_; | 1521 SaveFPRegsMode save_doubles_; |
1532 | 1522 |
1533 Major MajorKey() { return CEntry; } | 1523 Major MajorKey() { return CEntry; } |
1534 int MinorKey(); | 1524 int MinorKey(); |
1535 | 1525 |
1536 bool NeedsImmovableCode(); | 1526 bool NeedsImmovableCode(); |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1912 Register destination, | 1902 Register destination, |
1913 int offset, | 1903 int offset, |
1914 bool is_truncating, | 1904 bool is_truncating, |
1915 bool skip_fastpath = false) | 1905 bool skip_fastpath = false) |
1916 : PlatformCodeStub(isolate), bit_field_(0) { | 1906 : PlatformCodeStub(isolate), bit_field_(0) { |
1917 bit_field_ = SourceRegisterBits::encode(source.code()) | | 1907 bit_field_ = SourceRegisterBits::encode(source.code()) | |
1918 DestinationRegisterBits::encode(destination.code()) | | 1908 DestinationRegisterBits::encode(destination.code()) | |
1919 OffsetBits::encode(offset) | | 1909 OffsetBits::encode(offset) | |
1920 IsTruncatingBits::encode(is_truncating) | | 1910 IsTruncatingBits::encode(is_truncating) | |
1921 SkipFastPathBits::encode(skip_fastpath) | | 1911 SkipFastPathBits::encode(skip_fastpath) | |
1922 SSEBits::encode( | 1912 SSE3Bits::encode(CpuFeatures::IsSafeForSnapshot(isolate, SSE3) ? 1 : 0); |
1923 CpuFeatures::IsSafeForSnapshot(isolate, SSE2) ? | |
1924 CpuFeatures::IsSafeForSnapshot(isolate, SSE3) ? 2 : 1 : 0); | |
1925 } | 1913 } |
1926 | 1914 |
1927 Register source() { | 1915 Register source() { |
1928 return Register::from_code(SourceRegisterBits::decode(bit_field_)); | 1916 return Register::from_code(SourceRegisterBits::decode(bit_field_)); |
1929 } | 1917 } |
1930 | 1918 |
1931 Register destination() { | 1919 Register destination() { |
1932 return Register::from_code(DestinationRegisterBits::decode(bit_field_)); | 1920 return Register::from_code(DestinationRegisterBits::decode(bit_field_)); |
1933 } | 1921 } |
1934 | 1922 |
1935 bool is_truncating() { | 1923 bool is_truncating() { |
1936 return IsTruncatingBits::decode(bit_field_); | 1924 return IsTruncatingBits::decode(bit_field_); |
1937 } | 1925 } |
1938 | 1926 |
1939 bool skip_fastpath() { | 1927 bool skip_fastpath() { |
1940 return SkipFastPathBits::decode(bit_field_); | 1928 return SkipFastPathBits::decode(bit_field_); |
1941 } | 1929 } |
1942 | 1930 |
1943 int offset() { | 1931 int offset() { |
1944 return OffsetBits::decode(bit_field_); | 1932 return OffsetBits::decode(bit_field_); |
1945 } | 1933 } |
1946 | 1934 |
1947 void Generate(MacroAssembler* masm); | 1935 void Generate(MacroAssembler* masm); |
1948 | 1936 |
1949 virtual bool SometimesSetsUpAFrame() { return false; } | 1937 virtual bool SometimesSetsUpAFrame() { return false; } |
1950 | 1938 |
1951 protected: | 1939 protected: |
1952 virtual void VerifyPlatformFeatures() V8_OVERRIDE { | 1940 virtual void VerifyPlatformFeatures() V8_OVERRIDE { } |
1953 ASSERT(CpuFeatures::VerifyCrossCompiling(SSE2)); | |
1954 } | |
1955 | 1941 |
1956 private: | 1942 private: |
1957 static const int kBitsPerRegisterNumber = 6; | 1943 static const int kBitsPerRegisterNumber = 6; |
1958 STATIC_ASSERT((1L << kBitsPerRegisterNumber) >= Register::kNumRegisters); | 1944 STATIC_ASSERT((1L << kBitsPerRegisterNumber) >= Register::kNumRegisters); |
1959 class SourceRegisterBits: | 1945 class SourceRegisterBits: |
1960 public BitField<int, 0, kBitsPerRegisterNumber> {}; // NOLINT | 1946 public BitField<int, 0, kBitsPerRegisterNumber> {}; // NOLINT |
1961 class DestinationRegisterBits: | 1947 class DestinationRegisterBits: |
1962 public BitField<int, kBitsPerRegisterNumber, | 1948 public BitField<int, kBitsPerRegisterNumber, |
1963 kBitsPerRegisterNumber> {}; // NOLINT | 1949 kBitsPerRegisterNumber> {}; // NOLINT |
1964 class IsTruncatingBits: | 1950 class IsTruncatingBits: |
1965 public BitField<bool, 2 * kBitsPerRegisterNumber, 1> {}; // NOLINT | 1951 public BitField<bool, 2 * kBitsPerRegisterNumber, 1> {}; // NOLINT |
1966 class OffsetBits: | 1952 class OffsetBits: |
1967 public BitField<int, 2 * kBitsPerRegisterNumber + 1, 3> {}; // NOLINT | 1953 public BitField<int, 2 * kBitsPerRegisterNumber + 1, 3> {}; // NOLINT |
1968 class SkipFastPathBits: | 1954 class SkipFastPathBits: |
1969 public BitField<int, 2 * kBitsPerRegisterNumber + 4, 1> {}; // NOLINT | 1955 public BitField<int, 2 * kBitsPerRegisterNumber + 4, 1> {}; // NOLINT |
1970 class SSEBits: | 1956 class SSE3Bits: |
1971 public BitField<int, 2 * kBitsPerRegisterNumber + 5, 2> {}; // NOLINT | 1957 public BitField<int, 2 * kBitsPerRegisterNumber + 5, 1> {}; // NOLINT |
1972 | 1958 |
1973 Major MajorKey() { return DoubleToI; } | 1959 Major MajorKey() { return DoubleToI; } |
1974 int MinorKey() { return bit_field_; } | 1960 int MinorKey() { return bit_field_; } |
1975 | 1961 |
1976 int bit_field_; | 1962 int bit_field_; |
1977 | 1963 |
1978 DISALLOW_COPY_AND_ASSIGN(DoubleToIStub); | 1964 DISALLOW_COPY_AND_ASSIGN(DoubleToIStub); |
1979 }; | 1965 }; |
1980 | 1966 |
1981 | 1967 |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2302 | 2288 |
2303 class KeyedStoreElementStub : public PlatformCodeStub { | 2289 class KeyedStoreElementStub : public PlatformCodeStub { |
2304 public: | 2290 public: |
2305 KeyedStoreElementStub(Isolate* isolate, | 2291 KeyedStoreElementStub(Isolate* isolate, |
2306 bool is_js_array, | 2292 bool is_js_array, |
2307 ElementsKind elements_kind, | 2293 ElementsKind elements_kind, |
2308 KeyedAccessStoreMode store_mode) | 2294 KeyedAccessStoreMode store_mode) |
2309 : PlatformCodeStub(isolate), | 2295 : PlatformCodeStub(isolate), |
2310 is_js_array_(is_js_array), | 2296 is_js_array_(is_js_array), |
2311 elements_kind_(elements_kind), | 2297 elements_kind_(elements_kind), |
2312 store_mode_(store_mode), | 2298 store_mode_(store_mode) { } |
2313 fp_registers_(CanUseFPRegisters()) { } | |
2314 | 2299 |
2315 Major MajorKey() { return KeyedStoreElement; } | 2300 Major MajorKey() { return KeyedStoreElement; } |
2316 int MinorKey() { | 2301 int MinorKey() { |
2317 return ElementsKindBits::encode(elements_kind_) | | 2302 return ElementsKindBits::encode(elements_kind_) | |
2318 IsJSArrayBits::encode(is_js_array_) | | 2303 IsJSArrayBits::encode(is_js_array_) | |
2319 StoreModeBits::encode(store_mode_) | | 2304 StoreModeBits::encode(store_mode_); |
2320 FPRegisters::encode(fp_registers_); | |
2321 } | 2305 } |
2322 | 2306 |
2323 void Generate(MacroAssembler* masm); | 2307 void Generate(MacroAssembler* masm); |
2324 | 2308 |
2325 private: | 2309 private: |
2326 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; | 2310 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; |
2327 class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {}; | 2311 class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {}; |
2328 class IsJSArrayBits: public BitField<bool, 12, 1> {}; | 2312 class IsJSArrayBits: public BitField<bool, 12, 1> {}; |
2329 class FPRegisters: public BitField<bool, 13, 1> {}; | |
2330 | 2313 |
2331 bool is_js_array_; | 2314 bool is_js_array_; |
2332 ElementsKind elements_kind_; | 2315 ElementsKind elements_kind_; |
2333 KeyedAccessStoreMode store_mode_; | 2316 KeyedAccessStoreMode store_mode_; |
2334 bool fp_registers_; | |
2335 | 2317 |
2336 DISALLOW_COPY_AND_ASSIGN(KeyedStoreElementStub); | 2318 DISALLOW_COPY_AND_ASSIGN(KeyedStoreElementStub); |
2337 }; | 2319 }; |
2338 | 2320 |
2339 | 2321 |
2340 class ToBooleanStub: public HydrogenCodeStub { | 2322 class ToBooleanStub: public HydrogenCodeStub { |
2341 public: | 2323 public: |
2342 enum Type { | 2324 enum Type { |
2343 UNDEFINED, | 2325 UNDEFINED, |
2344 BOOLEAN, | 2326 BOOLEAN, |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2462 bool is_jsarray_; | 2444 bool is_jsarray_; |
2463 KeyedAccessStoreMode store_mode_; | 2445 KeyedAccessStoreMode store_mode_; |
2464 | 2446 |
2465 DISALLOW_COPY_AND_ASSIGN(ElementsTransitionAndStoreStub); | 2447 DISALLOW_COPY_AND_ASSIGN(ElementsTransitionAndStoreStub); |
2466 }; | 2448 }; |
2467 | 2449 |
2468 | 2450 |
2469 class StoreArrayLiteralElementStub : public PlatformCodeStub { | 2451 class StoreArrayLiteralElementStub : public PlatformCodeStub { |
2470 public: | 2452 public: |
2471 explicit StoreArrayLiteralElementStub(Isolate* isolate) | 2453 explicit StoreArrayLiteralElementStub(Isolate* isolate) |
2472 : PlatformCodeStub(isolate), fp_registers_(CanUseFPRegisters()) { } | 2454 : PlatformCodeStub(isolate) { } |
2473 | 2455 |
2474 private: | 2456 private: |
2475 class FPRegisters: public BitField<bool, 0, 1> {}; | |
2476 | |
2477 Major MajorKey() { return StoreArrayLiteralElement; } | 2457 Major MajorKey() { return StoreArrayLiteralElement; } |
2478 int MinorKey() { return FPRegisters::encode(fp_registers_); } | 2458 int MinorKey() { return 0; } |
2479 | 2459 |
2480 void Generate(MacroAssembler* masm); | 2460 void Generate(MacroAssembler* masm); |
2481 | 2461 |
2482 bool fp_registers_; | |
2483 | |
2484 DISALLOW_COPY_AND_ASSIGN(StoreArrayLiteralElementStub); | 2462 DISALLOW_COPY_AND_ASSIGN(StoreArrayLiteralElementStub); |
2485 }; | 2463 }; |
2486 | 2464 |
2487 | 2465 |
2488 class StubFailureTrampolineStub : public PlatformCodeStub { | 2466 class StubFailureTrampolineStub : public PlatformCodeStub { |
2489 public: | 2467 public: |
2490 StubFailureTrampolineStub(Isolate* isolate, StubFunctionMode function_mode) | 2468 StubFailureTrampolineStub(Isolate* isolate, StubFunctionMode function_mode) |
2491 : PlatformCodeStub(isolate), | 2469 : PlatformCodeStub(isolate), |
2492 fp_registers_(CanUseFPRegisters()), | |
2493 function_mode_(function_mode) {} | 2470 function_mode_(function_mode) {} |
2494 | 2471 |
2495 static void GenerateAheadOfTime(Isolate* isolate); | 2472 static void GenerateAheadOfTime(Isolate* isolate); |
2496 | 2473 |
2497 private: | 2474 private: |
2498 class FPRegisters: public BitField<bool, 0, 1> {}; | 2475 class FunctionModeField: public BitField<StubFunctionMode, 0, 1> {}; |
2499 class FunctionModeField: public BitField<StubFunctionMode, 1, 1> {}; | |
2500 | 2476 |
2501 Major MajorKey() { return StubFailureTrampoline; } | 2477 Major MajorKey() { return StubFailureTrampoline; } |
2502 int MinorKey() { | 2478 int MinorKey() { |
2503 return FPRegisters::encode(fp_registers_) | | 2479 return FunctionModeField::encode(function_mode_); |
2504 FunctionModeField::encode(function_mode_); | |
2505 } | 2480 } |
2506 | 2481 |
2507 void Generate(MacroAssembler* masm); | 2482 void Generate(MacroAssembler* masm); |
2508 | 2483 |
2509 bool fp_registers_; | |
2510 StubFunctionMode function_mode_; | 2484 StubFunctionMode function_mode_; |
2511 | 2485 |
2512 DISALLOW_COPY_AND_ASSIGN(StubFailureTrampolineStub); | 2486 DISALLOW_COPY_AND_ASSIGN(StubFailureTrampolineStub); |
2513 }; | 2487 }; |
2514 | 2488 |
2515 | 2489 |
2516 class ProfileEntryHookStub : public PlatformCodeStub { | 2490 class ProfileEntryHookStub : public PlatformCodeStub { |
2517 public: | 2491 public: |
2518 explicit ProfileEntryHookStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 2492 explicit ProfileEntryHookStub(Isolate* isolate) : PlatformCodeStub(isolate) {} |
2519 | 2493 |
(...skipping 18 matching lines...) Expand all Loading... |
2538 | 2512 |
2539 | 2513 |
2540 class CallDescriptors { | 2514 class CallDescriptors { |
2541 public: | 2515 public: |
2542 static void InitializeForIsolate(Isolate* isolate); | 2516 static void InitializeForIsolate(Isolate* isolate); |
2543 }; | 2517 }; |
2544 | 2518 |
2545 } } // namespace v8::internal | 2519 } } // namespace v8::internal |
2546 | 2520 |
2547 #endif // V8_CODE_STUBS_H_ | 2521 #endif // V8_CODE_STUBS_H_ |
OLD | NEW |