]> git.saurik.com Git - apple/javascriptcore.git/blob - dfg/DFGNodeFlags.cpp
JavaScriptCore-1218.34.tar.gz
[apple/javascriptcore.git] / dfg / DFGNodeFlags.cpp
1 /*
2 * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #include "config.h"
27 #include "DFGNodeFlags.h"
28
29 #if ENABLE(DFG_JIT)
30
31 #include <wtf/CommaPrinter.h>
32
33 namespace JSC { namespace DFG {
34
35 void dumpNodeFlags(PrintStream& out, NodeFlags flags)
36 {
37 if (!(flags ^ NodeDoesNotExit)) {
38 out.print("<empty>");
39 return;
40 }
41
42 CommaPrinter comma("|");
43
44 if (flags & NodeResultMask) {
45 switch (flags & NodeResultMask) {
46 case NodeResultJS:
47 out.print(comma, "JS");
48 break;
49 case NodeResultNumber:
50 out.print(comma, "Number");
51 break;
52 case NodeResultInt32:
53 out.print(comma, "Int32");
54 break;
55 case NodeResultBoolean:
56 out.print(comma, "Boolean");
57 break;
58 case NodeResultStorage:
59 out.print(comma, "Storage");
60 break;
61 default:
62 RELEASE_ASSERT_NOT_REACHED();
63 break;
64 }
65 }
66
67 if (flags & NodeMustGenerate)
68 out.print(comma, "MustGen");
69
70 if (flags & NodeHasVarArgs)
71 out.print(comma, "VarArgs");
72
73 if (flags & NodeClobbersWorld)
74 out.print(comma, "Clobbers");
75
76 if (flags & NodeMightClobber)
77 out.print(comma, "MightClobber");
78
79 if (flags & NodeResultMask) {
80 if (!(flags & NodeUsedAsNumber) && !(flags & NodeNeedsNegZero))
81 out.print(comma, "PureInt");
82 else if (!(flags & NodeUsedAsNumber))
83 out.print(comma, "PureInt(w/ neg zero)");
84 else if (!(flags & NodeNeedsNegZero))
85 out.print(comma, "PureNum");
86 if (flags & NodeUsedAsOther)
87 out.print(comma, "UseAsOther");
88 }
89
90 if (flags & NodeMayOverflow)
91 out.print(comma, "MayOverflow");
92
93 if (flags & NodeMayNegZero)
94 out.print(comma, "MayNegZero");
95
96 if (flags & NodeUsedAsInt)
97 out.print(comma, "UseAsInt");
98
99 if (!(flags & NodeDoesNotExit))
100 out.print(comma, "CanExit");
101
102 if (flags & NodeExitsForward)
103 out.print(comma, "NodeExitsForward");
104 }
105
106 } } // namespace JSC::DFG
107
108 #endif // ENABLE(DFG_JIT)
109