| // Copyright 2016 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_IC_HANDLER_CONFIGURATION_H_ |
| #define V8_IC_HANDLER_CONFIGURATION_H_ |
| |
| #include "src/elements-kind.h" |
| #include "src/globals.h" |
| #include "src/utils.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| enum LoadHandlerType { |
| kLoadICHandlerForElements = 0, |
| kLoadICHandlerForProperties = 1 |
| }; |
| |
| class LoadHandlerTypeBit : public BitField<bool, 0, 1> {}; |
| |
| // Encoding for configuration Smis for property loads: |
| class FieldOffsetIsInobject |
| : public BitField<bool, LoadHandlerTypeBit::kNext, 1> {}; |
| class FieldOffsetIsDouble |
| : public BitField<bool, FieldOffsetIsInobject::kNext, 1> {}; |
| class FieldOffsetOffset : public BitField<int, FieldOffsetIsDouble::kNext, 27> { |
| }; |
| // Make sure we don't overflow into the sign bit. |
| STATIC_ASSERT(FieldOffsetOffset::kNext <= kSmiValueSize - 1); |
| |
| // Encoding for configuration Smis for elements loads: |
| class KeyedLoadIsJsArray : public BitField<bool, LoadHandlerTypeBit::kNext, 1> { |
| }; |
| class KeyedLoadConvertHole |
| : public BitField<bool, KeyedLoadIsJsArray::kNext, 1> {}; |
| class KeyedLoadElementsKind |
| : public BitField<ElementsKind, KeyedLoadConvertHole::kNext, 8> {}; |
| // Make sure we don't overflow into the sign bit. |
| STATIC_ASSERT(KeyedLoadElementsKind::kNext <= kSmiValueSize - 1); |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_IC_HANDLER_CONFIGURATION_H_ |