annotate graal/com.oracle.graal.asm.ptx/src/com/oracle/graal/asm/ptx/PTXAssembler.java @ 11822:365d8f385fb5

PTX: one-dimensional parallel warp invocation, ParallelOver annotation
author Morris Meyer <morris.meyer@oracle.com>
date Sun, 29 Sep 2013 14:47:12 -0400
parents d8659ad83fcc
children c7abc8411011
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
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
27 import com.oracle.graal.api.code.Register;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
28 import com.oracle.graal.api.code.RegisterConfig;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
29 import com.oracle.graal.api.code.TargetDescription;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
30 import com.oracle.graal.api.meta.Constant;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
31 import com.oracle.graal.api.meta.Kind;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
32 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
33 import com.oracle.graal.nodes.calc.Condition;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
34 import com.oracle.graal.graph.GraalInternalError;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
35 import com.oracle.graal.lir.Variable;
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
36
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
37 public class PTXAssembler extends AbstractPTXAssembler {
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
38
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
39 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
40 super(target);
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
41 }
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
42
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
43 public enum ConditionOperator {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
44 // @formatter:off
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
45
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
46 // Signed integer operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
47 S_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
48 S_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
49 S_LT("lt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
50 S_LE("le"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
51 S_GT("gt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
52 S_GE("ge"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
53
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
54 // Unsigned integer operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
55 U_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
56 U_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
57 U_LO("lo"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
58 U_LS("ls"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
59 U_HI("hi"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
60 U_HS("hs"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
61
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
62 // Bit-size integer operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
63 B_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
64 B_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
65
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
66 // Floating-point operators
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
67 F_EQ("eq"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
68 F_NE("ne"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
69 F_LT("lt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
70 F_LE("le"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
71 F_GT("gt"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
72 F_GE("ge"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
73
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
74 // Floating-point operators accepting NaN
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
75 F_EQU("equ"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
76 F_NEU("neu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
77 F_LTU("ltu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
78 F_LEU("leu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
79 F_GTU("gtu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
80 F_GEU("geu"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
81
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
82 // Floating-point operators testing for NaN
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
83 F_NUM("num"),
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
84 F_NAN("nan");
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
85
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
86 // @formatter:on
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 private final String operator;
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 ConditionOperator(String op) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
91 this.operator = op;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
92 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
93
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
94 public String getOperator() {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
95 return operator;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
96 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
97 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
98
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
99 public static class StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
100
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
101 protected Kind valueKind;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
102 protected Variable dest;
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
103 protected Value source1;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
104 protected Value source2;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
105 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
106
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
107 public StandardFormat(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
108 setDestination(dst);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
109 setSource1(src1);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
110 setSource2(src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
111 setKind(dst.getKind());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
112
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
113 // testAdd2B fails this assertion
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
114 // assert valueKind == src1.getKind();
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
115 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
116
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
117 public void setKind(Kind k) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
118 valueKind = k;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
119 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
120
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
121 public void setDestination(Variable var) {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
122 assert var != null;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
123 dest = var;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
124 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
125
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
126 public void setSource1(Value val) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
127 assert val != null;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
128 source1 = val;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
129 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
130
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
131 public void setSource2(Value val) {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
132 assert val != null;
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
133 source2 = val;
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
134 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
135
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
136 public void setLogicInstruction(boolean b) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
137 logicInstruction = b;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
138 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
139
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
140 public String typeForKind(Kind k) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
141 if (logicInstruction) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
142 switch (k.getTypeChar()) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
143 case 's':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
144 return "b16";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
145 case 'i':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
146 return "b32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
147 case 'j':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
148 return "b64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
149 default:
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
150 throw GraalInternalError.shouldNotReachHere();
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
151 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
152 } else {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
153 switch (k.getTypeChar()) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
154 case 'z':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
155 return "u8";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
156 case 'b':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
157 return "s8";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
158 case 's':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
159 return "s16";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
160 case 'c':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
161 return "u16";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
162 case 'i':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
163 return "s32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
164 case 'f':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
165 return "f32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
166 case 'j':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
167 return "s64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
168 case 'd':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
169 return "f64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
170 case 'a':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
171 return "u64";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
172 case '-':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
173 return "u32";
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
174 default:
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
175 throw GraalInternalError.shouldNotReachHere();
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
176 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
177 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
178 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
179
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
180 public String emit() {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
181 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
182 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
183
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
184 public String emitValue(Value v, boolean comma) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
185 assert v != null;
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
186
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
187 if (isConstant(v)) {
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
188 return (emitConstant(v));
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
189 } else {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
190 return (emitRegister((Variable) v, comma));
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
191 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
192 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
193
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
194 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
195 return (" %r" + v.index + (comma ? "," : ""));
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
196 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
197
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
198 public String emitConstant(Value v) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
199 Constant constant = (Constant) v;
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
200
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
201 switch (v.getKind().getTypeChar()) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
202 case 'i':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
203 return (String.valueOf((int) constant.asLong()));
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
204 case 'f':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
205 return (String.valueOf(constant.asFloat()));
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
206 case 'j':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
207 return (String.valueOf(constant.asLong()));
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
208 case 'd':
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
209 return (String.valueOf(constant.asDouble()));
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
210 default:
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
211 throw GraalInternalError.shouldNotReachHere();
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
212 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
213 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
214 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
215
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
216 public static class SingleOperandFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
217
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
218 protected Variable dest;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
219 protected Value source;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
220
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
221 public SingleOperandFormat(Variable dst, Value src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
222 setDestination(dst);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
223 setSource(src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
224 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
225
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
226 public void setDestination(Variable var) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
227 dest = var;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
228 }
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 public void setSource(Value var) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
231 source = var;
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
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
234 public String typeForKind(Kind k) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
235 switch (k.getTypeChar()) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
236 case 'z':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
237 return "u8";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
238 case 'b':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
239 return "s8";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
240 case 's':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
241 return "s16";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
242 case 'c':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
243 return "u16";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
244 case 'i':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
245 return "s32";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
246 case 'f':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
247 return "f32";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
248 case 'j':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
249 return "s64";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
250 case 'd':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
251 return "f64";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
252 case 'a':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
253 return "u64";
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
254 default:
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
255 throw GraalInternalError.shouldNotReachHere();
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
256 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
257 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
258
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
259 public String emit() {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
260 return (typeForKind(dest.getKind()) + " " + emitVariable(dest) + ", " + emitValue(source) + ";");
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
261 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
262
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
263 public String emitValue(Value v) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
264 assert v != null;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
265
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
266 if (isConstant(v)) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
267 return (emitConstant(v));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
268 } else {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
269 return (emitVariable((Variable) v));
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 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
272
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
273 public String emitConstant(Value v) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
274 Constant constant = (Constant) v;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
275
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
276 switch (v.getKind().getTypeChar()) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
277 case 'i':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
278 return (String.valueOf((int) constant.asLong()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
279 case 'f':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
280 return (String.valueOf(constant.asFloat()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
281 case 'j':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
282 return (String.valueOf(constant.asLong()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
283 case 'd':
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
284 return (String.valueOf(constant.asDouble()));
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
285 default:
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
286 throw GraalInternalError.shouldNotReachHere();
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 }
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
289
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
290 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
291 String name = v.getName();
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
292
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
293 if (name == null) {
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
294 return (" %r" + v.index);
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
295 } else {
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
296 return name;
365d8f385fb5 PTX: one-dimensional parallel warp invocation, ParallelOver annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11821
diff changeset
297 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
298 }
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
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
301 public static class ConversionFormat extends SingleOperandFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
302
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
303 public ConversionFormat(Variable dst, Value src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
304 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
305 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
306
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
307 @Override
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
308 public String emit() {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
309 return (typeForKind(dest.getKind()) + "." + typeForKind(source.getKind()) + " " +
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
310 emitVariable(dest) + ", " + emitValue(source) + ";");
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 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
313
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
314 public static class LoadStoreFormat extends StandardFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
315
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
316 protected PTXStateSpace space;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
317
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
318 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
319 super(dst, src1, src2);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
320 setStateSpace(space);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
321 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
322
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
323 public void setStateSpace(PTXStateSpace ss) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
324 space = ss;
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
325 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
326
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
327 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
328 assert var instanceof Variable;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
329 assert val instanceof Constant;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
330 Constant constant = (Constant) val;
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
331 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
332 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
333
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
334 @Override
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
335 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
336 /* if (space == Parameter) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
337 return ("param" + var.index);
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
338 } else {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
339 return ("%r" + var.index);
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
340 } */
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
341 return ("%r" + var.index);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
342 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
343
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
344 public String emit(boolean isLoad) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
345 if (isLoad) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
346 return (space.getStateName() + "." + typeForKind(valueKind) + " " +
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
347 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
348 } else {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
349 return (space.getStateName() + "." + typeForKind(valueKind) + " " +
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
350 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
351 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
352 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
353 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
354
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
355 public static class Add extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
356
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
357 public Add(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
358 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
359 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
360
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
361 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
362 asm.emitString("add." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
363 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
364 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
365
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
366 public static class And extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
367
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
368 public And(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
369 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
370 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
371 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
372
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
373 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
374 asm.emitString("and." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
375 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
376 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
377
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
378 public static class Div extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
379
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
380 public Div(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
381 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
382 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
383
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
384 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
385 asm.emitString("div." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
386 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
387 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
388
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
389 public static class Mul extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
390
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
391 public Mul(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
392 super(dst, src1, src2);
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
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
395 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
396 asm.emitString("mul.lo." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
397 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
398 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
399
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
400 public static class Or extends StandardFormat {
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
401
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
402 public Or(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
403 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
404 setLogicInstruction(true);
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
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
407 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
408 asm.emitString("or." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
409 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
410 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
411
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
412 public static class Rem extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
413
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
414 public Rem(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
415 super(dst, src1, src2);
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
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
418 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
419 asm.emitString("rem." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
420 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
421 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
422
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
423 public static class Shl extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
424
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
425 public Shl(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
426 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
427 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
428 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
429
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
430 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
431 asm.emitString("shl." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
432 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
433 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
434
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
435 public static class Shr extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
436
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
437 public Shr(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
438 super(dst, src1, src2);
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
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
441 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
442 asm.emitString("shr." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
443 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
444 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
445
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
446 public static class Sub extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
447
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
448 public Sub(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
449 super(dst, src1, src2);
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
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
452 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
453 asm.emitString("sub." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
454 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
455 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
456
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
457 public static class Ushr extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
458
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
459 public Ushr(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
460 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
461 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
462 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
463
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
464 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
465 asm.emitString("shr." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
466 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
467 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
468
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
469 public static class Xor extends StandardFormat {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
470
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
471 public Xor(Variable dst, Value src1, Value src2) {
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
472 super(dst, src1, src2);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
473 setLogicInstruction(true);
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
474 }
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
475
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
476 public void emit(PTXAssembler asm) {
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
477 asm.emitString("xor." + super.emit());
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
478 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
479 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
480
11683
7aed6a236e0b class-for-instruction PTXAssembler
Morris Meyer <morris.meyer@oracle.com>
parents: 11634
diff changeset
481 // 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
482 public final void bra(String tgt, int pred) {
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
483 emitString((pred >= 0) ? "" : ("@%p" + pred + " ") + "bra" + " " + tgt + ";" + "");
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
484 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
485
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
486 public final void bra_uni(String tgt) {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
487 emitString("bra.uni" + " " + tgt + ";" + "");
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
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
490 public static class Cvt extends ConversionFormat {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
491
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
492 public Cvt(Variable dst, Variable src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
493 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
494 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
495
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
496 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
497 asm.emitString("cvt." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
498 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
499 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
500
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
501 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
502
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
503 public Mov(Variable dst, Value src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
504 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
505 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
506
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
507 /*
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
508 public Mov(Variable dst, AbstractAddress src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
509 throw GraalInternalError.unimplemented("AbstractAddress Mov");
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
510 }
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
511 */
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
512
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
513 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
514 asm.emitString("mov." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
515 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
516 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
517
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
518 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
519
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
520 public Neg(Variable dst, Variable src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
521 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
522 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
523
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
524 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
525 asm.emitString("neg." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
526 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
527 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
528
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
529 public static class Not 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
530
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
531 public Not(Variable dst, Variable src) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
532 super(dst, src);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
533 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
534
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
535 public void emit(PTXAssembler asm) {
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
536 asm.emitString("not." + super.emit());
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
537 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
538 }
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
539
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
540 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
541
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
542 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
543 super(space, dst, src1, src2);
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
544 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
545
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
546 public void emit(PTXAssembler asm) {
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
547 asm.emitString("ld." + super.emit(true));
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
548 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
549 }
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
550
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
551 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
552
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
553 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
554 super(space, dst, src1, src2);
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
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
557 public void emit(PTXAssembler asm) {
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
558 asm.emitString("st." + super.emit(false));
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
559 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
560 }
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
561
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
562 public final void exit() {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
563 emitString("exit;" + " " + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
564 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
565
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
566 public static class Param extends SingleOperandFormat {
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
567
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
568 private boolean lastParameter;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
569
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
570 public Param(Variable d, boolean lastParam) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
571 super(d, null);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
572 setLastParameter(lastParam);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
573 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
574
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
575 public void setLastParameter(boolean value) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
576 lastParameter = value;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
577 }
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
578
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
579 public String emitParameter(Variable v) {
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
580 return (" %r" + v.index);
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
581 }
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
582
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
583 public void emit(PTXAssembler asm) {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
584 asm.emitString(".param ." + typeForKind(dest.getKind()) + emitParameter(dest) + (lastParameter ? "" : ","));
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
585 }
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
586 }
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
587
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
588 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
589 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
590 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
591
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
592 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
593 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
594 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
595
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
596 public final void ret() {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
597 emitString("ret;" + " " + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
598 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
599
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
600 public final void ret_uni() {
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
601 emitString("ret.uni;" + " " + "");
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
602 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
603
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
604 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
605
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
606 private ConditionOperator operator;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
607 private Value first, second;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
608 private Kind kind;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
609 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
610
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
611 public Setp(Condition condition, Value first, Value second, int predicateRegisterNumber) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
612 setFirst(first);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
613 setSecond(second);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
614 setPredicate(predicateRegisterNumber);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
615 setKind();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
616 setConditionOperator(operatorForConditon(condition));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
617 }
8995
585cc62fcdc5 PTX enhancements - arithmetic, control, float, integer math, control and basic switch
Morris Meyer <morris.meyer@oracle.com>
parents: 8170
diff changeset
618
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
619 public void setFirst(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
620 first = v;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
621 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
622
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
623 public void setSecond(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
624 second = v;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
625 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
626
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
627 public void setPredicate(int p) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
628 predicate = p;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
629 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
630
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
631 public void setConditionOperator(ConditionOperator co) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
632 operator = co;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
633 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
634
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
635 private ConditionOperator operatorForConditon(Condition condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
636 char typeChar = kind.getTypeChar();
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
637
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
638 switch (typeChar) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
639 case 'z':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
640 case 'c':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
641 case 'a':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
642 // unsigned
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
643 switch (condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
644 case EQ: return ConditionOperator.U_EQ;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
645 case NE: return ConditionOperator.U_NE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
646 case LT: return ConditionOperator.U_LO;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
647 case LE: return ConditionOperator.U_LS;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
648 case GT: return ConditionOperator.U_HI;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
649 case GE: return ConditionOperator.U_HS;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
650 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
651 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
652 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
653 case 'b':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
654 case 's':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
655 case 'i':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
656 case 'j':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
657 // signed
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
658 switch (condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
659 case EQ: return ConditionOperator.S_EQ;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
660 case NE: return ConditionOperator.S_NE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
661 case LT: return ConditionOperator.S_LT;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
662 case LE: return ConditionOperator.S_LE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
663 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
664 case GE:
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
665 case AE:
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
666 return ConditionOperator.S_GE;
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
667 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
668 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
669 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
670 case 'f':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
671 case 'd':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
672 // 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
673 switch (condition) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
674 case EQ: return ConditionOperator.F_EQ;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
675 case NE: return ConditionOperator.F_NE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
676 case LT: return ConditionOperator.F_LT;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
677 case LE: return ConditionOperator.F_LE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
678 case GT: return ConditionOperator.F_GT;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
679 case GE: return ConditionOperator.F_GE;
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
680 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
681 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
682 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
683 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
684 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
685 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
686 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
687
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
688 public void setKind() {
11775
b04b94b71649 Finished PTX assembler and Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11736
diff changeset
689 // assert isConstant(first) && isConstant(second) == false;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
690
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
691 if (isConstant(first)) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
692 kind = second.getKind();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
693 } else {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
694 kind = first.getKind();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
695 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
696 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
697
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
698 public String emitValue(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
699 assert v != null;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
700
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
701 if (isConstant(v)) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
702 return (", " + emitConstant(v));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
703 } else {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
704 return (", " + emitVariable((Variable) v));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
705 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
706 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
707
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
708 public String typeForKind(Kind k) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
709 switch (k.getTypeChar()) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
710 case 'z':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
711 return "u8";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
712 case 'b':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
713 return "s8";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
714 case 's':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
715 return "s16";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
716 case 'c':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
717 return "u16";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
718 case 'i':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
719 return "s32";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
720 case 'f':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
721 return "f32";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
722 case 'j':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
723 return "s64";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
724 case 'd':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
725 return "f64";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
726 case 'a':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
727 return "u64";
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
728 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
729 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
730 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
731 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
732
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
733 public String emitConstant(Value v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
734 Constant constant = (Constant) v;
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
735
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
736 switch (v.getKind().getTypeChar()) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
737 case 'i':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
738 return (String.valueOf((int) constant.asLong()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
739 case 'f':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
740 return (String.valueOf(constant.asFloat()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
741 case 'j':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
742 return (String.valueOf(constant.asLong()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
743 case 'd':
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
744 return (String.valueOf(constant.asDouble()));
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
745 default:
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
746 throw GraalInternalError.shouldNotReachHere();
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
747 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
748 }
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
749
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
750 public String emitVariable(Variable v) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
751 return ("%r" + v.index);
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
752 }
7805
0e58445d54df Integration fixes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7804
diff changeset
753
11736
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
754 public void emit(PTXAssembler asm) {
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
755 asm.emitString("setp." + operator.getOperator() + "." + typeForKind(kind) +
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
756 " %p" + predicate + emitValue(first) + emitValue(second) + ";");
63ca7ec7440f PTX assembler load, store and parameter refactoring
Morris Meyer <morris.meyer@oracle.com>
parents: 11731
diff changeset
757 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
758 }
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
759 @Override
8170
537f03d2bdf7 Removed unused parameter from AbstractAssembler.makeAddress().
Roland Schatz <roland.schatz@oracle.com>
parents: 8168
diff changeset
760 public PTXAddress makeAddress(Register base, int displacement) {
11731
d8f291981d75 PTX assembler Register -> Variable conversion
Morris Meyer <morris.meyer@oracle.com>
parents: 11699
diff changeset
761 throw GraalInternalError.shouldNotReachHere();
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
762 }
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
763
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
764 @Override
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
765 public PTXAddress getPlaceholder() {
11821
d8659ad83fcc PTX single-threaded array store, Warp annotation
Morris Meyer <morris.meyer@oracle.com>
parents: 11775
diff changeset
766 return null;
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7805
diff changeset
767 }
7804
447f9ba1962b Experimental PTX backend. Contribution by Christian Thalinger.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
768 }