Mercurial > hg > truffle
comparison graal/GraalCompiler/src/com/sun/c1x/ir/Constant.java @ 2509:16b9a8b5ad39
Renamings Runtime=>GraalRuntime and Compiler=>GraalCompiler
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Wed, 27 Apr 2011 11:50:44 +0200 |
parents | graal/Compiler/src/com/sun/c1x/ir/Constant.java@9ec15d6914ca |
children | 092e628ddd5d |
comparison
equal
deleted
inserted
replaced
2508:fea94949e0a2 | 2509:16b9a8b5ad39 |
---|---|
1 /* | |
2 * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 */ | |
23 package com.sun.c1x.ir; | |
24 | |
25 import static com.sun.c1x.C1XCompilation.*; | |
26 | |
27 import com.sun.c1x.debug.*; | |
28 import com.sun.cri.ci.*; | |
29 import com.sun.cri.ri.*; | |
30 | |
31 /** | |
32 * The {@code Constant} instruction represents a constant such as an integer value, | |
33 * long, float, object reference, address, etc. | |
34 * | |
35 * @author Ben L. Titzer | |
36 */ | |
37 public final class Constant extends Instruction { | |
38 | |
39 public final CiConstant value; | |
40 | |
41 /** | |
42 * Constructs a new instruction representing the specified constant. | |
43 * @param value the constant | |
44 */ | |
45 public Constant(CiConstant value) { | |
46 super(value.kind.stackKind()); | |
47 this.value = value; | |
48 initFlag(Value.Flag.NonNull, value.isNonNull()); | |
49 } | |
50 | |
51 @Override | |
52 public void accept(ValueVisitor v) { | |
53 v.visitConstant(this); | |
54 } | |
55 | |
56 /** | |
57 * Creates an instruction for a double constant. | |
58 * @param d the double value for which to create the instruction | |
59 * @return an instruction representing the double | |
60 */ | |
61 public static Constant forDouble(double d) { | |
62 return new Constant(CiConstant.forDouble(d)); | |
63 } | |
64 | |
65 /** | |
66 * Creates an instruction for a float constant. | |
67 * @param f the float value for which to create the instruction | |
68 * @return an instruction representing the float | |
69 */ | |
70 public static Constant forFloat(float f) { | |
71 return new Constant(CiConstant.forFloat(f)); | |
72 } | |
73 | |
74 /** | |
75 * Creates an instruction for an long constant. | |
76 * @param i the long value for which to create the instruction | |
77 * @return an instruction representing the long | |
78 */ | |
79 public static Constant forLong(long i) { | |
80 return new Constant(CiConstant.forLong(i)); | |
81 } | |
82 | |
83 /** | |
84 * Creates an instruction for an integer constant. | |
85 * @param i the integer value for which to create the instruction | |
86 * @return an instruction representing the integer | |
87 */ | |
88 public static Constant forInt(int i) { | |
89 return new Constant(CiConstant.forInt(i)); | |
90 } | |
91 | |
92 /** | |
93 * Creates an instruction for a boolean constant. | |
94 * @param i the boolean value for which to create the instruction | |
95 * @return an instruction representing the boolean | |
96 */ | |
97 public static Constant forBoolean(boolean i) { | |
98 return new Constant(CiConstant.forBoolean(i)); | |
99 } | |
100 | |
101 /** | |
102 * Creates an instruction for an address (jsr/ret address) constant. | |
103 * @param i the address value for which to create the instruction | |
104 * @return an instruction representing the address | |
105 */ | |
106 public static Constant forJsr(int i) { | |
107 return new Constant(CiConstant.forJsr(i)); | |
108 } | |
109 | |
110 /** | |
111 * Creates an instruction for an object constant. | |
112 * @param o the object value for which to create the instruction | |
113 * @return an instruction representing the object | |
114 */ | |
115 public static Constant forObject(Object o) { | |
116 return new Constant(CiConstant.forObject(o)); | |
117 } | |
118 | |
119 /** | |
120 * Creates an instruction for a word constant. | |
121 * @param val the word value for which to create the instruction | |
122 * @return an instruction representing the word | |
123 */ | |
124 public static Constant forWord(long val) { | |
125 return new Constant(CiConstant.forWord(val)); | |
126 } | |
127 | |
128 @Override | |
129 public String toString() { | |
130 return super.toString() + "(" + value + ")"; | |
131 } | |
132 | |
133 @Override | |
134 public int valueNumber() { | |
135 return 0x50000000 | value.hashCode(); | |
136 } | |
137 | |
138 @Override | |
139 public boolean valueEqual(Instruction i) { | |
140 return i instanceof Constant && ((Constant) i).value.equivalent(this.value); | |
141 } | |
142 | |
143 @Override | |
144 public RiType declaredType() { | |
145 RiRuntime runtime = compilation().runtime; | |
146 if (kind.isPrimitive()) { | |
147 runtime.asRiType(kind); | |
148 } | |
149 return runtime.getTypeOf(asConstant()); | |
150 } | |
151 | |
152 @Override | |
153 public RiType exactType() { | |
154 return declaredType(); | |
155 } | |
156 | |
157 @Override | |
158 public void print(LogStream out) { | |
159 out.print(value.valueString()); | |
160 } | |
161 } |