< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ArithmeticLIRGenerator.java

Print this page
rev 52889 : 8214023: Update Graal

*** 1,7 **** /* ! * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 23,33 **** package org.graalvm.compiler.core.aarch64; - import static jdk.vm.ci.aarch64.AArch64.sp; import static jdk.vm.ci.aarch64.AArch64Kind.DWORD; import static jdk.vm.ci.aarch64.AArch64Kind.QWORD; import static org.graalvm.compiler.lir.LIRValueUtil.asJavaConstant; import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant; import static org.graalvm.compiler.lir.aarch64.AArch64BitManipulationOp.BitManipulationOpCode.BSR; --- 23,32 ----
*** 53,63 **** import org.graalvm.compiler.lir.aarch64.AArch64SignExtendOp; import org.graalvm.compiler.lir.aarch64.AArch64Unary; import org.graalvm.compiler.lir.gen.ArithmeticLIRGenerator; import jdk.vm.ci.aarch64.AArch64Kind; - import jdk.vm.ci.code.RegisterValue; import jdk.vm.ci.meta.AllocatableValue; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.PlatformKind; import jdk.vm.ci.meta.Value; import jdk.vm.ci.meta.ValueKind; --- 52,61 ----
*** 132,141 **** --- 130,144 ---- public Value emitUMulHigh(Value a, Value b) { assert isNumericInteger(a.getPlatformKind()); return emitBinary(LIRKind.combine(a, b), AArch64ArithmeticOp.UMULH, true, a, b); } + public Value emitMNeg(Value a, Value b) { + assert isNumericInteger(a.getPlatformKind()) && isNumericInteger(b.getPlatformKind()); + return emitBinary(LIRKind.combine(a, b), AArch64ArithmeticOp.MNEG, true, a, b); + } + @Override public Value emitDiv(Value a, Value b, LIRFrameState state) { return emitBinary(LIRKind.combine(a, b), getOpCode(a, AArch64ArithmeticOp.DIV, AArch64ArithmeticOp.FDIV), false, asAllocatable(a), asAllocatable(b)); }
*** 199,215 **** Variable result = getLIRGen().newVariable(resultLirKind); getLIRGen().append(new AArch64FloatConvertOp(op, result, asAllocatable(inputVal))); return result; } ! public Value emitAddSubShift(AArch64ArithmeticOp op, Value a, Value b, AArch64MacroAssembler.ShiftType shiftType, int shiftAmount) { assert isNumericInteger(a.getPlatformKind()); assert isNumericInteger(b.getPlatformKind()); ! Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); AllocatableValue x = moveSp(asAllocatable(a)); AllocatableValue y = moveSp(asAllocatable(b)); ! getLIRGen().append(new AArch64ArithmeticOp.AddSubShiftOp(op, result, x, y, shiftType, shiftAmount)); return result; } private static PlatformKind getFloatConvertResultKind(FloatConvert op) { switch (op) { --- 202,229 ---- Variable result = getLIRGen().newVariable(resultLirKind); getLIRGen().append(new AArch64FloatConvertOp(op, result, asAllocatable(inputVal))); return result; } ! public Value emitMAdd(Value a, Value b, Value c) { ! return emitMultiplyAddSub(AArch64ArithmeticOp.ADD, a, b, c); ! } ! ! public Value emitMSub(Value a, Value b, Value c) { ! return emitMultiplyAddSub(AArch64ArithmeticOp.SUB, a, b, c); ! } ! ! private Value emitMultiplyAddSub(AArch64ArithmeticOp op, Value a, Value b, Value c) { assert isNumericInteger(a.getPlatformKind()); assert isNumericInteger(b.getPlatformKind()); ! assert isNumericInteger(c.getPlatformKind()); ! ! Variable result = getLIRGen().newVariable(LIRKind.combine(a, b, c)); AllocatableValue x = moveSp(asAllocatable(a)); AllocatableValue y = moveSp(asAllocatable(b)); ! AllocatableValue z = moveSp(asAllocatable(c)); ! getLIRGen().append(new AArch64ArithmeticOp.MultiplyAddSubOp(op, result, x, y, z)); return result; } private static PlatformKind getFloatConvertResultKind(FloatConvert op) { switch (op) {
*** 432,451 **** Variable result = getLIRGen().newVariable(LIRKind.combine(input)); getLIRGen().append(new AArch64ArithmeticOp.UnaryOp(op, result, input)); return result; } - /** - * If val denotes the stackpointer, move it to another location. This is necessary since most - * ops cannot handle the stackpointer as input or output. - */ private AllocatableValue moveSp(AllocatableValue val) { ! if (val instanceof RegisterValue && ((RegisterValue) val).getRegister().equals(sp)) { ! assert val.getPlatformKind() == AArch64Kind.QWORD : "Stackpointer must be long"; ! return getLIRGen().emitMove(val); ! } ! return val; } /** * Returns the opcode depending on the platform kind of val. */ --- 446,457 ---- Variable result = getLIRGen().newVariable(LIRKind.combine(input)); getLIRGen().append(new AArch64ArithmeticOp.UnaryOp(op, result, input)); return result; } private AllocatableValue moveSp(AllocatableValue val) { ! return getLIRGen().moveSp(val); } /** * Returns the opcode depending on the platform kind of val. */
< prev index next >