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.core.aarch64.AArch64ArithmeticLIRGenerator;
35 import org.graalvm.compiler.core.aarch64.AArch64LIRGenerator;
36 import org.graalvm.compiler.core.aarch64.AArch64LIRKindTool;
37 import org.graalvm.compiler.core.common.CompressEncoding;
38 import org.graalvm.compiler.core.common.LIRKind;
39 import org.graalvm.compiler.core.common.calc.Condition;
40 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
41 import org.graalvm.compiler.core.common.spi.LIRKindTool;
42 import org.graalvm.compiler.debug.GraalError;
43 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
44 import org.graalvm.compiler.hotspot.HotSpotBackend;
45 import org.graalvm.compiler.hotspot.HotSpotDebugInfoBuilder;
46 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
47 import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
48 import org.graalvm.compiler.hotspot.HotSpotLIRGenerator;
49 import org.graalvm.compiler.hotspot.HotSpotLockStack;
50 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
51 import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
52 import org.graalvm.compiler.hotspot.stubs.Stub;
233 base = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(encoding.getBase()));
234 }
235 append(new AArch64HotSpotMove.UncompressPointer(result, asAllocatable(pointer), base, encoding, nonNull));
236 return result;
237 }
238 }
239
240 @Override
241 public void emitNullCheck(Value address, LIRFrameState state) {
242 if (address.getValueKind().getPlatformKind() == AArch64Kind.DWORD) {
243 CompressEncoding encoding = config.getOopEncoding();
244 Value uncompressed = emitUncompress(address, encoding, false);
245 append(new AArch64Move.NullCheckOp(asAddressValue(uncompressed), state));
246 } else {
247 super.emitNullCheck(address, state);
248 }
249 }
250
251 @Override
252 public void emitPrefetchAllocate(Value address) {
253 append(new AArch64PrefetchOp(asAddressValue(address), config.allocatePrefetchInstr));
254 }
255
256 @Override
257 public void beforeRegisterAllocation() {
258 super.beforeRegisterAllocation();
259 boolean hasDebugInfo = getResult().getLIR().hasDebugInfo();
260 if (hasDebugInfo) {
261 getResult().setDeoptimizationRescueSlot(((AArch64FrameMapBuilder) getResult().getFrameMapBuilder()).allocateDeoptimizationRescueSlot());
262 }
263
264 getResult().setMaxInterpreterFrameSize(debugInfoBuilder.maxInterpreterFrameSize());
265 }
266
267 private Label label;
268
269 @Override
270 public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args) {
271 HotSpotForeignCallLinkage hotspotLinkage = (HotSpotForeignCallLinkage) linkage;
272 Variable result;
273 LIRFrameState debugInfo = null;
|
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;
234 base = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(encoding.getBase()));
235 }
236 append(new AArch64HotSpotMove.UncompressPointer(result, asAllocatable(pointer), base, encoding, nonNull));
237 return result;
238 }
239 }
240
241 @Override
242 public void emitNullCheck(Value address, LIRFrameState state) {
243 if (address.getValueKind().getPlatformKind() == AArch64Kind.DWORD) {
244 CompressEncoding encoding = config.getOopEncoding();
245 Value uncompressed = emitUncompress(address, encoding, false);
246 append(new AArch64Move.NullCheckOp(asAddressValue(uncompressed), state));
247 } else {
248 super.emitNullCheck(address, state);
249 }
250 }
251
252 @Override
253 public void emitPrefetchAllocate(Value address) {
254 append(new AArch64PrefetchOp(asAddressValue(address), PrefetchMode.PSTL1KEEP));
255 }
256
257 @Override
258 public void beforeRegisterAllocation() {
259 super.beforeRegisterAllocation();
260 boolean hasDebugInfo = getResult().getLIR().hasDebugInfo();
261 if (hasDebugInfo) {
262 getResult().setDeoptimizationRescueSlot(((AArch64FrameMapBuilder) getResult().getFrameMapBuilder()).allocateDeoptimizationRescueSlot());
263 }
264
265 getResult().setMaxInterpreterFrameSize(debugInfoBuilder.maxInterpreterFrameSize());
266 }
267
268 private Label label;
269
270 @Override
271 public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args) {
272 HotSpotForeignCallLinkage hotspotLinkage = (HotSpotForeignCallLinkage) linkage;
273 Variable result;
274 LIRFrameState debugInfo = null;
|