< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page




10571   %}
10572   ins_pipe(pipe_slow); // XXX
10573 %}
10574 
10575 instruct convD2F_reg_mem(regF dst, memory src)
10576 %{
10577   match(Set dst (ConvD2F (LoadD src)));
10578 
10579   format %{ "cvtsd2ss $dst, $src" %}
10580   ins_encode %{
10581     __ cvtsd2ss ($dst$$XMMRegister, $src$$Address);
10582   %}
10583   ins_pipe(pipe_slow); // XXX
10584 %}
10585 
10586 // XXX do mem variants
10587 instruct convF2I_reg_reg(rRegI dst, regF src, rFlagsReg cr)
10588 %{
10589   match(Set dst (ConvF2I src));
10590   effect(KILL cr);
10591 
10592   format %{ "cvttss2sil $dst, $src\t# f2i\n\t"
10593             "cmpl    $dst, #0x80000000\n\t"
10594             "jne,s   done\n\t"
10595             "subq    rsp, #8\n\t"
10596             "movss   [rsp], $src\n\t"
10597             "call    f2i_fixup\n\t"
10598             "popq    $dst\n"
10599     "done:   "%}
10600   ins_encode %{
10601     Label done;
10602     __ cvttss2sil($dst$$Register, $src$$XMMRegister);
10603     __ cmpl($dst$$Register, 0x80000000);
10604     __ jccb(Assembler::notEqual, done);
10605     __ subptr(rsp, 8);
10606     __ movflt(Address(rsp, 0), $src$$XMMRegister);
10607     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::x86::f2i_fixup())));
10608     __ pop($dst$$Register);
10609     __ bind(done);
10610   %}
10611   ins_pipe(pipe_slow);
10612 %}
10613 
10614 instruct convF2L_reg_reg(rRegL dst, regF src, rFlagsReg cr)
10615 %{
10616   match(Set dst (ConvF2L src));
10617   effect(KILL cr);
10618 
10619   format %{ "cvttss2siq $dst, $src\t# f2l\n\t"
10620             "cmpq    $dst, [0x8000000000000000]\n\t"
10621             "jne,s   done\n\t"
10622             "subq    rsp, #8\n\t"
10623             "movss   [rsp], $src\n\t"
10624             "call    f2l_fixup\n\t"
10625             "popq    $dst\n"
10626     "done:   "%}
10627   ins_encode %{
10628     Label done;
10629     __ cvttss2siq($dst$$Register, $src$$XMMRegister);
10630     __ cmp64($dst$$Register,
10631              ExternalAddress((address) StubRoutines::x86::double_sign_flip()));
10632     __ jccb(Assembler::notEqual, done);
10633     __ subptr(rsp, 8);
10634     __ movflt(Address(rsp, 0), $src$$XMMRegister);
10635     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::x86::f2l_fixup())));
10636     __ pop($dst$$Register);
10637     __ bind(done);
10638   %}
10639   ins_pipe(pipe_slow);
10640 %}
10641 
10642 instruct convD2I_reg_reg(rRegI dst, regD src, rFlagsReg cr)
10643 %{
10644   match(Set dst (ConvD2I src));
10645   effect(KILL cr);
10646 
10647   format %{ "cvttsd2sil $dst, $src\t# d2i\n\t"
10648             "cmpl    $dst, #0x80000000\n\t"
10649             "jne,s   done\n\t"
10650             "subq    rsp, #8\n\t"
10651             "movsd   [rsp], $src\n\t"
10652             "call    d2i_fixup\n\t"
10653             "popq    $dst\n"
10654     "done:   "%}
10655   ins_encode %{
10656     Label done;
10657     __ cvttsd2sil($dst$$Register, $src$$XMMRegister);
10658     __ cmpl($dst$$Register, 0x80000000);
10659     __ jccb(Assembler::notEqual, done);
10660     __ subptr(rsp, 8);
10661     __ movdbl(Address(rsp, 0), $src$$XMMRegister);
10662     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::x86::d2i_fixup())));
10663     __ pop($dst$$Register);
10664     __ bind(done);
10665   %}
10666   ins_pipe(pipe_slow);
10667 %}
10668 
10669 instruct convD2L_reg_reg(rRegL dst, regD src, rFlagsReg cr)
10670 %{
10671   match(Set dst (ConvD2L src));
10672   effect(KILL cr);
10673 
10674   format %{ "cvttsd2siq $dst, $src\t# d2l\n\t"
10675             "cmpq    $dst, [0x8000000000000000]\n\t"
10676             "jne,s   done\n\t"
10677             "subq    rsp, #8\n\t"
10678             "movsd   [rsp], $src\n\t"
10679             "call    d2l_fixup\n\t"
10680             "popq    $dst\n"
10681     "done:   "%}
10682   ins_encode %{
10683     Label done;
10684     __ cvttsd2siq($dst$$Register, $src$$XMMRegister);
10685     __ cmp64($dst$$Register,
10686              ExternalAddress((address) StubRoutines::x86::double_sign_flip()));
10687     __ jccb(Assembler::notEqual, done);
10688     __ subptr(rsp, 8);
10689     __ movdbl(Address(rsp, 0), $src$$XMMRegister);
10690     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::x86::d2l_fixup())));
10691     __ pop($dst$$Register);
10692     __ bind(done);
10693   %}
10694   ins_pipe(pipe_slow);
10695 %}
10696 
10697 instruct convI2F_reg_reg(regF dst, rRegI src)
10698 %{
10699   predicate(!UseXmmI2F);
10700   match(Set dst (ConvI2F src));
10701 
10702   format %{ "cvtsi2ssl $dst, $src\t# i2f" %}
10703   ins_encode %{
10704     __ cvtsi2ssl ($dst$$XMMRegister, $src$$Register);
10705   %}
10706   ins_pipe(pipe_slow); // XXX
10707 %}
10708 
10709 instruct convI2F_reg_mem(regF dst, memory src)
10710 %{
10711   match(Set dst (ConvI2F (LoadI src)));
10712 




10571   %}
10572   ins_pipe(pipe_slow); // XXX
10573 %}
10574 
10575 instruct convD2F_reg_mem(regF dst, memory src)
10576 %{
10577   match(Set dst (ConvD2F (LoadD src)));
10578 
10579   format %{ "cvtsd2ss $dst, $src" %}
10580   ins_encode %{
10581     __ cvtsd2ss ($dst$$XMMRegister, $src$$Address);
10582   %}
10583   ins_pipe(pipe_slow); // XXX
10584 %}
10585 
10586 // XXX do mem variants
10587 instruct convF2I_reg_reg(rRegI dst, regF src, rFlagsReg cr)
10588 %{
10589   match(Set dst (ConvF2I src));
10590   effect(KILL cr);
10591   format %{ "convert_f2i $dst,$src" %}








10592   ins_encode %{
10593     __ convert_f2i($dst$$Register, $src$$XMMRegister);








10594   %}
10595   ins_pipe(pipe_slow);
10596 %}
10597 
10598 instruct convF2L_reg_reg(rRegL dst, regF src, rFlagsReg cr)
10599 %{
10600   match(Set dst (ConvF2L src));
10601   effect(KILL cr);
10602   format %{ "convert_f2l $dst,$src"%}








10603   ins_encode %{
10604     __ convert_f2l($dst$$Register, $src$$XMMRegister);









10605   %}
10606   ins_pipe(pipe_slow);
10607 %}
10608 
10609 instruct convD2I_reg_reg(rRegI dst, regD src, rFlagsReg cr)
10610 %{
10611   match(Set dst (ConvD2I src));
10612   effect(KILL cr);
10613   format %{ "convert_d2i $dst,$src"%}








10614   ins_encode %{
10615     __ convert_d2i($dst$$Register, $src$$XMMRegister);








10616   %}
10617   ins_pipe(pipe_slow);
10618 %}
10619 
10620 instruct convD2L_reg_reg(rRegL dst, regD src, rFlagsReg cr)
10621 %{
10622   match(Set dst (ConvD2L src));
10623   effect(KILL cr);
10624   format %{ "convert_d2l $dst,$src"%}








10625   ins_encode %{
10626     __ convert_d2l($dst$$Register, $src$$XMMRegister);









10627   %}
10628   ins_pipe(pipe_slow);
10629 %}
10630 
10631 instruct convI2F_reg_reg(regF dst, rRegI src)
10632 %{
10633   predicate(!UseXmmI2F);
10634   match(Set dst (ConvI2F src));
10635 
10636   format %{ "cvtsi2ssl $dst, $src\t# i2f" %}
10637   ins_encode %{
10638     __ cvtsi2ssl ($dst$$XMMRegister, $src$$Register);
10639   %}
10640   ins_pipe(pipe_slow); // XXX
10641 %}
10642 
10643 instruct convI2F_reg_mem(regF dst, memory src)
10644 %{
10645   match(Set dst (ConvI2F (LoadI src)));
10646 


< prev index next >