1// Copyright 2019 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_COMPILER_WRITE_BARRIER_KIND_H_
6#define V8_COMPILER_WRITE_BARRIER_KIND_H_
7
8#include <ostream>
9
10#include "src/base/logging.h"
11
12namespace v8 {
13namespace internal {
14namespace compiler {
15
16// Write barrier kinds supported by compiler.
17enum WriteBarrierKind : uint8_t {
18  kNoWriteBarrier,
19  kAssertNoWriteBarrier,
20  kMapWriteBarrier,
21  kPointerWriteBarrier,
22  kEphemeronKeyWriteBarrier,
23  kFullWriteBarrier
24};
25
26inline size_t hash_value(WriteBarrierKind kind) {
27  return static_cast<uint8_t>(kind);
28}
29
30inline std::ostream& operator<<(std::ostream& os, WriteBarrierKind kind) {
31  switch (kind) {
32    case kNoWriteBarrier:
33      return os << "NoWriteBarrier";
34    case kAssertNoWriteBarrier:
35      return os << "AssertNoWriteBarrier";
36    case kMapWriteBarrier:
37      return os << "MapWriteBarrier";
38    case kPointerWriteBarrier:
39      return os << "PointerWriteBarrier";
40    case kEphemeronKeyWriteBarrier:
41      return os << "EphemeronKeyWriteBarrier";
42    case kFullWriteBarrier:
43      return os << "FullWriteBarrier";
44  }
45  UNREACHABLE();
46}
47
48}  // namespace compiler
49}  // namespace internal
50}  // namespace v8
51
52#endif  // V8_COMPILER_WRITE_BARRIER_KIND_H_
53