xref: /third_party/node/deps/v8/src/common/operation.h (revision 1cb0ef41)
1// Copyright 2022 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_COMMON_OPERATION_H_
6#define V8_COMMON_OPERATION_H_
7
8#include <ostream>
9
10#define ARITHMETIC_OPERATION_LIST(V) \
11  V(Add)                             \
12  V(Subtract)                        \
13  V(Multiply)                        \
14  V(Divide)                          \
15  V(Modulus)                         \
16  V(Exponentiate)                    \
17  V(BitwiseAnd)                      \
18  V(BitwiseOr)                       \
19  V(BitwiseXor)                      \
20  V(ShiftLeft)                       \
21  V(ShiftRight)                      \
22  V(ShiftRightLogical)
23
24#define UNARY_OPERATION_LIST(V) \
25  V(BitwiseNot)                 \
26  V(Negate)                     \
27  V(Increment)                  \
28  V(Decrement)
29
30#define COMPARISON_OPERATION_LIST(V) \
31  V(Equal)                           \
32  V(StrictEqual)                     \
33  V(LessThan)                        \
34  V(LessThanOrEqual)                 \
35  V(GreaterThan)                     \
36  V(GreaterThanOrEqual)
37
38#define OPERATION_LIST(V)      \
39  ARITHMETIC_OPERATION_LIST(V) \
40  UNARY_OPERATION_LIST(V)      \
41  COMPARISON_OPERATION_LIST(V)
42
43enum class Operation {
44#define DEFINE_OP(name) k##name,
45  OPERATION_LIST(DEFINE_OP)
46#undef DEFINE_OP
47};
48
49inline std::ostream& operator<<(std::ostream& os, const Operation& operation) {
50  switch (operation) {
51#define CASE(name)         \
52  case Operation::k##name: \
53    return os << #name;
54    OPERATION_LIST(CASE)
55#undef CASE
56  }
57}
58
59#endif  // V8_COMMON_OPERATION_H_
60