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;
|