# HG changeset patch # User Roland Schatz # Date 1376041661 -7200 # Node ID b5e95841d36632edf966c82fa7ac943fb9c3c8d7 # Parent 1e07d93034208443488c4d90d1c02163a175e52e Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic. diff -r 1e07d9303420 -r b5e95841d366 graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java --- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java Fri Aug 09 11:38:40 2013 +0200 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java Fri Aug 09 11:47:41 2013 +0200 @@ -1518,6 +1518,15 @@ emitByte(0xE8 | encode); } + public final void sqrtsd(Register dst, AMD64Address src) { + assert dst.getRegisterCategory() == AMD64.XMM; + emitByte(0xF2); + prefix(src, dst); + emitByte(0x0F); + emitByte(0x51); + emitOperandHelper(dst, src); + } + public final void sqrtsd(Register dst, Register src) { assert dst.getRegisterCategory() == AMD64.XMM; assert src.getRegisterCategory() == AMD64.XMM; diff -r 1e07d9303420 -r b5e95841d366 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Fri Aug 09 11:38:40 2013 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Fri Aug 09 11:47:41 2013 +0200 @@ -800,7 +800,7 @@ @Override public void emitMathSqrt(Variable result, Variable input) { - append(new AMD64MathIntrinsicOp(SQRT, result, input)); + append(new Unary2Op(SQRT, result, input)); } @Override diff -r 1e07d9303420 -r b5e95841d366 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Fri Aug 09 11:38:40 2013 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Fri Aug 09 11:47:41 2013 +0200 @@ -43,6 +43,7 @@ FADD, FSUB, FMUL, FDIV, FREM, FAND, FOR, FXOR, DADD, DSUB, DMUL, DDIV, DREM, DAND, DOR, DXOR, INEG, LNEG, + SQRT, I2L, L2I, I2B, I2C, I2S, F2D, D2F, I2F, I2D, @@ -484,6 +485,10 @@ masm.xorpd(asDoubleReg(dst), asDoubleReg(src)); break; + case SQRT: + masm.sqrtsd(asDoubleReg(dst), asDoubleReg(src)); + break; + case I2B: masm.movsxb(asIntReg(dst), asIntReg(src)); break; @@ -740,6 +745,10 @@ masm.divsd(asDoubleReg(dst), (AMD64Address) tasm.asDoubleAddr(src)); break; + case SQRT: + masm.sqrtsd(asDoubleReg(dst), (AMD64Address) tasm.asDoubleAddr(src)); + break; + case I2B: masm.movsxb(asIntReg(dst), (AMD64Address) tasm.asIntAddr(src)); break; diff -r 1e07d9303420 -r b5e95841d366 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MathIntrinsicOp.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MathIntrinsicOp.java Fri Aug 09 11:38:40 2013 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MathIntrinsicOp.java Fri Aug 09 11:47:41 2013 +0200 @@ -33,7 +33,6 @@ // @formatter:off public class AMD64MathIntrinsicOp extends AMD64LIRInstruction { public enum IntrinsicOpcode { - SQRT, SIN, COS, TAN, LOG, LOG10 } @@ -51,7 +50,6 @@ @Override public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { switch (opcode) { - case SQRT: masm.sqrtsd(asDoubleReg(result), asDoubleReg(input)); break; case LOG: masm.flog(asDoubleReg(result), asDoubleReg(input), false); break; case LOG10: masm.flog(asDoubleReg(result), asDoubleReg(input), true); break; case SIN: masm.fsin(asDoubleReg(result), asDoubleReg(input)); break;