# HG changeset patch # User Roland Schatz # Date 1386593050 -3600 # Node ID 2d76d0c8534589b2934b9fefe5b27ff1f2b55d7d # Parent b23cbfb4366a301312465d0b94dfdd20d89dc660 Make selection of x86 floating point move instruction extensible. diff -r b23cbfb4366a -r 2d76d0c85345 graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java --- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java Sun Dec 08 21:55:09 2013 -0800 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java Mon Dec 09 13:44:10 2013 +0100 @@ -171,7 +171,7 @@ movsxw(reg, reg); } - public final void movflt(Register dst, Register src) { + public void movflt(Register dst, Register src) { assert dst.getRegisterCategory() == AMD64.XMM && src.getRegisterCategory() == AMD64.XMM; if (UseXmmRegToRegMoveAll) { movaps(dst, src); @@ -180,17 +180,17 @@ } } - public final void movflt(Register dst, AMD64Address src) { + public void movflt(Register dst, AMD64Address src) { assert dst.getRegisterCategory() == AMD64.XMM; movss(dst, src); } - public final void movflt(AMD64Address dst, Register src) { + public void movflt(AMD64Address dst, Register src) { assert src.getRegisterCategory() == AMD64.XMM; movss(dst, src); } - public final void movdbl(Register dst, Register src) { + public void movdbl(Register dst, Register src) { assert dst.getRegisterCategory() == AMD64.XMM && src.getRegisterCategory() == AMD64.XMM; if (UseXmmRegToRegMoveAll) { movapd(dst, src); @@ -199,7 +199,7 @@ } } - public final void movdbl(Register dst, AMD64Address src) { + public void movdbl(Register dst, AMD64Address src) { assert dst.getRegisterCategory() == AMD64.XMM; if (UseXmmLoadAndClearUpper) { movsd(dst, src); @@ -208,6 +208,11 @@ } } + public void movdbl(AMD64Address dst, Register src) { + assert src.getRegisterCategory() == AMD64.XMM; + movsd(dst, src); + } + /** * Non-atomic write of a 64-bit constant to memory. Do not use if the address might be a * volatile field! @@ -257,7 +262,7 @@ assert value.getRegisterCategory() == AMD64.XMM; AMD64Address tmp = new AMD64Address(AMD64.rsp); subq(AMD64.rsp, target.arch.getSizeInBytes(Kind.Double)); - movsd(tmp, value); + movdbl(tmp, value); fldd(tmp); return tmp; } @@ -265,7 +270,7 @@ private void trigEpilogue(Register dest, AMD64Address tmp) { assert dest.getRegisterCategory() == AMD64.XMM; fstpd(tmp); - movsd(dest, tmp); + movdbl(dest, tmp); addq(AMD64.rsp, target.arch.getSizeInBytes(Kind.Double)); } diff -r b23cbfb4366a -r 2d76d0c85345 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 Sun Dec 08 21:55:09 2013 -0800 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Mon Dec 09 13:44:10 2013 +0100 @@ -322,9 +322,9 @@ masm.flds(tmp); } else { assert opcode == DREM; - masm.movsd(tmp, asRegister(y)); + masm.movdbl(tmp, asRegister(y)); masm.fldd(tmp); - masm.movsd(tmp, asRegister(x)); + masm.movdbl(tmp, asRegister(x)); masm.fldd(tmp); } @@ -343,7 +343,7 @@ masm.movflt(asRegister(result), tmp); } else { masm.fstpd(tmp); - masm.movsd(asRegister(result), tmp); + masm.movdbl(asRegister(result), tmp); } masm.addq(AMD64.rsp, 8); }