| // Copyright 2015 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. |
| |
| #include "src/compiler/opcodes.h" |
| #include "testing/gtest-support.h" |
| |
| namespace v8 { |
| namespace internal { |
| namespace compiler { |
| |
| namespace { |
| |
| bool IsCommonOpcode(IrOpcode::Value opcode) { |
| switch (opcode) { |
| #define OPCODE(Opcode) \ |
| case IrOpcode::k##Opcode: \ |
| return true; |
| COMMON_OP_LIST(OPCODE) |
| CONTROL_OP_LIST(OPCODE) |
| #undef OPCODE |
| default: |
| return false; |
| } |
| } |
| |
| |
| bool IsControlOpcode(IrOpcode::Value opcode) { |
| switch (opcode) { |
| #define OPCODE(Opcode) \ |
| case IrOpcode::k##Opcode: \ |
| return true; |
| CONTROL_OP_LIST(OPCODE) |
| #undef OPCODE |
| default: |
| return false; |
| } |
| } |
| |
| |
| bool IsJsOpcode(IrOpcode::Value opcode) { |
| switch (opcode) { |
| #define OPCODE(Opcode) \ |
| case IrOpcode::k##Opcode: \ |
| return true; |
| JS_OP_LIST(OPCODE) |
| #undef OPCODE |
| default: |
| return false; |
| } |
| } |
| |
| |
| bool IsConstantOpcode(IrOpcode::Value opcode) { |
| switch (opcode) { |
| #define OPCODE(Opcode) \ |
| case IrOpcode::k##Opcode: \ |
| return true; |
| CONSTANT_OP_LIST(OPCODE) |
| #undef OPCODE |
| default: |
| return false; |
| } |
| } |
| |
| |
| bool IsComparisonOpcode(IrOpcode::Value opcode) { |
| switch (opcode) { |
| #define OPCODE(Opcode) \ |
| case IrOpcode::k##Opcode: \ |
| return true; |
| JS_COMPARE_BINOP_LIST(OPCODE) |
| SIMPLIFIED_COMPARE_BINOP_LIST(OPCODE) |
| MACHINE_COMPARE_BINOP_LIST(OPCODE) |
| #undef OPCODE |
| default: |
| return false; |
| } |
| } |
| |
| char const* const kMnemonics[] = { |
| #define OPCODE(Opcode) #Opcode, |
| ALL_OP_LIST(OPCODE) |
| #undef OPCODE |
| }; |
| |
| const IrOpcode::Value kOpcodes[] = { |
| #define OPCODE(Opcode) IrOpcode::k##Opcode, |
| ALL_OP_LIST(OPCODE) |
| #undef OPCODE |
| }; |
| |
| } // namespace |
| |
| TEST(IrOpcodeTest, IsCommonOpcode) { |
| TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) { |
| EXPECT_EQ(IsCommonOpcode(opcode), IrOpcode::IsCommonOpcode(opcode)); |
| } |
| } |
| |
| TEST(IrOpcodeTest, IsControlOpcode) { |
| TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) { |
| EXPECT_EQ(IsControlOpcode(opcode), IrOpcode::IsControlOpcode(opcode)); |
| } |
| } |
| |
| TEST(IrOpcodeTest, IsJsOpcode) { |
| TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) { |
| EXPECT_EQ(IsJsOpcode(opcode), IrOpcode::IsJsOpcode(opcode)); |
| } |
| } |
| |
| TEST(IrOpcodeTest, IsConstantOpcode) { |
| TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) { |
| EXPECT_EQ(IsConstantOpcode(opcode), IrOpcode::IsConstantOpcode(opcode)); |
| } |
| } |
| |
| TEST(IrOpcodeTest, IsComparisonOpcode) { |
| TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) { |
| EXPECT_EQ(IsComparisonOpcode(opcode), IrOpcode::IsComparisonOpcode(opcode)); |
| } |
| } |
| |
| TEST(IrOpcodeTest, Mnemonic) { |
| TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) { |
| EXPECT_STREQ(kMnemonics[opcode], IrOpcode::Mnemonic(opcode)); |
| } |
| } |
| |
| } // namespace compiler |
| } // namespace internal |
| } // namespace v8 |