Mercurial > hg > truffle
annotate graal/com.oracle.graal.sparc/src/com/oracle/graal/sparc/SPARC.java @ 18253:edb88f5425e6
switch to using use .equals() instead of == when comparing RegisterCaterory objects for equality
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 05 Nov 2014 12:23:57 +0100 |
parents | c88ab4f1f04a |
children | b1a8928fc4b9 |
rev | line source |
---|---|
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
15345 | 2 * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. |
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.sparc; |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
25 import static com.oracle.graal.api.code.MemoryBarriers.*; |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
26 |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
27 import java.nio.*; |
17082
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
28 import java.util.*; |
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
29 |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.api.code.*; |
9425
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
31 import com.oracle.graal.api.code.Register.RegisterCategory; |
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
32 import com.oracle.graal.api.meta.*; |
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
33 |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
34 /** |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
35 * Represents the SPARC architecture. |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
36 */ |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
37 public class SPARC extends Architecture { |
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
38 |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
39 public static final RegisterCategory CPU = new RegisterCategory("CPU"); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
40 |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
41 // General purpose registers |
15345 | 42 public static final Register r0 = new Register(0, 0, "g0", CPU); |
43 public static final Register r1 = new Register(1, 1, "g1", CPU); | |
44 public static final Register r2 = new Register(2, 2, "g2", CPU); | |
45 public static final Register r3 = new Register(3, 3, "g3", CPU); | |
46 public static final Register r4 = new Register(4, 4, "g4", CPU); | |
47 public static final Register r5 = new Register(5, 5, "g5", CPU); | |
48 public static final Register r6 = new Register(6, 6, "g6", CPU); | |
49 public static final Register r7 = new Register(7, 7, "g7", CPU); | |
50 | |
51 public static final Register r8 = new Register(8, 8, "o0", CPU); | |
52 public static final Register r9 = new Register(9, 9, "o1", CPU); | |
10854
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
53 public static final Register r10 = new Register(10, 10, "o2", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
54 public static final Register r11 = new Register(11, 11, "o3", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
55 public static final Register r12 = new Register(12, 12, "o4", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
56 public static final Register r13 = new Register(13, 13, "o5", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
57 public static final Register r14 = new Register(14, 14, "o6", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
58 public static final Register r15 = new Register(15, 15, "o7", CPU); |
15345 | 59 |
10854
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
60 public static final Register r16 = new Register(16, 16, "l0", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
61 public static final Register r17 = new Register(17, 17, "l1", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
62 public static final Register r18 = new Register(18, 18, "l2", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
63 public static final Register r19 = new Register(19, 19, "l3", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
64 public static final Register r20 = new Register(20, 20, "l4", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
65 public static final Register r21 = new Register(21, 21, "l5", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
66 public static final Register r22 = new Register(22, 22, "l6", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
67 public static final Register r23 = new Register(23, 23, "l7", CPU); |
15345 | 68 |
10854
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
69 public static final Register r24 = new Register(24, 24, "i0", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
70 public static final Register r25 = new Register(25, 25, "i1", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
71 public static final Register r26 = new Register(26, 26, "i2", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
72 public static final Register r27 = new Register(27, 27, "i3", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
73 public static final Register r28 = new Register(28, 28, "i4", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
74 public static final Register r29 = new Register(29, 29, "i5", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
75 public static final Register r30 = new Register(30, 30, "i6", CPU); |
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10686
diff
changeset
|
76 public static final Register r31 = new Register(31, 31, "i7", CPU); |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
77 |
9844
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
78 public static final Register g0 = r0; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
79 public static final Register g1 = r1; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
80 public static final Register g2 = r2; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
81 public static final Register g3 = r3; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
82 public static final Register g4 = r4; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
83 public static final Register g5 = r5; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
84 public static final Register g6 = r6; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
85 public static final Register g7 = r7; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
86 |
10459 | 87 public static final Register o0 = r8; |
88 public static final Register o1 = r9; | |
89 public static final Register o2 = r10; | |
90 public static final Register o3 = r11; | |
91 public static final Register o4 = r12; | |
92 public static final Register o5 = r13; | |
93 public static final Register o6 = r14; | |
94 public static final Register o7 = r15; | |
95 | |
96 public static final Register l0 = r16; | |
97 public static final Register l1 = r17; | |
98 public static final Register l2 = r18; | |
99 public static final Register l3 = r19; | |
100 public static final Register l4 = r20; | |
101 public static final Register l5 = r21; | |
102 public static final Register l6 = r22; | |
103 public static final Register l7 = r23; | |
104 | |
9844
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
105 public static final Register i0 = r24; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
106 public static final Register i1 = r25; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
107 public static final Register i2 = r26; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
108 public static final Register i3 = r27; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
109 public static final Register i4 = r28; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
110 public static final Register i5 = r29; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
111 public static final Register i6 = r30; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
112 public static final Register i7 = r31; |
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
113 |
10898 | 114 public static final Register sp = o6; |
10459 | 115 public static final Register fp = i6; |
9844
2d1687e63484
SPARCMacroAssembler and synthetic instructions
Morris Meyer <morris.meyer@oracle.com>
parents:
9816
diff
changeset
|
116 |
15345 | 117 // @formatter:off |
10686
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
118 public static final Register[] cpuRegisters = { |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
119 r0, r1, r2, r3, r4, r5, r6, r7, |
10686
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
120 r8, r9, r10, r11, r12, r13, r14, r15, |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
121 r16, r17, r18, r19, r20, r21, r22, r23, |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
122 r24, r25, r26, r27, r28, r29, r30, r31 |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
123 }; |
15345 | 124 // @formatter:on |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
125 |
16093
39be5bc00046
Support XMM registers in oop maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
15345
diff
changeset
|
126 public static final RegisterCategory FPU = new RegisterCategory("FPU", cpuRegisters.length); |
39be5bc00046
Support XMM registers in oop maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
15345
diff
changeset
|
127 |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
128 // Floating point registers |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
129 public static final Register f0 = new Register(32, 0, "f0", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
130 public static final Register f1 = new Register(33, 1, "f1", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
131 public static final Register f2 = new Register(34, 2, "f2", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
132 public static final Register f3 = new Register(35, 3, "f3", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
133 public static final Register f4 = new Register(36, 4, "f4", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
134 public static final Register f5 = new Register(37, 5, "f5", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
135 public static final Register f6 = new Register(38, 6, "f6", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
136 public static final Register f7 = new Register(39, 7, "f7", FPU); |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
137 |
15345 | 138 public static final Register f8 = new Register(40, 8, "f8", FPU); |
139 public static final Register f9 = new Register(41, 9, "f9", FPU); | |
140 public static final Register f10 = new Register(42, 10, "f10", FPU); | |
141 public static final Register f11 = new Register(43, 11, "f11", FPU); | |
142 public static final Register f12 = new Register(44, 12, "f12", FPU); | |
143 public static final Register f13 = new Register(45, 13, "f13", FPU); | |
144 public static final Register f14 = new Register(46, 14, "f14", FPU); | |
145 public static final Register f15 = new Register(47, 15, "f15", FPU); | |
146 | |
147 public static final Register f16 = new Register(48, 16, "f16", FPU); | |
148 public static final Register f17 = new Register(49, 17, "f17", FPU); | |
149 public static final Register f18 = new Register(50, 18, "f18", FPU); | |
150 public static final Register f19 = new Register(51, 19, "f19", FPU); | |
151 public static final Register f20 = new Register(52, 20, "f20", FPU); | |
152 public static final Register f21 = new Register(53, 21, "f21", FPU); | |
153 public static final Register f22 = new Register(54, 22, "f22", FPU); | |
154 public static final Register f23 = new Register(55, 23, "f23", FPU); | |
155 | |
156 public static final Register f24 = new Register(56, 24, "f24", FPU); | |
157 public static final Register f25 = new Register(57, 25, "f25", FPU); | |
158 public static final Register f26 = new Register(58, 26, "f26", FPU); | |
159 public static final Register f27 = new Register(59, 27, "f27", FPU); | |
160 public static final Register f28 = new Register(60, 28, "f28", FPU); | |
161 public static final Register f29 = new Register(61, 29, "f29", FPU); | |
162 public static final Register f30 = new Register(62, 30, "f30", FPU); | |
163 public static final Register f31 = new Register(63, 31, "f31", FPU); | |
164 | |
16995
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
165 public static final Register d32 = new Register(64, getDoubleEncoding(32), "d32", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
166 public static final Register d34 = new Register(65, getDoubleEncoding(34), "d34", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
167 public static final Register d36 = new Register(66, getDoubleEncoding(36), "d36", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
168 public static final Register d38 = new Register(67, getDoubleEncoding(38), "d38", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
169 public static final Register d40 = new Register(68, getDoubleEncoding(40), "d40", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
170 public static final Register d42 = new Register(69, getDoubleEncoding(42), "d42", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
171 public static final Register d44 = new Register(70, getDoubleEncoding(44), "d44", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
172 public static final Register d46 = new Register(71, getDoubleEncoding(46), "d46", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
173 |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
174 public static final Register d48 = new Register(72, getDoubleEncoding(48), "d48", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
175 public static final Register d50 = new Register(73, getDoubleEncoding(50), "d50", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
176 public static final Register d52 = new Register(74, getDoubleEncoding(52), "d52", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
177 public static final Register d54 = new Register(75, getDoubleEncoding(54), "d54", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
178 public static final Register d56 = new Register(76, getDoubleEncoding(56), "d56", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
179 public static final Register d58 = new Register(77, getDoubleEncoding(58), "d58", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
180 public static final Register d60 = new Register(78, getDoubleEncoding(60), "d60", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
181 public static final Register d62 = new Register(79, getDoubleEncoding(62), "d62", FPU); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
182 |
15345 | 183 // @formatter:off |
184 public static final Register[] fpuRegisters = { | |
185 f0, f1, f2, f3, f4, f5, f6, f7, | |
186 f8, f9, f10, f11, f12, f13, f14, f15, | |
187 f16, f17, f18, f19, f20, f21, f22, f23, | |
16995
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
188 f24, f25, f26, f27, f28, f29, f30, f31, |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
189 d32, d34, d36, d38, d40, d42, d44, d46, |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
190 d48, d50, d52, d54, d56, d58, d60, d62 |
15345 | 191 }; |
192 // @formatter:on | |
193 | |
194 // @formatter:off | |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
195 public static final Register[] allRegisters = { |
10686
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
196 // CPU |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
197 r0, r1, r2, r3, r4, r5, r6, r7, |
10898 | 198 r8, r9, r10, r11, r12, r13, r14, r15, |
199 r16, r17, r18, r19, r20, r21, r22, r23, | |
200 r24, r25, r26, r27, r28, r29, r30, r31, | |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
201 // FPU |
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
202 f0, f1, f2, f3, f4, f5, f6, f7, |
15345 | 203 f8, f9, f10, f11, f12, f13, f14, f15, |
204 f16, f17, f18, f19, f20, f21, f22, f23, | |
16995
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
205 f24, f25, f26, f27, f28, f29, f30, f31, |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
206 d32, d34, d36, d38, d40, d42, d44, d46, |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
207 d48, d50, d52, d54, d56, d58, d60, d62 |
9816
4e9854086532
Initial SPARC compilation test
Morris Meyer <morris.meyer@oracle.com>
parents:
9695
diff
changeset
|
208 }; |
15345 | 209 // @formatter:on |
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
210 |
15345 | 211 /** |
212 * Stack bias for stack and frame pointer loads. | |
213 */ | |
214 public static final int STACK_BIAS = 0x7ff; | |
16645
8c70d65ec04a
[SPARC] Fix issues when deoptimizing with floats in local scope.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16094
diff
changeset
|
215 /** |
8c70d65ec04a
[SPARC] Fix issues when deoptimizing with floats in local scope.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16094
diff
changeset
|
216 * In fact there are 64 single floating point registers, 32 of them could be accessed. TODO: |
8c70d65ec04a
[SPARC] Fix issues when deoptimizing with floats in local scope.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16094
diff
changeset
|
217 * Improve handling of these float registers |
8c70d65ec04a
[SPARC] Fix issues when deoptimizing with floats in local scope.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16094
diff
changeset
|
218 */ |
8c70d65ec04a
[SPARC] Fix issues when deoptimizing with floats in local scope.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16094
diff
changeset
|
219 public static final int FLOAT_REGISTER_COUNT = 64; |
10686
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
220 |
16654
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
221 /** |
18163
c88ab4f1f04a
re-enabled Checkstyle with the release of 6.0 that supports Java 8; fixed existing Checkstyle warnings
Doug Simon <doug.simon@oracle.com>
parents:
17144
diff
changeset
|
222 * Alignment for valid memory access. |
16654
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
223 */ |
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
224 public static final int MEMORY_ACCESS_ALIGN = 4; |
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
225 |
17082
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
226 public final Set<CPUFeature> features; |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
227 |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
228 public SPARC(Set<CPUFeature> features) { |
16645
8c70d65ec04a
[SPARC] Fix issues when deoptimizing with floats in local scope.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16094
diff
changeset
|
229 super("SPARC", 8, ByteOrder.BIG_ENDIAN, false, allRegisters, LOAD_STORE | STORE_STORE, 1, r31.encoding + FLOAT_REGISTER_COUNT + 1, 8); |
17082
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
230 this.features = features; |
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
231 } |
9425
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
232 |
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
233 @Override |
16094
c0b8d395368b
Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
16093
diff
changeset
|
234 public boolean canStoreValue(RegisterCategory category, PlatformKind lirKind) { |
c0b8d395368b
Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
16093
diff
changeset
|
235 if (!(lirKind instanceof Kind)) { |
10459 | 236 return false; |
237 } | |
238 | |
16094
c0b8d395368b
Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
16093
diff
changeset
|
239 Kind kind = (Kind) lirKind; |
18253
edb88f5425e6
switch to using use .equals() instead of == when comparing RegisterCaterory objects for equality
Doug Simon <doug.simon@oracle.com>
parents:
18163
diff
changeset
|
240 if (category.equals(CPU)) { |
10459 | 241 switch (kind) { |
242 case Boolean: | |
243 case Byte: | |
244 case Char: | |
245 case Short: | |
246 case Int: | |
247 case Long: | |
248 case Object: | |
249 return true; | |
250 } | |
18253
edb88f5425e6
switch to using use .equals() instead of == when comparing RegisterCaterory objects for equality
Doug Simon <doug.simon@oracle.com>
parents:
18163
diff
changeset
|
251 } else if (category.equals(FPU)) { |
10459 | 252 switch (kind) { |
253 case Float: | |
254 case Double: | |
255 return true; | |
256 } | |
257 } | |
9425
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
258 return false; |
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
259 } |
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
260 |
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
261 @Override |
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
262 public PlatformKind getLargestStorableKind(RegisterCategory category) { |
18253
edb88f5425e6
switch to using use .equals() instead of == when comparing RegisterCaterory objects for equality
Doug Simon <doug.simon@oracle.com>
parents:
18163
diff
changeset
|
263 if (category.equals(CPU)) { |
10686
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
264 return Kind.Long; |
18253
edb88f5425e6
switch to using use .equals() instead of == when comparing RegisterCaterory objects for equality
Doug Simon <doug.simon@oracle.com>
parents:
18163
diff
changeset
|
265 } else if (category.equals(FPU)) { |
10686
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
266 return Kind.Double; |
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
267 } else { |
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
268 return Kind.Illegal; |
73122b5edf6a
SPARC: Can compile simple methods and do static calls.
twisti
parents:
10459
diff
changeset
|
269 } |
9425
3ec29630cfb4
Use register categories instead of register flags.
Roland Schatz <roland.schatz@oracle.com>
parents:
7740
diff
changeset
|
270 } |
16654
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
271 |
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
272 public static int spillSlotSize(TargetDescription td, PlatformKind kind) { |
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
273 return Math.max(td.getSizeInBytes(kind), MEMORY_ACCESS_ALIGN); |
8aa938ab4ac8
[SPARC] Spill slots must be 4 byte aligned
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
16645
diff
changeset
|
274 } |
16995
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
275 |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
276 public static int getDoubleEncoding(int reg) { |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
277 assert reg < 64 && ((reg & 1) == 0); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
278 // ignore v8 assertion for now |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
279 return (reg & 0x1e) | ((reg & 0x20) >> 5); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
280 } |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
281 |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
282 public static boolean isSingleFloatRegister(Register r) { |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
283 return r.name.startsWith("f"); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
284 } |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
285 |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
286 public static boolean isDoubleFloatRegister(Register r) { |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
287 return r.name.startsWith("d"); |
4feac7e51f42
[SPARC] Fixing float register allocation
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16654
diff
changeset
|
288 } |
17082
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
289 |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
290 public Set<CPUFeature> getFeatures() { |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
291 return features; |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
292 } |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
293 |
17144
44a96c7413a7
[SPARC] Gearing up with CBcond instruction
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17082
diff
changeset
|
294 public boolean hasFeature(CPUFeature feature) { |
44a96c7413a7
[SPARC] Gearing up with CBcond instruction
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17082
diff
changeset
|
295 return features.contains(feature); |
44a96c7413a7
[SPARC] Gearing up with CBcond instruction
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17082
diff
changeset
|
296 } |
44a96c7413a7
[SPARC] Gearing up with CBcond instruction
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17082
diff
changeset
|
297 |
17082
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
298 public enum CPUFeature { |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
299 VIS1, |
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
300 VIS2, |
17144
44a96c7413a7
[SPARC] Gearing up with CBcond instruction
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17082
diff
changeset
|
301 VIS3, |
44a96c7413a7
[SPARC] Gearing up with CBcond instruction
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17082
diff
changeset
|
302 CBCOND |
17082
f8586d059f9d
[SPARC] make compatible for CPU without VIS3 and do some cleanup
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16995
diff
changeset
|
303 } |
7740
5f8101629080
Add projects and skeletons for SPARC port.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
304 } |