blob: 3bb65c2e13b025f9fc8ba455ba98ff143624cf73 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 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#include "src/compiler/opcodes.h"
6#include "testing/gtest/include/gtest/gtest.h"
7
8namespace v8 {
9namespace internal {
10namespace compiler {
11
12namespace {
13
14bool IsCommonOpcode(IrOpcode::Value opcode) {
15 switch (opcode) {
16#define OPCODE(Opcode) \
17 case IrOpcode::k##Opcode: \
18 return true;
19 COMMON_OP_LIST(OPCODE)
20 CONTROL_OP_LIST(OPCODE)
21#undef OPCODE
22 default:
23 return false;
24 }
25}
26
27
28bool IsControlOpcode(IrOpcode::Value opcode) {
29 switch (opcode) {
30#define OPCODE(Opcode) \
31 case IrOpcode::k##Opcode: \
32 return true;
33 CONTROL_OP_LIST(OPCODE)
34#undef OPCODE
35 default:
36 return false;
37 }
38}
39
40
41bool IsJsOpcode(IrOpcode::Value opcode) {
42 switch (opcode) {
43#define OPCODE(Opcode) \
44 case IrOpcode::k##Opcode: \
45 return true;
46 JS_OP_LIST(OPCODE)
47#undef OPCODE
48 default:
49 return false;
50 }
51}
52
53
54bool IsConstantOpcode(IrOpcode::Value opcode) {
55 switch (opcode) {
56#define OPCODE(Opcode) \
57 case IrOpcode::k##Opcode: \
58 return true;
59 CONSTANT_OP_LIST(OPCODE)
60#undef OPCODE
61 default:
62 return false;
63 }
64}
65
66
67bool IsComparisonOpcode(IrOpcode::Value opcode) {
68 switch (opcode) {
69#define OPCODE(Opcode) \
70 case IrOpcode::k##Opcode: \
71 return true;
72 JS_COMPARE_BINOP_LIST(OPCODE)
73 SIMPLIFIED_COMPARE_BINOP_LIST(OPCODE)
74 MACHINE_COMPARE_BINOP_LIST(OPCODE)
75#undef OPCODE
76 default:
77 return false;
78 }
79}
80
81
82const IrOpcode::Value kInvalidOpcode = static_cast<IrOpcode::Value>(123456789);
83
84} // namespace
85
86
87TEST(IrOpcodeTest, IsCommonOpcode) {
88 EXPECT_FALSE(IrOpcode::IsCommonOpcode(kInvalidOpcode));
89#define OPCODE(Opcode) \
90 EXPECT_EQ(IsCommonOpcode(IrOpcode::k##Opcode), \
91 IrOpcode::IsCommonOpcode(IrOpcode::k##Opcode));
92 ALL_OP_LIST(OPCODE)
93#undef OPCODE
94}
95
96
97TEST(IrOpcodeTest, IsControlOpcode) {
98 EXPECT_FALSE(IrOpcode::IsControlOpcode(kInvalidOpcode));
99#define OPCODE(Opcode) \
100 EXPECT_EQ(IsControlOpcode(IrOpcode::k##Opcode), \
101 IrOpcode::IsControlOpcode(IrOpcode::k##Opcode));
102 ALL_OP_LIST(OPCODE)
103#undef OPCODE
104}
105
106
107TEST(IrOpcodeTest, IsJsOpcode) {
108 EXPECT_FALSE(IrOpcode::IsJsOpcode(kInvalidOpcode));
109#define OPCODE(Opcode) \
110 EXPECT_EQ(IsJsOpcode(IrOpcode::k##Opcode), \
111 IrOpcode::IsJsOpcode(IrOpcode::k##Opcode));
112 ALL_OP_LIST(OPCODE)
113#undef OPCODE
114}
115
116
117TEST(IrOpcodeTest, IsConstantOpcode) {
118 EXPECT_FALSE(IrOpcode::IsConstantOpcode(kInvalidOpcode));
119#define OPCODE(Opcode) \
120 EXPECT_EQ(IsConstantOpcode(IrOpcode::k##Opcode), \
121 IrOpcode::IsConstantOpcode(IrOpcode::k##Opcode));
122 ALL_OP_LIST(OPCODE)
123#undef OPCODE
124}
125
126
127TEST(IrOpcodeTest, IsComparisonOpcode) {
128 EXPECT_FALSE(IrOpcode::IsComparisonOpcode(kInvalidOpcode));
129#define OPCODE(Opcode) \
130 EXPECT_EQ(IsComparisonOpcode(IrOpcode::k##Opcode), \
131 IrOpcode::IsComparisonOpcode(IrOpcode::k##Opcode));
132 ALL_OP_LIST(OPCODE)
133#undef OPCODE
134}
135
136
137TEST(IrOpcodeTest, Mnemonic) {
138 EXPECT_STREQ("UnknownOpcode", IrOpcode::Mnemonic(kInvalidOpcode));
139#define OPCODE(Opcode) \
140 EXPECT_STREQ(#Opcode, IrOpcode::Mnemonic(IrOpcode::k##Opcode));
141 ALL_OP_LIST(OPCODE)
142#undef OPCODE
143}
144
145} // namespace compiler
146} // namespace internal
147} // namespace v8