annotate graal/com.oracle.graal.asm.ptx/src/com/oracle/graal/asm/ptx/PTXAssembler.java @ 11901:61767ccd4600

PTX boolean return value, emitIntegerTestMove, warnings
author Morris Meyer <morris.meyer@oracle.com>
date Sun, 06 Oct 2013 18:15:56 -0400
parents 1f82cda83ced
children 67a1e27a8dbb b18d4089535d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
1 /*
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
4 *
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
7 * published by the Free Software Foundation.
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
8 *
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
13 * accompanied this code).
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
14 *
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
15 * You should have received a copy of the GNU General Public License version
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
18 *
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
21 * questions.
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
22 */
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
23 package com.oracle.graal.asm.ptx;
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
24
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
25 import static com.oracle.graal.api.code.ValueUtil.*;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
26
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
27 import com.oracle.graal.asm.Label;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
28 import com.oracle.graal.api.code.Register;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
29 import com.oracle.graal.api.code.RegisterConfig;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
30 import com.oracle.graal.api.code.TargetDescription;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
31 import com.oracle.graal.api.meta.Constant;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
32 import com.oracle.graal.api.meta.Kind;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
33 import com.oracle.graal.api.meta.Value;
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
34 import com.oracle.graal.nodes.calc.Condition;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
35 import com.oracle.graal.graph.GraalInternalError;
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
36 import com.oracle.graal.lir.LabelRef;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
37 import com.oracle.graal.lir.Variable;
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
38
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
39 public class PTXAssembler extends AbstractPTXAssembler {
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
40
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
41 public PTXAssembler(TargetDescription target, @SuppressWarnings("unused") RegisterConfig registerConfig) {
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
42 super(target);
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
43 }
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
44
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
45 public enum ConditionOperator {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
46 // @formatter:off
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
47
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
48 // Signed integer operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
49 S_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
50 S_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
51 S_LT("lt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
52 S_LE("le"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
53 S_GT("gt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
54 S_GE("ge"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
55
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
56 // Unsigned integer operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
57 U_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
58 U_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
59 U_LO("lo"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
60 U_LS("ls"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
61 U_HI("hi"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
62 U_HS("hs"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
63
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
64 // Bit-size integer operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
65 B_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
66 B_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
67
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
68 // Floating-point operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
69 F_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
70 F_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
71 F_LT("lt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
72 F_LE("le"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
73 F_GT("gt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
74 F_GE("ge"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
75
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
76 // Floating-point operators accepting NaN
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
77 F_EQU("equ"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
78 F_NEU("neu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
79 F_LTU("ltu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
80 F_LEU("leu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
81 F_GTU("gtu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
82 F_GEU("geu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
83
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
84 // Floating-point operators testing for NaN
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
85 F_NUM("num"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
86 F_NAN("nan");
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
87
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
88 // @formatter:on
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
89
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
90 private final String operator;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
91
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
92 private ConditionOperator(String op) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
93 this.operator = op;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
94 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
95
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
96 public String getOperator() {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
97 return operator;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
98 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
99 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
100
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
101 public static class StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
102
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
103 protected Kind valueKind;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
104 protected Variable dest;
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
105 protected Value source1;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
106 protected Value source2;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
107 private boolean logicInstruction = false;
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
108
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
109 public StandardFormat(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
110 setDestination(dst);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
111 setSource1(src1);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
112 setSource2(src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
113 setKind(dst.getKind());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
114
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
115 // testAdd2B fails this assertion
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
116 // assert valueKind == src1.getKind();
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
117 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
118
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
119 public void setKind(Kind k) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
120 valueKind = k;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
121 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
122
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
123 public void setDestination(Variable var) {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
124 assert var != null;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
125 dest = var;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
126 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
127
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
128 public void setSource1(Value val) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
129 assert val != null;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
130 source1 = val;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
131 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
132
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
133 public void setSource2(Value val) {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
134 assert val != null;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
135 source2 = val;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
136 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
137
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
138 public void setLogicInstruction(boolean b) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
139 logicInstruction = b;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
140 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
141
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
142 public String typeForKind(Kind k) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
143 if (logicInstruction) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
144 switch (k.getTypeChar()) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
145 case 's':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
146 return "b16";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
147 case 'i':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
148 return "b32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
149 case 'j':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
150 return "b64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
151 default:
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
152 throw GraalInternalError.shouldNotReachHere();
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
153 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
154 } else {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
155 switch (k.getTypeChar()) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
156 case 'z':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
157 return "u8";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
158 case 'b':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
159 return "s8";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
160 case 's':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
161 return "s16";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
162 case 'c':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
163 return "u16";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
164 case 'i':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
165 return "s32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
166 case 'f':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
167 return "f32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
168 case 'j':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
169 return "s64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
170 case 'd':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
171 return "f64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
172 case 'a':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
173 return "u64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
174 case '-':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
175 return "u32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
176 default:
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
177 throw GraalInternalError.shouldNotReachHere();
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
178 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
179 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
180 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
181
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
182 public String emit() {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
183 return (typeForKind(valueKind) + emitRegister(dest, true) + emitValue(source1, true) + emitValue(source2, false) + ";");
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
184 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
185
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
186 public String emitValue(Value v, boolean comma) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
187 assert v != null;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
188
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
189 if (isConstant(v)) {
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
190 return (emitConstant(v, comma));
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
191 } else {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
192 return (emitRegister((Variable) v, comma));
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
193 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
194 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
195
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
196 public String emitRegister(Variable v, boolean comma) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
197 return (" %r" + v.index + (comma ? "," : ""));
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
198 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
199
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
200 public String emitConstant(Value v, boolean comma) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
201 Constant constant = (Constant) v;
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
202 String str = null;
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
203
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
204 switch (v.getKind().getTypeChar()) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
205 case 'i':
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
206 str = String.valueOf((int) constant.asLong());
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
207 break;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
208 case 'f':
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
209 str = String.valueOf(constant.asFloat());
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
210 break;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
211 case 'j':
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
212 str = String.valueOf(constant.asLong());
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
213 break;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
214 case 'd':
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
215 str = String.valueOf(constant.asDouble());
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
216 break;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
217 default:
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
218 throw GraalInternalError.shouldNotReachHere();
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
219 }
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
220 if (comma) {
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
221 return (str + ",");
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
222 } else {
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
223 return str;
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
224 }
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
225 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
226 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
227
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
228 public static class SingleOperandFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
229
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
230 protected Variable dest;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
231 protected Value source;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
232
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
233 public SingleOperandFormat(Variable dst, Value src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
234 setDestination(dst);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
235 setSource(src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
236 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
237
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
238 public void setDestination(Variable var) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
239 dest = var;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
240 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
241
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
242 public void setSource(Value var) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
243 source = var;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
244 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
245
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
246 public String typeForKind(Kind k) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
247 switch (k.getTypeChar()) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
248 case 'z':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
249 return "u8";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
250 case 'b':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
251 return "s8";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
252 case 's':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
253 return "s16";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
254 case 'c':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
255 return "u16";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
256 case 'i':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
257 return "s32";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
258 case 'f':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
259 return "f32";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
260 case 'j':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
261 return "s64";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
262 case 'd':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
263 return "f64";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
264 case 'a':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
265 return "u64";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
266 default:
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
267 throw GraalInternalError.shouldNotReachHere();
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
268 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
269 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
270
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
271 public String emit() {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
272 return (typeForKind(dest.getKind()) + " " + emitVariable(dest) + ", " + emitValue(source) + ";");
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
273 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
274
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
275 public String emitValue(Value v) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
276 assert v != null;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
277
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
278 if (isConstant(v)) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
279 return (emitConstant(v));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
280 } else {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
281 return (emitVariable((Variable) v));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
282 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
283 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
284
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
285 public String emitConstant(Value v) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
286 Constant constant = (Constant) v;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
287
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
288 switch (v.getKind().getTypeChar()) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
289 case 'i':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
290 return (String.valueOf((int) constant.asLong()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
291 case 'f':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
292 return (String.valueOf(constant.asFloat()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
293 case 'j':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
294 return (String.valueOf(constant.asLong()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
295 case 'd':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
296 return (String.valueOf(constant.asDouble()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
297 default:
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
298 throw GraalInternalError.shouldNotReachHere();
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
299 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
300 }
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
301
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
302 public String emitVariable(Variable v) {
11822
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
303 String name = v.getName();
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
304
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
305 if (name == null) {
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
306 return (" %r" + v.index);
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
307 } else {
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
308 return name;
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
309 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
310 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
311 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
312
11896
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
313 public static class BinarySingleOperandFormat extends SingleOperandFormat {
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
314
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
315 public BinarySingleOperandFormat(Variable dst, Value src) {
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
316 super(dst, src);
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
317 }
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
318
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
319 @Override
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
320 public String typeForKind(Kind k) {
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
321 switch (k.getTypeChar()) {
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
322 case 's':
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
323 return "b16";
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
324 case 'i':
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
325 return "b32";
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
326 case 'j':
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
327 return "b64";
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
328 default:
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
329 throw GraalInternalError.shouldNotReachHere();
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
330 }
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
331 }
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
332 }
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
333
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
334 public static class ConversionFormat extends SingleOperandFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
335
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
336 public ConversionFormat(Variable dst, Value src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
337 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
338 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
339
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
340 @Override
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
341 public String emit() {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
342 return (typeForKind(dest.getKind()) + "." + typeForKind(source.getKind()) + " " +
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
343 emitVariable(dest) + ", " + emitValue(source) + ";");
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
344 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
345 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
346
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
347 public static class LoadStoreFormat extends StandardFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
348
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
349 protected PTXStateSpace space;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
350
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
351 public LoadStoreFormat(PTXStateSpace space, Variable dst, Value src1, Value src2) {
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
352 super(dst, src1, src2);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
353 setStateSpace(space);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
354 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
355
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
356 public void setStateSpace(PTXStateSpace ss) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
357 space = ss;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
358 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
359
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
360 public String emitAddress(Value var, Value val) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
361 assert var instanceof Variable;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
362 assert val instanceof Constant;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
363 Constant constant = (Constant) val;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
364 return ("[" + emitRegister((Variable) var, false) + " + " + constant.asBoxedValue() + "]");
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
365 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
366
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
367 @Override
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
368 public String emitRegister(Variable var, boolean comma) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
369 /* if (space == Parameter) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
370 return ("param" + var.index);
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
371 } else {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
372 return ("%r" + var.index);
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
373 } */
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
374 return ("%r" + var.index);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
375 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
376
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
377 public String emit(boolean isLoad) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
378 if (isLoad) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
379 return (space.getStateName() + "." + typeForKind(valueKind) + " " +
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
380 emitRegister(dest, false) + ", " + emitAddress(source1, source2) + ";");
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
381 } else {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
382 return (space.getStateName() + "." + typeForKind(valueKind) + " " +
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
383 emitAddress(source1, source2) + ", " + emitRegister(dest, false) + ";");
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
384 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
385 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
386 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
387
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
388 public static class Add extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
389
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
390 public Add(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
391 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
392 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
393
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
394 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
395 asm.emitString("add." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
396 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
397 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
398
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
399 public static class And extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
400
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
401 public And(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
402 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
403 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
404 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
405
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
406 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
407 asm.emitString("and." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
408 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
409 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
410
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
411 public static class Div extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
412
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
413 public Div(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
414 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
415 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
416
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
417 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
418 asm.emitString("div." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
419 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
420 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
421
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
422 public static class Mul extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
423
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
424 public Mul(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
425 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
426 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
427
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
428 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
429 asm.emitString("mul.lo." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
430 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
431 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
432
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
433 public static class Or extends StandardFormat {
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
434
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
435 public Or(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
436 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
437 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
438 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
439
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
440 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
441 asm.emitString("or." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
442 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
443 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
444
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
445 public static class Rem extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
446
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
447 public Rem(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
448 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
449 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
450
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
451 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
452 asm.emitString("rem." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
453 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
454 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
455
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
456 public static class Shl extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
457
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
458 public Shl(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
459 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
460 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
461 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
462
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
463 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
464 asm.emitString("shl." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
465 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
466 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
467
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
468 public static class Shr extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
469
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
470 public Shr(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
471 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
472 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
473
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
474 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
475 asm.emitString("shr." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
476 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
477 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
478
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
479 public static class Sub extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
480
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
481 public Sub(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
482 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
483 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
484
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
485 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
486 asm.emitString("sub." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
487 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
488 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
489
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
490 public static class Ushr extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
491
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
492 public Ushr(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
493 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
494 setKind(Kind.Illegal); // get around not having an Unsigned Kind
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
495 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
496
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
497 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
498 asm.emitString("shr." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
499 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
500 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
501
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
502 public static class Xor extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
503
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
504 public Xor(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
505 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
506 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
507 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
508
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
509 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
510 asm.emitString("xor." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
511 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
512 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
513
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
514 // Checkstyle: stop method name check
11699
03fe11f5f186 PTX Codegen: predicate register materialization and declaration; conditional branch generation; fix register declaration.
S.Bharadwaj Yadavalli <bharadwaj.yadavalli@oracle.com>
parents: 11683
diff changeset
515 public final void bra(String tgt, int pred) {
11896
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
516 assert pred >= 0;
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
517
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
518 if (tgt.equals("?")) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
519 Thread.dumpStack();
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
520 }
11896
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
521 emitString("@%p" + pred + " " + "bra" + " " + tgt + ";");
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
522 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
523
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
524 public final void bra(String src) {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
525 emitString("bra " + src + ";");
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
526 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
527
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
528 public final void bra_uni(String tgt) {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
529 emitString("bra.uni" + " " + tgt + ";" + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
530 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
531
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
532 public static class Cvt extends ConversionFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
533
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
534 public Cvt(Variable dst, Variable src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
535 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
536 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
537
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
538 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
539 asm.emitString("cvt." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
540 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
541 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
542
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
543 public static class Mov extends SingleOperandFormat {
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
544
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
545 private int predicateRegisterNumber = -1;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
546
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
547 public Mov(Variable dst, Value src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
548 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
549 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
550
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
551 public Mov(Variable dst, Value src, int predicate) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
552 super(dst, src);
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
553 this.predicateRegisterNumber = predicate;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
554 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
555 /*
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
556 public Mov(Variable dst, AbstractAddress src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
557 throw GraalInternalError.unimplemented("AbstractAddress Mov");
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
558 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
559 */
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
560
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
561 public void emit(PTXAssembler asm) {
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
562 if (predicateRegisterNumber >= 0) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
563 asm.emitString("@%p" + String.valueOf(predicateRegisterNumber)
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
564 + " mov." + super.emit());
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
565 } else {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
566 asm.emitString("mov." + super.emit());
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
567 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
568 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
569 }
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
570
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
571 public static class Neg extends SingleOperandFormat {
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
572
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
573 public Neg(Variable dst, Variable src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
574 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
575 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
576
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
577 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
578 asm.emitString("neg." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
579 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
580 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
581
11896
280f97f13d54 Fixes to PTX control flow logic
Morris Meyer <morris.meyer@oracle.com>
parents: 11894
diff changeset
582 public static class Not extends BinarySingleOperandFormat {
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
583
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
584 public Not(Variable dst, Variable src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
585 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
586 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
587
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
588 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
589 asm.emitString("not." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
590 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
591 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
592
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
593 public static class Ld extends LoadStoreFormat {
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
594
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
595 public Ld(PTXStateSpace space, Variable dst, Variable src1, Value src2) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
596 super(space, dst, src1, src2);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
597 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
598
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
599 public void emit(PTXAssembler asm) {
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
600 asm.emitString("ld." + super.emit(true));
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
601 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
602 }
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
603
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
604 public static class St extends LoadStoreFormat {
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
605
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
606 public St(PTXStateSpace space, Variable dst, Variable src1, Value src2) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
607 super(space, dst, src1, src2);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
608 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
609
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
610 public void emit(PTXAssembler asm) {
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
611 asm.emitString("st." + super.emit(false));
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
612 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
613 }
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
614
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
615 public final void exit() {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
616 emitString("exit;" + " " + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
617 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
618
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
619 public static class Global {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
620
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
621 private Kind kind;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
622 private String name;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
623 private LabelRef[] targets;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
624
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
625 public Global(Value val, String name, LabelRef[] targets) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
626 this.kind = val.getKind();
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
627 this.name = name;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
628 this.targets = targets;
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
629 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
630
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
631 private static String valueForKind(Kind k) {
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
632 switch (k.getTypeChar()) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
633 case 'i':
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
634 return "s32";
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
635 case 'j':
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
636 return "s64";
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
637 default:
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
638 throw GraalInternalError.shouldNotReachHere();
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
639 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
640 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
641
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
642 private static String emitTargets(PTXAssembler asm, LabelRef[] refs) {
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
643 StringBuffer sb = new StringBuffer();
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
644
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
645 for (int i = 0; i < refs.length; i++) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
646 sb.append(asm.nameOf(refs[i].label()));
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
647 if (i < (refs.length -1)) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
648 sb.append(", ");
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
649 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
650 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
651
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
652 return sb.toString();
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
653 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
654
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
655 public void emit(PTXAssembler asm) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
656 asm.emitString(".global ." + valueForKind(kind) +
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
657 " " + name + "[" + targets.length + "] = " +
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
658 "{ " + emitTargets(asm, targets) + " };");
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
659 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
660 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
661
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
662 public static class Param extends SingleOperandFormat {
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
663
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
664 private boolean lastParameter;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
665
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
666 public Param(Variable d, boolean lastParam) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
667 super(d, null);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
668 setLastParameter(lastParam);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
669 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
670
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
671 public void setLastParameter(boolean value) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
672 lastParameter = value;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
673 }
11485
49bb1bc983c6 Implement several missing PTX codegen features; return value capture and method args passing of java method executed on GPU.
bharadwaj
parents: 10513
diff changeset
674
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
675 public String emitParameter(Variable v) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
676 return (" %r" + v.index);
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
677 }
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
678
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
679 public void emit(PTXAssembler asm) {
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
680 asm.emitString(".param ." + paramForKind(dest.getKind()) + emitParameter(dest) + (lastParameter ? "" : ","));
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
681 }
11894
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
682
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
683 public String paramForKind(Kind k) {
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
684 switch (k.getTypeChar()) {
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
685 case 'z':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
686 case 'f':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
687 return "s32";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
688 case 'b':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
689 return "s8";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
690 case 's':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
691 return "s16";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
692 case 'c':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
693 return "u16";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
694 case 'i':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
695 return "s32";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
696 case 'j':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
697 return "s64";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
698 case 'd':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
699 return "f64";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
700 case 'a':
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
701 return "u64";
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
702 default:
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
703 throw GraalInternalError.shouldNotReachHere();
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
704 }
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
705 }
c7abc8411011 Fixed BasicPTXTest and IntegerPTXTest
Morris Meyer <morris.meyer@oracle.com>
parents: 11822
diff changeset
706
11485
49bb1bc983c6 Implement several missing PTX codegen features; return value capture and method args passing of java method executed on GPU.
bharadwaj
parents: 10513
diff changeset
707 }
49bb1bc983c6 Implement several missing PTX codegen features; return value capture and method args passing of java method executed on GPU.
bharadwaj
parents: 10513
diff changeset
708
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
709 public final void popc_b32(Register d, Register a) {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
710 emitString("popc.b32" + " " + "%r" + d.encoding() + ", %r" + a.encoding() + ";" + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
711 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
712
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
713 public final void popc_b64(Register d, Register a) {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
714 emitString("popc.b64" + " " + "%r" + d.encoding() + ", %r" + a.encoding() + ";" + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
715 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
716
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
717 public final void ret() {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
718 emitString("ret;" + " " + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
719 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
720
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
721 public final void ret_uni() {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
722 emitString("ret.uni;" + " " + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
723 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
724
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
725 public enum BooleanOperator {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
726 AND("and"),
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
727 OR("or"),
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
728 XOR("xor");
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
729
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
730 private final String output;
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
731
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
732 private BooleanOperator(String out) {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
733 this.output = out;
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
734 }
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
735
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
736 public String getOperator() {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
737 return output + ".";
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
738 }
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
739 }
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
740
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
741 public static class Setp {
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
742
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
743
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
744 private BooleanOperator booleanOperator;
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
745 private ConditionOperator operator;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
746 private Value first, second;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
747 private Kind kind;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
748 private int predicate;
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
749
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
750 public Setp(Condition condition,
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
751 Value first, Value second,
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
752 int predicateRegisterNumber) {
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
753 setFirst(first);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
754 setSecond(second);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
755 setPredicate(predicateRegisterNumber);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
756 setKind();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
757 setConditionOperator(operatorForConditon(condition));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
758 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
759
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
760 public Setp(Condition condition, BooleanOperator operator,
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
761 Value first, Value second,
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
762 int predicateRegisterNumber) {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
763 setFirst(first);
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
764 setSecond(second);
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
765 setPredicate(predicateRegisterNumber);
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
766 setKind();
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
767 setConditionOperator(operatorForConditon(condition));
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
768 setBooleanOperator(operator);
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
769 }
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
770
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
771 public void setFirst(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
772 first = v;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
773 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
774
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
775 public void setSecond(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
776 second = v;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
777 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
778
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
779 public void setPredicate(int p) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
780 predicate = p;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
781 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
782
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
783 public void setConditionOperator(ConditionOperator co) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
784 operator = co;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
785 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
786
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
787 public void setBooleanOperator(BooleanOperator bo) {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
788 booleanOperator = bo;
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
789 }
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
790
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
791 private ConditionOperator operatorForConditon(Condition condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
792 char typeChar = kind.getTypeChar();
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
793
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
794 switch (typeChar) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
795 case 'z':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
796 case 'c':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
797 case 'a':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
798 // unsigned
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
799 switch (condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
800 case EQ: return ConditionOperator.U_EQ;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
801 case NE: return ConditionOperator.U_NE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
802 case LT: return ConditionOperator.U_LO;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
803 case LE: return ConditionOperator.U_LS;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
804 case GT: return ConditionOperator.U_HI;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
805 case GE: return ConditionOperator.U_HS;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
806 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
807 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
808 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
809 case 'b':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
810 case 's':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
811 case 'i':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
812 case 'j':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
813 // signed
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
814 switch (condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
815 case EQ: return ConditionOperator.S_EQ;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
816 case NE: return ConditionOperator.S_NE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
817 case LT: return ConditionOperator.S_LT;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
818 case LE: return ConditionOperator.S_LE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
819 case GT: return ConditionOperator.S_GT;
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
820 case GE:
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
821 case AE:
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
822 return ConditionOperator.S_GE;
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
823 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
824 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
825 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
826 case 'f':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
827 case 'd':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
828 // floating point - do these need to accept NaN??
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
829 switch (condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
830 case EQ: return ConditionOperator.F_EQ;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
831 case NE: return ConditionOperator.F_NE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
832 case LT: return ConditionOperator.F_LT;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
833 case LE: return ConditionOperator.F_LE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
834 case GT: return ConditionOperator.F_GT;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
835 case GE: return ConditionOperator.F_GE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
836 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
837 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
838 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
839 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
840 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
841 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
842 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
843
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
844 public void setKind() {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
845 // assert isConstant(first) && isConstant(second) == false;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
846
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
847 if (isConstant(first)) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
848 kind = second.getKind();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
849 } else {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
850 kind = first.getKind();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
851 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
852 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
853
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
854 public String emitValue(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
855 assert v != null;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
856
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
857 if (isConstant(v)) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
858 return (", " + emitConstant(v));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
859 } else {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
860 return (", " + emitVariable((Variable) v));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
861 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
862 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
863
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
864 public String typeForKind(Kind k) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
865 switch (k.getTypeChar()) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
866 case 'z':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
867 return "u8";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
868 case 'b':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
869 return "s8";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
870 case 's':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
871 return "s16";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
872 case 'c':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
873 return "u16";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
874 case 'i':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
875 return "s32";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
876 case 'f':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
877 return "f32";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
878 case 'j':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
879 return "s64";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
880 case 'd':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
881 return "f64";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
882 case 'a':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
883 return "u64";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
884 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
885 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
886 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
887 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
888
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
889 public String emitConstant(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
890 Constant constant = (Constant) v;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
891
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
892 switch (v.getKind().getTypeChar()) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
893 case 'i':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
894 return (String.valueOf((int) constant.asLong()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
895 case 'f':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
896 return (String.valueOf(constant.asFloat()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
897 case 'j':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
898 return (String.valueOf(constant.asLong()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
899 case 'd':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
900 return (String.valueOf(constant.asDouble()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
901 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
902 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
903 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
904 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
905
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
906 public String emitVariable(Variable v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
907 return ("%r" + v.index);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
908 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
909
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
910 public void emit(PTXAssembler asm) {
11901
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
911
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
912 if (booleanOperator != null) {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
913 asm.emitString("setp." +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
914 operator.getOperator() + "." +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
915 booleanOperator.getOperator() +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
916 typeForKind(kind) + " %p" + predicate +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
917 emitValue(first) + emitValue(second) +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
918 ", %r;"); // Predicates need to be objects
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
919
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
920 } else {
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
921 asm.emitString("setp." +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
922 operator.getOperator() + "." +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
923 typeForKind(kind) + " %p" + predicate +
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
924 emitValue(first) + emitValue(second) + ";");
61767ccd4600 PTX boolean return value, emitIntegerTestMove, warnings
Morris Meyer <morris.meyer@oracle.com>
parents: 11900
diff changeset
925 }
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
926 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
927 }
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
928 @Override
8170
537f03d2bdf7 Removed unused parameter from AbstractAssembler.makeAddress().
Roland Schatz <roland.schatz@oracle.com>
parents: 8168
diff changeset
929 public PTXAddress makeAddress(Register base, int displacement) {
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
930 throw GraalInternalError.shouldNotReachHere();
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
931 }
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
932
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
933 @Override
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
934 public PTXAddress getPlaceholder() {
11821
d8659ad83fcc PTX single-threaded array store, Warp annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11775
diff changeset
935 return null;
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
936 }
11900
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
937
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
938 @Override
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
939 public void jmp(Label l) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
940 String str = nameOf(l);
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
941 if (l.equals("?")) {
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
942 Thread.dumpStack();
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
943 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
944 bra(str);
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
945 }
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
946
1f82cda83ced PTX conditional move, switch, if-else
Morris Meyer <morris.meyer@oracle.com>
parents: 11896
diff changeset
947
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
948 }