Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java @ 18289:7acff34abbf7
replaced HotSpotObjectConstantImpl.isCompressed() with HotSpotObjectConstant.isCompressed()
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 06 Nov 2014 14:52:46 +0100 |
parents | f7d45e2426d4 |
children | c9d57a5fb655 |
rev | line source |
---|---|
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
1 /* |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16710
diff
changeset
|
2 * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
4 * |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
8 * |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
14 * |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
18 * |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
21 * questions. |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
22 */ |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot.amd64; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
24 |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
25 import static com.oracle.graal.api.code.ValueUtil.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
26 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
27 |
16710
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
28 import com.oracle.graal.amd64.*; |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
29 import com.oracle.graal.api.code.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.api.meta.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
31 import com.oracle.graal.asm.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
32 import com.oracle.graal.asm.amd64.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
33 import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; |
15193
96bb07a5d667
Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents:
15061
diff
changeset
|
34 import com.oracle.graal.compiler.common.*; |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
35 import com.oracle.graal.hotspot.HotSpotVMConfig.CompressEncoding; |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14945
diff
changeset
|
36 import com.oracle.graal.hotspot.meta.*; |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
37 import com.oracle.graal.lir.*; |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
38 import com.oracle.graal.lir.StandardOp.MoveOp; |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
39 import com.oracle.graal.lir.amd64.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
40 import com.oracle.graal.lir.amd64.AMD64Move.StoreConstantOp; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
41 import com.oracle.graal.lir.asm.*; |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
42 |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
43 public class AMD64HotSpotMove { |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
44 |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
45 public static class HotSpotLoadConstantOp extends AMD64LIRInstruction implements MoveOp { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
46 |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
47 @Def({REG, STACK}) private AllocatableValue result; |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
48 private final JavaConstant input; |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
49 |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
50 public HotSpotLoadConstantOp(AllocatableValue result, JavaConstant input) { |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
51 this.result = result; |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
52 this.input = input; |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
53 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
54 |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
55 @Override |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
56 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
57 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(input)) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
58 if (isRegister(result)) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
59 masm.movl(asRegister(result), 0); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
60 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
61 assert isStackSlot(result); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
62 masm.movl((AMD64Address) crb.asAddress(result), 0); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
63 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
64 } else if (input instanceof HotSpotObjectConstant) { |
18289
7acff34abbf7
replaced HotSpotObjectConstantImpl.isCompressed() with HotSpotObjectConstant.isCompressed()
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
65 boolean compressed = ((HotSpotObjectConstant) input).isCompressed(); |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
66 if (crb.target.inlineObjects) { |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16710
diff
changeset
|
67 crb.recordInlineDataInCode(input); |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
68 if (isRegister(result)) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
69 if (compressed) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
70 masm.movl(asRegister(result), 0xDEADDEAD); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
71 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
72 masm.movq(asRegister(result), 0xDEADDEADDEADDEADL); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
73 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
74 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
75 assert isStackSlot(result); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
76 if (compressed) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
77 masm.movl((AMD64Address) crb.asAddress(result), 0xDEADDEAD); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
78 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
79 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
80 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
81 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
82 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
83 if (isRegister(result)) { |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16710
diff
changeset
|
84 AMD64Address address = (AMD64Address) crb.recordDataReferenceInCode(input, compressed ? 4 : 8); |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
85 if (compressed) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
86 masm.movl(asRegister(result), address); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
87 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
88 masm.movq(asRegister(result), address); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
89 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
90 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
91 throw GraalInternalError.shouldNotReachHere("Cannot directly store data patch to memory"); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
92 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
93 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
94 } else if (input instanceof HotSpotMetaspaceConstant) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
95 assert input.getKind() == Kind.Int || input.getKind() == Kind.Long; |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
96 boolean compressed = input.getKind() == Kind.Int; |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16710
diff
changeset
|
97 crb.recordInlineDataInCode(input); |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
98 if (isRegister(result)) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
99 if (compressed) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
100 masm.movl(asRegister(result), input.asInt()); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
101 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
102 masm.movq(asRegister(result), input.asLong()); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
103 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
104 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
105 assert isStackSlot(result); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
106 if (compressed) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
107 masm.movl((AMD64Address) crb.asAddress(result), input.asInt()); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
108 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
109 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
110 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
111 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
112 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
113 AMD64Move.move(crb, masm, result, input); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
114 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
115 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
116 |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
117 public Value getInput() { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
118 return input; |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
119 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
120 |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
121 public AllocatableValue getResult() { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
122 return result; |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
123 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
124 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
125 |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
126 public static class HotSpotStoreConstantOp extends StoreConstantOp { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
127 |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
128 public HotSpotStoreConstantOp(Kind kind, AMD64AddressValue address, JavaConstant input, LIRFrameState state) { |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
129 super(kind, address, input, state); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
130 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
131 |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
132 @Override |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
133 public void emitMemAccess(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
134 if (input.isNull() && kind == Kind.Int) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
135 // compressed null |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
136 masm.movl(address.toAddress(), 0); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
137 } else if (input instanceof HotSpotObjectConstant) { |
18289
7acff34abbf7
replaced HotSpotObjectConstantImpl.isCompressed() with HotSpotObjectConstant.isCompressed()
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
138 HotSpotObjectConstant c = (HotSpotObjectConstant) input; |
7acff34abbf7
replaced HotSpotObjectConstantImpl.isCompressed() with HotSpotObjectConstant.isCompressed()
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
139 if (c.isCompressed() && crb.target.inlineObjects) { |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
140 // compressed oop |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16710
diff
changeset
|
141 crb.recordInlineDataInCode(input); |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
142 masm.movl(address.toAddress(), 0xDEADDEAD); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
143 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
144 // uncompressed oop |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
145 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
146 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
147 } else if (input instanceof HotSpotMetaspaceConstant) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
148 if (input.getKind() == Kind.Int) { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
149 // compressed metaspace pointer |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
16710
diff
changeset
|
150 crb.recordInlineDataInCode(input); |
15909
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
151 masm.movl(address.toAddress(), input.asInt()); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
152 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
153 // uncompressed metaspace pointer |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
154 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
155 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
156 } else { |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
157 // primitive value |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
158 super.emitMemAccess(crb, masm); |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
159 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
160 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
161 } |
e43591136d9f
Support for compressed constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
15193
diff
changeset
|
162 |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
163 public static class CompressPointer extends AMD64LIRInstruction { |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
164 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
165 private final CompressEncoding encoding; |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
166 private final boolean nonNull; |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
167 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
168 @Def({REG, HINT}) protected AllocatableValue result; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
169 @Use({REG}) protected AllocatableValue input; |
15061
570132161721
Fix incorrect register allocator flags on (Un)CompressPointer ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
15058
diff
changeset
|
170 @Alive({REG, ILLEGAL}) protected AllocatableValue baseRegister; |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
171 |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
172 public CompressPointer(AllocatableValue result, AllocatableValue input, AllocatableValue baseRegister, CompressEncoding encoding, boolean nonNull) { |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
173 this.result = result; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
174 this.input = input; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
175 this.baseRegister = baseRegister; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
176 this.encoding = encoding; |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
177 this.nonNull = nonNull; |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
178 } |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
179 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
180 @Override |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
181 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
15023
652564fe42d5
Use CompressionNode for accessing compressed Klass pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15018
diff
changeset
|
182 AMD64Move.move(Kind.Long, crb, masm, result, input); |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
183 |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
184 Register resReg = asRegister(result); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
185 if (encoding.base != 0) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
186 Register baseReg = asRegister(baseRegister); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
187 if (!nonNull) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
188 masm.testq(resReg, resReg); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
189 masm.cmovq(ConditionFlag.Equal, resReg, baseReg); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
190 } |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
191 masm.subq(resReg, baseReg); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
192 } |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
193 |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
194 if (encoding.shift != 0) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
195 masm.shrq(resReg, encoding.shift); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
196 } |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
197 } |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
198 } |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
199 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
200 public static class UncompressPointer extends AMD64LIRInstruction { |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
201 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
202 private final CompressEncoding encoding; |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
203 private final boolean nonNull; |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
204 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
205 @Def({REG, HINT}) protected AllocatableValue result; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
206 @Use({REG}) protected AllocatableValue input; |
15061
570132161721
Fix incorrect register allocator flags on (Un)CompressPointer ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
15058
diff
changeset
|
207 @Alive({REG, ILLEGAL}) protected AllocatableValue baseRegister; |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
208 |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
209 public UncompressPointer(AllocatableValue result, AllocatableValue input, AllocatableValue baseRegister, CompressEncoding encoding, boolean nonNull) { |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
210 this.result = result; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
211 this.input = input; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
212 this.baseRegister = baseRegister; |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
213 this.encoding = encoding; |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
214 this.nonNull = nonNull; |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
215 } |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
216 |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
217 @Override |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
218 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
15023
652564fe42d5
Use CompressionNode for accessing compressed Klass pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15018
diff
changeset
|
219 AMD64Move.move(Kind.Int, crb, masm, result, input); |
15058
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
220 |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
221 Register resReg = asRegister(result); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
222 if (encoding.shift != 0) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
223 masm.shlq(resReg, encoding.shift); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
224 } |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
225 |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
226 if (encoding.base != 0) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
227 if (nonNull) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
228 masm.addq(resReg, asRegister(baseRegister)); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
229 } else { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
230 if (encoding.shift == 0) { |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
231 // if encoding.shift != 0, the flags are already set by the shlq |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
232 masm.testq(resReg, resReg); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
233 } |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
234 |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
235 Label done = new Label(); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
236 masm.jccb(ConditionFlag.Equal, done); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
237 masm.addq(resReg, asRegister(baseRegister)); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
238 masm.bind(done); |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
239 } |
895e9ecedfe8
Fix code generation for compressed metaspace pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
15023
diff
changeset
|
240 } |
14943
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
241 } |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
242 } |
e5a55d280f24
Floating nodes for compressing and uncompressing pointers.
Roland Schatz <roland.schatz@oracle.com>
parents:
14561
diff
changeset
|
243 |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
244 public static void decodeKlassPointer(AMD64MacroAssembler masm, Register register, Register scratch, AMD64Address address, CompressEncoding encoding) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
245 masm.movl(register, address); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
246 if (encoding.shift != 0) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
247 assert encoding.alignment == encoding.shift : "Decode algorithm is wrong"; |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
248 masm.shlq(register, encoding.alignment); |
12058
ccb4f2af2319
Adapt compressed pointers implementation for last HotSpot changes
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11959
diff
changeset
|
249 } |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
250 if (encoding.base != 0) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
251 masm.movq(scratch, encoding.base); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13227
diff
changeset
|
252 masm.addq(register, scratch); |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
253 } |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
254 } |
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
255 |
16710
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
256 public static class CompressedNullCheckOp extends AMD64LIRInstruction { |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
257 |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
258 @Use({COMPOSITE}) protected AMD64AddressValue address; |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
259 @State protected LIRFrameState state; |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
260 |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
261 public CompressedNullCheckOp(AMD64AddressValue address, LIRFrameState state) { |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
262 this.address = address; |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
263 this.state = state; |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
264 } |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
265 |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
266 @Override |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
267 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
268 crb.recordImplicitException(masm.position(), state); |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
269 masm.testl(AMD64.rax, address.toAddress()); |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
270 } |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
271 |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
272 public LIRFrameState getState() { |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
273 return state; |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
274 } |
56bcde831179
support for compressed inputs to NullCheckNode
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15947
diff
changeset
|
275 } |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
276 } |