Line data Source code
1 : // Copyright 2014 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/operator.h"
6 :
7 : #include <limits>
8 :
9 : namespace v8 {
10 : namespace internal {
11 : namespace compiler {
12 :
13 : namespace {
14 :
15 : template <typename N>
16 : V8_INLINE N CheckRange(size_t val) {
17 : // The getters on Operator for input and output counts currently return int.
18 : // Thus check that the given value fits in the integer range.
19 : // TODO(titzer): Remove this check once the getters return size_t.
20 801782208 : CHECK_LE(val, std::min(static_cast<size_t>(std::numeric_limits<N>::max()),
21 : static_cast<size_t>(kMaxInt)));
22 801782208 : return static_cast<N>(val);
23 : }
24 :
25 : } // namespace
26 :
27 133630368 : Operator::Operator(Opcode opcode, Properties properties, const char* mnemonic,
28 : size_t value_in, size_t effect_in, size_t control_in,
29 : size_t value_out, size_t effect_out, size_t control_out)
30 : : mnemonic_(mnemonic),
31 : opcode_(opcode),
32 : properties_(properties),
33 : value_in_(CheckRange<uint32_t>(value_in)),
34 : effect_in_(CheckRange<uint32_t>(effect_in)),
35 : control_in_(CheckRange<uint32_t>(control_in)),
36 : value_out_(CheckRange<uint32_t>(value_out)),
37 : effect_out_(CheckRange<uint8_t>(effect_out)),
38 935412576 : control_out_(CheckRange<uint32_t>(control_out)) {}
39 :
40 1430 : std::ostream& operator<<(std::ostream& os, const Operator& op) {
41 : op.PrintTo(os);
42 1430 : return os;
43 : }
44 :
45 1315 : void Operator::PrintToImpl(std::ostream& os, PrintVerbosity verbose) const {
46 1315 : os << mnemonic();
47 1315 : }
48 :
49 934 : void Operator::PrintPropsTo(std::ostream& os) const {
50 934 : std::string separator = "";
51 :
52 : #define PRINT_PROP_IF_SET(name) \
53 : if (HasProperty(Operator::k##name)) { \
54 : os << separator; \
55 : os << #name; \
56 : separator = ", "; \
57 : }
58 10421 : OPERATOR_PROPERTY_LIST(PRINT_PROP_IF_SET)
59 : #undef PRINT_PROP_IF_SET
60 934 : }
61 :
62 : } // namespace compiler
63 : } // namespace internal
64 : } // namespace v8
|