Mercurial > hg > graal-jvmci-8
annotate graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILMove.java @ 13891:bc471f405eb8
HSAIL: support for storing immediates
Contributed-by: Eric Caspole <eric.caspole@amd.com>
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 06 Feb 2014 11:24:00 +0100 |
parents | 1a66453f73db |
children | 390c4b742890 |
rev | line source |
---|---|
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
4 * |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
8 * |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
14 * |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
18 * |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
21 * questions. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
22 */ |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.lir.hsail; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
24 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
25 import static com.oracle.graal.api.code.ValueUtil.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
26 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
27 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
28 import com.oracle.graal.api.code.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
29 import com.oracle.graal.api.meta.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.asm.hsail.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
31 import com.oracle.graal.debug.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
32 import com.oracle.graal.graph.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
33 import com.oracle.graal.lir.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
34 import com.oracle.graal.lir.StandardOp.MoveOp; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
35 import com.oracle.graal.lir.asm.*; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
36 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
37 /** |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
38 * Implementation of move instructions. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
39 */ |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
40 public class HSAILMove { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
41 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
42 // Stack size in bytes (used to keep track of spilling). |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
43 static int maxDatatypeSize; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
44 // Maximum stack offset used by a store operation. |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
45 static long maxStackOffset = 0; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
46 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
47 public static long upperBoundStackSize() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
48 return maxStackOffset + maxDatatypeSize; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
49 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
50 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
51 @Opcode("MOVE") |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
52 public static class SpillMoveOp extends HSAILLIRInstruction implements MoveOp { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
53 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
54 @Def({REG, STACK}) protected AllocatableValue result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
55 @Use({REG, STACK, CONST}) protected Value input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
56 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
57 public SpillMoveOp(AllocatableValue result, Value input) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
58 this.result = result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
59 this.input = input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
60 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
61 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
62 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
63 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
64 move(crb, masm, getResult(), getInput()); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
65 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
66 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
67 @Override |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
68 public Value getInput() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
69 return input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
70 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
71 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
72 @Override |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
73 public AllocatableValue getResult() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
74 return result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
75 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
76 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
77 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
78 @Opcode("MOVE") |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
79 public static class MoveToRegOp extends HSAILLIRInstruction implements MoveOp { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
80 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
81 @Def({REG, HINT}) protected AllocatableValue result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
82 @Use({REG, STACK, CONST}) protected Value input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
83 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
84 public MoveToRegOp(AllocatableValue result, Value input) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
85 this.result = result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
86 this.input = input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
87 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
88 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
89 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
90 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
91 move(crb, masm, getResult(), getInput()); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
92 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
93 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
94 @Override |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
95 public Value getInput() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
96 return input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
97 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
98 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
99 @Override |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
100 public AllocatableValue getResult() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
101 return result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
102 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
103 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
104 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
105 @Opcode("MOVE") |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
106 public static class MoveFromRegOp extends HSAILLIRInstruction implements MoveOp { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
107 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
108 @Def({REG, STACK}) protected AllocatableValue result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
109 @Use({REG, CONST, HINT}) protected Value input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
110 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
111 public MoveFromRegOp(AllocatableValue result, Value input) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
112 this.result = result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
113 this.input = input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
114 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
115 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
116 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
117 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
118 move(crb, masm, getResult(), getInput()); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
119 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
120 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
121 @Override |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
122 public Value getInput() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
123 return input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
124 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
125 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
126 @Override |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
127 public AllocatableValue getResult() { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
128 return result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
129 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
130 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
131 |
10769 | 132 public abstract static class MemOp extends HSAILLIRInstruction { |
133 | |
134 protected final Kind kind; | |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
135 @Use({COMPOSITE}) protected HSAILAddressValue address; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
136 @State protected LIRFrameState state; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
137 |
10769 | 138 public MemOp(Kind kind, HSAILAddressValue address, LIRFrameState state) { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
139 this.kind = kind; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
140 this.address = address; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
141 this.state = state; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
142 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
143 |
10769 | 144 protected abstract void emitMemAccess(HSAILAssembler masm); |
145 | |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
146 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
147 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
10769 | 148 if (state != null) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
149 // crb.recordImplicitException(masm.codeBuffer.position(), state); |
10769 | 150 throw new InternalError("NYI"); |
151 } | |
152 emitMemAccess(masm); | |
153 } | |
154 } | |
155 | |
12742
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
156 public static class MembarOp extends HSAILLIRInstruction { |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
157 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
158 private final int barriers; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
159 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
160 public MembarOp(final int barriers) { |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
161 this.barriers = barriers; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
162 } |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
163 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
164 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
165 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
12742
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
166 masm.emitMembar(barriers); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
167 } |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
168 } |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
169 |
10769 | 170 public static class LoadOp extends MemOp { |
171 | |
172 @Def({REG}) protected AllocatableValue result; | |
173 | |
174 public LoadOp(Kind kind, AllocatableValue result, HSAILAddressValue address, LIRFrameState state) { | |
175 super(kind, address, state); | |
176 this.result = result; | |
177 } | |
178 | |
179 @Override | |
180 public void emitMemAccess(HSAILAssembler masm) { | |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
181 HSAILAddress addr = address.toAddress(); |
10868 | 182 masm.emitLoad(kind, result, addr); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
183 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
184 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
185 |
10769 | 186 public static class StoreOp extends MemOp { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
187 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
188 @Use({REG}) protected AllocatableValue input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
189 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
190 public StoreOp(Kind kind, HSAILAddressValue address, AllocatableValue input, LIRFrameState state) { |
10769 | 191 super(kind, address, state); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
192 this.input = input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
193 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
194 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
195 @Override |
10769 | 196 public void emitMemAccess(HSAILAssembler masm) { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
197 assert isRegister(input); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
198 HSAILAddress addr = address.toAddress(); |
10868 | 199 masm.emitStore(kind, input, addr); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
200 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
201 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
202 |
13891
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
203 public static class StoreConstantOp extends MemOp { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
204 |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
205 protected final Constant input; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
206 |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
207 public StoreConstantOp(Kind kind, HSAILAddressValue address, Constant input, LIRFrameState state) { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
208 super(kind, address, state); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
209 this.input = input; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
210 } |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
211 |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
212 @Override |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
213 public void emitMemAccess(HSAILAssembler masm) { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
214 switch (kind) { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
215 case Boolean: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
216 case Byte: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
217 masm.emitStoreImmediate(kind, input.asLong() & 0xFF, address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
218 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
219 case Char: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
220 case Short: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
221 masm.emitStoreImmediate(kind, input.asLong() & 0xFFFF, address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
222 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
223 case Int: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
224 case Long: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
225 masm.emitStoreImmediate(kind, input.asLong(), address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
226 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
227 case Float: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
228 masm.emitStoreImmediate(input.asFloat(), address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
229 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
230 case Double: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
231 masm.emitStoreImmediate(input.asDouble(), address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
232 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
233 case Object: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
234 if (input.isNull()) { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
235 masm.emitStoreImmediate(kind, 0L, address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
236 } else { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
237 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to object ref"); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
238 } |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
239 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
240 case NarrowOop: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
241 if (input.isNull()) { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
242 masm.emitStoreImmediate(kind, 0L, address.toAddress()); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
243 } else { |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
244 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to object ref"); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
245 } |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
246 break; |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
247 default: |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
248 throw GraalInternalError.shouldNotReachHere(); |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
249 } |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
250 } |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
251 } |
bc471f405eb8
HSAIL: support for storing immediates
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
252 |
10769 | 253 public static class LoadCompressedPointer extends LoadOp { |
254 | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
255 private final long base; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
256 private final int shift; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
257 private final int alignment; |
10769 | 258 @Temp({REG}) private AllocatableValue scratch; |
259 | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
260 public LoadCompressedPointer(Kind kind, AllocatableValue result, AllocatableValue scratch, HSAILAddressValue address, LIRFrameState state, long base, int shift, int alignment) { |
10769 | 261 super(kind, result, address, state); |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
262 this.base = base; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
263 this.shift = shift; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
264 this.alignment = alignment; |
10769 | 265 this.scratch = scratch; |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
266 assert kind == Kind.Object || kind == Kind.Long; |
10769 | 267 } |
268 | |
269 @Override | |
270 public void emitMemAccess(HSAILAssembler masm) { | |
271 // we will do a 32 bit load, zero extending into a 64 bit register | |
272 masm.emitLoad(result, address.toAddress(), "u32"); | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
273 boolean testForNull = (kind == Kind.Object); |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
274 decodePointer(masm, result, base, shift, alignment, testForNull); |
10769 | 275 } |
276 } | |
277 | |
278 public static class StoreCompressedPointer extends HSAILLIRInstruction { | |
279 | |
280 protected final Kind kind; | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
281 private final long base; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
282 private final int shift; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
283 private final int alignment; |
10769 | 284 @Temp({REG}) private AllocatableValue scratch; |
285 @Alive({REG}) protected AllocatableValue input; | |
286 @Alive({COMPOSITE}) protected HSAILAddressValue address; | |
287 @State protected LIRFrameState state; | |
288 | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
289 public StoreCompressedPointer(Kind kind, HSAILAddressValue address, AllocatableValue input, AllocatableValue scratch, LIRFrameState state, long base, int shift, int alignment) { |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
290 this.base = base; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
291 this.shift = shift; |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
292 this.alignment = alignment; |
10769 | 293 this.scratch = scratch; |
294 this.kind = kind; | |
295 this.address = address; | |
296 this.state = state; | |
297 this.input = input; | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
298 assert kind == Kind.Object || kind == Kind.Long; |
10769 | 299 } |
300 | |
301 @Override | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
302 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
10769 | 303 masm.emitMov(scratch, input); |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
304 boolean testForNull = (kind == Kind.Object); |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
305 encodePointer(masm, scratch, base, shift, alignment, testForNull); |
10769 | 306 if (state != null) { |
307 throw new InternalError("NYI"); | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
308 // crb.recordImplicitException(masm.codeBuffer.position(), state); |
10769 | 309 } |
310 masm.emitStore(scratch, address.toAddress(), "u32"); | |
311 } | |
312 } | |
313 | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
314 private static void encodePointer(HSAILAssembler masm, Value scratch, long base, int shift, int alignment, boolean testForNull) { |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
315 if (base == 0 && shift == 0) { |
10769 | 316 return; |
317 } | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
318 if (shift != 0) { |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
319 assert alignment == shift : "Encode algorithm is wrong"; |
10769 | 320 } |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
321 masm.emitCompressedOopEncode(scratch, base, shift, testForNull); |
10769 | 322 } |
323 | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
324 private static void decodePointer(HSAILAssembler masm, Value result, long base, int shift, int alignment, boolean testForNull) { |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
325 if (base == 0 && shift == 0) { |
10769 | 326 return; |
327 } | |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
328 if (shift != 0) { |
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
329 assert alignment == shift : "Decode algorithm is wrong"; |
10769 | 330 } |
12698
d59a65c11feb
HSAIL support for difference between compression of oops and class pointers
Doug Simon <doug.simon@oracle.com>
parents:
12503
diff
changeset
|
331 masm.emitCompressedOopDecode(result, base, shift, testForNull); |
10769 | 332 } |
333 | |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
334 public static class LeaOp extends HSAILLIRInstruction { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
335 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
336 @Def({REG}) protected AllocatableValue result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
337 @Use({COMPOSITE, UNINITIALIZED}) protected HSAILAddressValue address; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
338 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
339 public LeaOp(AllocatableValue result, HSAILAddressValue address) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
340 this.result = result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
341 this.address = address; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
342 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
343 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
344 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
345 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
346 throw new InternalError("NYI"); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
347 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
348 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
349 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
350 public static class StackLeaOp extends HSAILLIRInstruction { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
351 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
352 @Def({REG}) protected AllocatableValue result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
353 @Use({STACK, UNINITIALIZED}) protected StackSlot slot; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
354 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
355 public StackLeaOp(AllocatableValue result, StackSlot slot) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
356 this.result = result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
357 this.slot = slot; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
358 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
359 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
360 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
361 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
362 throw new InternalError("NYI"); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
363 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
364 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
365 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
366 @Opcode("CAS") |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
367 public static class CompareAndSwapOp extends HSAILLIRInstruction { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
368 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
369 @Def protected AllocatableValue result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
370 @Use({COMPOSITE}) protected HSAILAddressValue address; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
371 @Use protected AllocatableValue cmpValue; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
372 @Use protected AllocatableValue newValue; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
373 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
374 public CompareAndSwapOp(AllocatableValue result, HSAILAddressValue address, AllocatableValue cmpValue, AllocatableValue newValue) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
375 this.result = result; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
376 this.address = address; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
377 this.cmpValue = cmpValue; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
378 this.newValue = newValue; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
379 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
380 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
381 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
382 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
12742
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
383 masm.emitAtomicCas(result, address.toAddress(), cmpValue, newValue); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
384 } |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
385 } |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
386 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
387 @Opcode("CAS") |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
388 public static class CompareAndSwapCompressedOp extends CompareAndSwapOp { |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
389 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
390 @Temp({REG}) private AllocatableValue scratchCmpValue64; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
391 @Temp({REG}) private AllocatableValue scratchNewValue64; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
392 @Temp({REG}) private AllocatableValue scratchCmpValue32; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
393 @Temp({REG}) private AllocatableValue scratchNewValue32; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
394 @Temp({REG}) private AllocatableValue scratchCasResult32; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
395 private final long base; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
396 private final int shift; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
397 private final int alignment; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
398 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
399 public CompareAndSwapCompressedOp(AllocatableValue result, HSAILAddressValue address, AllocatableValue cmpValue, AllocatableValue newValue, AllocatableValue scratchCmpValue64, |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
400 AllocatableValue scratchNewValue64, AllocatableValue scratchCmpValue32, AllocatableValue scratchNewValue32, AllocatableValue scratchCasResult32, long base, int shift, |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
401 int alignment) { |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
402 super(result, address, cmpValue, newValue); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
403 this.scratchCmpValue64 = scratchCmpValue64; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
404 this.scratchNewValue64 = scratchNewValue64; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
405 this.scratchCmpValue32 = scratchCmpValue32; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
406 this.scratchNewValue32 = scratchNewValue32; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
407 this.scratchCasResult32 = scratchCasResult32; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
408 this.base = base; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
409 this.shift = shift; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
410 this.alignment = alignment; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
411 } |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
412 |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
413 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
414 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
12742
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
415 // assume any encoded or decoded value could be null |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
416 boolean testForNull = true; |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
417 // set up scratch registers to be encoded versions |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
418 masm.emitMov(scratchCmpValue64, cmpValue); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
419 encodePointer(masm, scratchCmpValue64, base, shift, alignment, testForNull); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
420 masm.emitMov(scratchNewValue64, newValue); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
421 encodePointer(masm, scratchNewValue64, base, shift, alignment, testForNull); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
422 // get encoded versions into 32-bit registers |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
423 masm.emitConvertForceUnsigned(scratchCmpValue32, scratchCmpValue64); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
424 masm.emitConvertForceUnsigned(scratchNewValue32, scratchNewValue64); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
425 // finally do the cas |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
426 masm.emitAtomicCas(scratchCasResult32, address.toAddress(), scratchCmpValue32, scratchNewValue32); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
427 // and convert the 32-bit CasResult back to 64-bit |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
428 masm.emitConvertForceUnsigned(result, scratchCasResult32); |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
429 // and decode/uncompress the 64-bit cas result |
40924dbc623b
HSAIL support for compare-and-swap and volatile load/store operations
Doug Simon <doug.simon@oracle.com>
parents:
12698
diff
changeset
|
430 decodePointer(masm, result, base, shift, alignment, testForNull); |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
431 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
432 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
433 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
434 public static class NullCheckOp extends HSAILLIRInstruction { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
435 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
436 @Use protected Value input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
437 @State protected LIRFrameState state; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
438 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
439 public NullCheckOp(Variable input, LIRFrameState state) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
440 this.input = input; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
441 this.state = state; |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
442 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
443 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
444 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
445 public void emitCode(CompilationResultBuilder crb, HSAILAssembler masm) { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
446 Debug.log("NullCheckOp unimplemented"); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
447 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
448 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
449 |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
450 @SuppressWarnings("unused") |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
12742
diff
changeset
|
451 public static void move(CompilationResultBuilder crb, HSAILAssembler masm, Value result, Value input) { |
10662
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
452 if (isRegister(input)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
453 if (isRegister(result)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
454 masm.emitMov(result, input); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
455 } else if (isStackSlot(result)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
456 masm.emitSpillStore(input, result); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
457 } else { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
458 throw GraalInternalError.shouldNotReachHere(); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
459 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
460 } else if (isStackSlot(input)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
461 if (isRegister(result)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
462 masm.emitSpillLoad(result, input); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
463 } else { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
464 throw GraalInternalError.shouldNotReachHere(); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
465 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
466 } else if (isConstant(input)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
467 if (isRegister(result)) { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
468 masm.emitMov(result, input); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
469 } else { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
470 throw GraalInternalError.shouldNotReachHere(); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
471 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
472 } else { |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
473 throw GraalInternalError.shouldNotReachHere(); |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
474 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
475 } |
4ef92b67aeae
added HSAIL backend and tests
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
476 } |