Mercurial > hg > graal-compiler
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 |
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 } |