< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.amd64/src/org/graalvm/compiler/core/amd64/AMD64ArithmeticLIRGenerator.java

Print this page
rev 56282 : [mq]: graal


 107 import org.graalvm.compiler.lir.Variable;
 108 import org.graalvm.compiler.lir.amd64.AMD64AddressValue;
 109 import org.graalvm.compiler.lir.amd64.AMD64Arithmetic.FPDivRemOp;
 110 import org.graalvm.compiler.lir.amd64.AMD64ArithmeticLIRGeneratorTool;
 111 import org.graalvm.compiler.lir.amd64.AMD64Binary;
 112 import org.graalvm.compiler.lir.amd64.AMD64BinaryConsumer;
 113 import org.graalvm.compiler.lir.amd64.AMD64ClearRegisterOp;
 114 import org.graalvm.compiler.lir.amd64.AMD64MathCosOp;
 115 import org.graalvm.compiler.lir.amd64.AMD64MathExpOp;
 116 import org.graalvm.compiler.lir.amd64.AMD64MathLog10Op;
 117 import org.graalvm.compiler.lir.amd64.AMD64MathLogOp;
 118 import org.graalvm.compiler.lir.amd64.AMD64MathPowOp;
 119 import org.graalvm.compiler.lir.amd64.AMD64MathSinOp;
 120 import org.graalvm.compiler.lir.amd64.AMD64MathTanOp;
 121 import org.graalvm.compiler.lir.amd64.AMD64Move;
 122 import org.graalvm.compiler.lir.amd64.AMD64MulDivOp;
 123 import org.graalvm.compiler.lir.amd64.AMD64ShiftOp;
 124 import org.graalvm.compiler.lir.amd64.AMD64SignExtendOp;
 125 import org.graalvm.compiler.lir.amd64.AMD64Ternary;
 126 import org.graalvm.compiler.lir.amd64.AMD64Unary;
 127 import org.graalvm.compiler.lir.amd64.AMD64ZeroMemoryOp;
 128 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary;
 129 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryConstFloatOp;
 130 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryOp;
 131 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorUnary;
 132 import org.graalvm.compiler.lir.gen.ArithmeticLIRGenerator;
 133 
 134 import jdk.vm.ci.amd64.AMD64;
 135 import jdk.vm.ci.amd64.AMD64.CPUFeature;
 136 import jdk.vm.ci.amd64.AMD64Kind;
 137 import jdk.vm.ci.code.CodeUtil;
 138 import jdk.vm.ci.code.Register;
 139 import jdk.vm.ci.code.RegisterValue;
 140 import jdk.vm.ci.code.TargetDescription;
 141 import jdk.vm.ci.meta.AllocatableValue;
 142 import jdk.vm.ci.meta.Constant;
 143 import jdk.vm.ci.meta.JavaConstant;
 144 import jdk.vm.ci.meta.JavaKind;
 145 import jdk.vm.ci.meta.PlatformKind;
 146 import jdk.vm.ci.meta.VMConstant;
 147 import jdk.vm.ci.meta.Value;


1111     }
1112 
1113     @Override
1114     public Value emitMathSin(Value input) {
1115         return new AMD64MathSinOp().emitLIRWrapper(getLIRGen(), input);
1116     }
1117 
1118     @Override
1119     public Value emitMathTan(Value input) {
1120         return new AMD64MathTanOp().emitLIRWrapper(getLIRGen(), input);
1121     }
1122 
1123     @Override
1124     public Value emitMathExp(Value input) {
1125         return new AMD64MathExpOp().emitLIRWrapper(getLIRGen(), input);
1126     }
1127 
1128     @Override
1129     public Value emitMathPow(Value x, Value y) {
1130         return new AMD64MathPowOp().emitLIRWrapper(getLIRGen(), x, y);
1131     }
1132 
1133     @Override
1134     public void emitZeroMemory(Value address, Value length) {
1135         RegisterValue lengthReg = moveToReg(AMD64.rcx, length);
1136         getLIRGen().append(new AMD64ZeroMemoryOp(getAMD64LIRGen().asAddressValue(address), lengthReg));
1137     }
1138 
1139     protected AMD64LIRGenerator getAMD64LIRGen() {
1140         return (AMD64LIRGenerator) getLIRGen();
1141     }
1142 
1143     @Override
1144     public Variable emitLoad(LIRKind kind, Value address, LIRFrameState state) {
1145         AMD64AddressValue loadAddress = getAMD64LIRGen().asAddressValue(address);
1146         Variable result = getLIRGen().newVariable(getLIRGen().toRegisterKind(kind));
1147         switch ((AMD64Kind) kind.getPlatformKind()) {
1148             case BYTE:
1149                 getLIRGen().append(new AMD64Unary.MemoryOp(MOVSXB, DWORD, result, loadAddress, state));
1150                 break;
1151             case WORD:
1152                 getLIRGen().append(new AMD64Unary.MemoryOp(MOVSX, DWORD, result, loadAddress, state));
1153                 break;
1154             case DWORD:
1155                 getLIRGen().append(new AMD64Unary.MemoryOp(MOV, DWORD, result, loadAddress, state));
1156                 break;




 107 import org.graalvm.compiler.lir.Variable;
 108 import org.graalvm.compiler.lir.amd64.AMD64AddressValue;
 109 import org.graalvm.compiler.lir.amd64.AMD64Arithmetic.FPDivRemOp;
 110 import org.graalvm.compiler.lir.amd64.AMD64ArithmeticLIRGeneratorTool;
 111 import org.graalvm.compiler.lir.amd64.AMD64Binary;
 112 import org.graalvm.compiler.lir.amd64.AMD64BinaryConsumer;
 113 import org.graalvm.compiler.lir.amd64.AMD64ClearRegisterOp;
 114 import org.graalvm.compiler.lir.amd64.AMD64MathCosOp;
 115 import org.graalvm.compiler.lir.amd64.AMD64MathExpOp;
 116 import org.graalvm.compiler.lir.amd64.AMD64MathLog10Op;
 117 import org.graalvm.compiler.lir.amd64.AMD64MathLogOp;
 118 import org.graalvm.compiler.lir.amd64.AMD64MathPowOp;
 119 import org.graalvm.compiler.lir.amd64.AMD64MathSinOp;
 120 import org.graalvm.compiler.lir.amd64.AMD64MathTanOp;
 121 import org.graalvm.compiler.lir.amd64.AMD64Move;
 122 import org.graalvm.compiler.lir.amd64.AMD64MulDivOp;
 123 import org.graalvm.compiler.lir.amd64.AMD64ShiftOp;
 124 import org.graalvm.compiler.lir.amd64.AMD64SignExtendOp;
 125 import org.graalvm.compiler.lir.amd64.AMD64Ternary;
 126 import org.graalvm.compiler.lir.amd64.AMD64Unary;

 127 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary;
 128 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryConstFloatOp;
 129 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorBinary.AVXBinaryOp;
 130 import org.graalvm.compiler.lir.amd64.vector.AMD64VectorUnary;
 131 import org.graalvm.compiler.lir.gen.ArithmeticLIRGenerator;
 132 
 133 import jdk.vm.ci.amd64.AMD64;
 134 import jdk.vm.ci.amd64.AMD64.CPUFeature;
 135 import jdk.vm.ci.amd64.AMD64Kind;
 136 import jdk.vm.ci.code.CodeUtil;
 137 import jdk.vm.ci.code.Register;
 138 import jdk.vm.ci.code.RegisterValue;
 139 import jdk.vm.ci.code.TargetDescription;
 140 import jdk.vm.ci.meta.AllocatableValue;
 141 import jdk.vm.ci.meta.Constant;
 142 import jdk.vm.ci.meta.JavaConstant;
 143 import jdk.vm.ci.meta.JavaKind;
 144 import jdk.vm.ci.meta.PlatformKind;
 145 import jdk.vm.ci.meta.VMConstant;
 146 import jdk.vm.ci.meta.Value;


1110     }
1111 
1112     @Override
1113     public Value emitMathSin(Value input) {
1114         return new AMD64MathSinOp().emitLIRWrapper(getLIRGen(), input);
1115     }
1116 
1117     @Override
1118     public Value emitMathTan(Value input) {
1119         return new AMD64MathTanOp().emitLIRWrapper(getLIRGen(), input);
1120     }
1121 
1122     @Override
1123     public Value emitMathExp(Value input) {
1124         return new AMD64MathExpOp().emitLIRWrapper(getLIRGen(), input);
1125     }
1126 
1127     @Override
1128     public Value emitMathPow(Value x, Value y) {
1129         return new AMD64MathPowOp().emitLIRWrapper(getLIRGen(), x, y);






1130     }
1131 
1132     protected AMD64LIRGenerator getAMD64LIRGen() {
1133         return (AMD64LIRGenerator) getLIRGen();
1134     }
1135 
1136     @Override
1137     public Variable emitLoad(LIRKind kind, Value address, LIRFrameState state) {
1138         AMD64AddressValue loadAddress = getAMD64LIRGen().asAddressValue(address);
1139         Variable result = getLIRGen().newVariable(getLIRGen().toRegisterKind(kind));
1140         switch ((AMD64Kind) kind.getPlatformKind()) {
1141             case BYTE:
1142                 getLIRGen().append(new AMD64Unary.MemoryOp(MOVSXB, DWORD, result, loadAddress, state));
1143                 break;
1144             case WORD:
1145                 getLIRGen().append(new AMD64Unary.MemoryOp(MOVSX, DWORD, result, loadAddress, state));
1146                 break;
1147             case DWORD:
1148                 getLIRGen().append(new AMD64Unary.MemoryOp(MOV, DWORD, result, loadAddress, state));
1149                 break;


< prev index next >