13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package org.graalvm.compiler.hotspot.aarch64;
25
26 import static org.graalvm.compiler.lir.LIRValueUtil.asConstant;
27 import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
28
29 import java.util.function.Function;
30
31 import org.graalvm.compiler.asm.Label;
32 import org.graalvm.compiler.asm.aarch64.AArch64Address.AddressingMode;
33 import org.graalvm.compiler.asm.aarch64.AArch64Assembler.PrefetchMode;
34 import org.graalvm.compiler.asm.aarch64.AArch64Assembler.ConditionFlag;
35 import org.graalvm.compiler.core.aarch64.AArch64ArithmeticLIRGenerator;
36 import org.graalvm.compiler.core.aarch64.AArch64LIRGenerator;
37 import org.graalvm.compiler.core.aarch64.AArch64LIRKindTool;
38 import org.graalvm.compiler.core.common.CompressEncoding;
39 import org.graalvm.compiler.core.common.LIRKind;
40 import org.graalvm.compiler.core.common.calc.Condition;
41 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
42 import org.graalvm.compiler.core.common.spi.LIRKindTool;
43 import org.graalvm.compiler.debug.GraalError;
44 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
45 import org.graalvm.compiler.hotspot.HotSpotBackend;
46 import org.graalvm.compiler.hotspot.HotSpotDebugInfoBuilder;
47 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
48 import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
49 import org.graalvm.compiler.hotspot.HotSpotLIRGenerator;
50 import org.graalvm.compiler.hotspot.HotSpotLockStack;
51 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
52 import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
53 import org.graalvm.compiler.hotspot.stubs.Stub;
54 import org.graalvm.compiler.lir.LIRFrameState;
185 localA = load(localA);
186 }
187 }
188 if (isConstantValue(b)) {
189 Constant c = asConstant(b);
190 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
191 localB = AArch64.zr.asValue(LIRKind.value(AArch64Kind.DWORD));
192 } else if (c instanceof HotSpotObjectConstant) {
193 localB = load(localB);
194 }
195 }
196 return super.emitCompare(cmpKind, localA, localB, condition, unorderedIsTrue);
197 }
198
199 @Override
200 public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
201 LIRKind inputKind = pointer.getValueKind(LIRKind.class);
202 assert inputKind.getPlatformKind() == AArch64Kind.QWORD;
203 if (inputKind.isReference(0)) {
204 // oop
205 Variable result = newVariable(LIRKind.reference(AArch64Kind.DWORD));
206 append(new AArch64HotSpotMove.CompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull));
207 return result;
208 } else {
209 // metaspace pointer
210 Variable result = newVariable(LIRKind.value(AArch64Kind.DWORD));
211 AllocatableValue base = Value.ILLEGAL;
212 if (encoding.hasBase()) {
213 base = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(encoding.getBase()));
214 }
215 append(new AArch64HotSpotMove.CompressPointer(result, asAllocatable(pointer), base, encoding, nonNull));
216 return result;
217 }
218 }
219
220 @Override
221 public Value emitUncompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
222 LIRKind inputKind = pointer.getValueKind(LIRKind.class);
223 assert inputKind.getPlatformKind() == AArch64Kind.DWORD;
224 if (inputKind.isReference(0)) {
225 // oop
|
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package org.graalvm.compiler.hotspot.aarch64;
25
26 import static org.graalvm.compiler.lir.LIRValueUtil.asConstant;
27 import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
28
29 import java.util.function.Function;
30
31 import org.graalvm.compiler.asm.Label;
32 import org.graalvm.compiler.asm.aarch64.AArch64Address.AddressingMode;
33 import org.graalvm.compiler.asm.aarch64.AArch64Assembler.ConditionFlag;
34 import org.graalvm.compiler.asm.aarch64.AArch64Assembler.PrefetchMode;
35 import org.graalvm.compiler.core.aarch64.AArch64ArithmeticLIRGenerator;
36 import org.graalvm.compiler.core.aarch64.AArch64LIRGenerator;
37 import org.graalvm.compiler.core.aarch64.AArch64LIRKindTool;
38 import org.graalvm.compiler.core.common.CompressEncoding;
39 import org.graalvm.compiler.core.common.LIRKind;
40 import org.graalvm.compiler.core.common.calc.Condition;
41 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
42 import org.graalvm.compiler.core.common.spi.LIRKindTool;
43 import org.graalvm.compiler.debug.GraalError;
44 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
45 import org.graalvm.compiler.hotspot.HotSpotBackend;
46 import org.graalvm.compiler.hotspot.HotSpotDebugInfoBuilder;
47 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
48 import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
49 import org.graalvm.compiler.hotspot.HotSpotLIRGenerator;
50 import org.graalvm.compiler.hotspot.HotSpotLockStack;
51 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
52 import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
53 import org.graalvm.compiler.hotspot.stubs.Stub;
54 import org.graalvm.compiler.lir.LIRFrameState;
185 localA = load(localA);
186 }
187 }
188 if (isConstantValue(b)) {
189 Constant c = asConstant(b);
190 if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
191 localB = AArch64.zr.asValue(LIRKind.value(AArch64Kind.DWORD));
192 } else if (c instanceof HotSpotObjectConstant) {
193 localB = load(localB);
194 }
195 }
196 return super.emitCompare(cmpKind, localA, localB, condition, unorderedIsTrue);
197 }
198
199 @Override
200 public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
201 LIRKind inputKind = pointer.getValueKind(LIRKind.class);
202 assert inputKind.getPlatformKind() == AArch64Kind.QWORD;
203 if (inputKind.isReference(0)) {
204 // oop
205 Variable result = newVariable(LIRKind.compressedReference(AArch64Kind.DWORD));
206 append(new AArch64HotSpotMove.CompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull));
207 return result;
208 } else {
209 // metaspace pointer
210 Variable result = newVariable(LIRKind.value(AArch64Kind.DWORD));
211 AllocatableValue base = Value.ILLEGAL;
212 if (encoding.hasBase()) {
213 base = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(encoding.getBase()));
214 }
215 append(new AArch64HotSpotMove.CompressPointer(result, asAllocatable(pointer), base, encoding, nonNull));
216 return result;
217 }
218 }
219
220 @Override
221 public Value emitUncompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
222 LIRKind inputKind = pointer.getValueKind(LIRKind.class);
223 assert inputKind.getPlatformKind() == AArch64Kind.DWORD;
224 if (inputKind.isReference(0)) {
225 // oop
|