opcodes-unittest.cc 2.83 KB
Newer Older
1 2 3 4 5
// 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"
6
#include "testing/gtest-support.h"
7 8 9 10 11

namespace v8 {
namespace internal {
namespace compiler {

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
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) {
43
#define OPCODE(Opcode, ...) \
44 45 46 47 48 49 50 51 52 53
  case IrOpcode::k##Opcode: \
    return true;
    JS_OP_LIST(OPCODE)
#undef OPCODE
    default:
      return false;
  }
}


54
bool IsConstantOpcode(IrOpcode::Value opcode) {
55 56 57 58
  switch (opcode) {
#define OPCODE(Opcode)      \
  case IrOpcode::k##Opcode: \
    return true;
59
    CONSTANT_OP_LIST(OPCODE)
60 61 62 63 64 65 66
#undef OPCODE
    default:
      return false;
  }
}


67 68
bool IsComparisonOpcode(IrOpcode::Value opcode) {
  switch (opcode) {
69
#define OPCODE(Opcode, ...) \
70 71 72 73 74 75 76 77 78 79 80
  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;
  }
}

81
char const* const kMnemonics[] = {
82
#define OPCODE(Opcode, ...) #Opcode,
83 84 85 86 87
    ALL_OP_LIST(OPCODE)
#undef OPCODE
};

const IrOpcode::Value kOpcodes[] = {
88
#define OPCODE(Opcode, ...) IrOpcode::k##Opcode,
89 90 91
    ALL_OP_LIST(OPCODE)
#undef OPCODE
};
92

93
}  // namespace
94 95

TEST(IrOpcodeTest, IsCommonOpcode) {
96 97 98
  TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) {
    EXPECT_EQ(IsCommonOpcode(opcode), IrOpcode::IsCommonOpcode(opcode));
  }
99 100 101
}

TEST(IrOpcodeTest, IsControlOpcode) {
102 103 104
  TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) {
    EXPECT_EQ(IsControlOpcode(opcode), IrOpcode::IsControlOpcode(opcode));
  }
105 106 107
}

TEST(IrOpcodeTest, IsJsOpcode) {
108 109 110
  TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) {
    EXPECT_EQ(IsJsOpcode(opcode), IrOpcode::IsJsOpcode(opcode));
  }
111 112
}

113
TEST(IrOpcodeTest, IsConstantOpcode) {
114 115 116
  TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) {
    EXPECT_EQ(IsConstantOpcode(opcode), IrOpcode::IsConstantOpcode(opcode));
  }
117 118
}

119
TEST(IrOpcodeTest, IsComparisonOpcode) {
120 121 122
  TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) {
    EXPECT_EQ(IsComparisonOpcode(opcode), IrOpcode::IsComparisonOpcode(opcode));
  }
123 124
}

125
TEST(IrOpcodeTest, Mnemonic) {
126 127 128
  TRACED_FOREACH(IrOpcode::Value, opcode, kOpcodes) {
    EXPECT_STREQ(kMnemonics[opcode], IrOpcode::Mnemonic(opcode));
  }
129 130 131 132 133
}

}  // namespace compiler
}  // namespace internal
}  // namespace v8