< prev index next >

src/hotspot/cpu/x86/x86_32.ad

Print this page




7738 
7739   ins_cost(300);
7740   format %{ "IMUL   $dst,$src,$imm" %}
7741   opcode(0x69);  /* 69 /r id */
7742   ins_encode( OpcSE(imm), RegMem( dst, src ), Con8or32( imm ) );
7743   ins_pipe( ialu_reg_mem_alu0 );
7744 %}
7745 
7746 // Multiply Memory
7747 instruct mulI(rRegI dst, memory src, eFlagsReg cr) %{
7748   match(Set dst (MulI dst (LoadI src)));
7749   effect(KILL cr);
7750 
7751   ins_cost(350);
7752   format %{ "IMUL   $dst,$src" %}
7753   opcode(0xAF, 0x0F);
7754   ins_encode( OpcS, OpcP, RegMem( dst, src) );
7755   ins_pipe( ialu_reg_mem_alu0 );
7756 %}
7757 










7758 // Multiply Register Int to Long
7759 instruct mulI2L(eADXRegL dst, eAXRegI src, nadxRegI src1, eFlagsReg flags) %{
7760   // Basic Idea: long = (long)int * (long)int
7761   match(Set dst (MulL (ConvI2L src) (ConvI2L src1)));
7762   effect(DEF dst, USE src, USE src1, KILL flags);
7763 
7764   ins_cost(300);
7765   format %{ "IMUL   $dst,$src1" %}
7766 
7767   ins_encode( long_int_multiply( dst, src1 ) );
7768   ins_pipe( ialu_reg_reg_alu0 );
7769 %}
7770 
7771 instruct mulIS_eReg(eADXRegL dst, immL_32bits mask, eFlagsReg flags, eAXRegI src, nadxRegI src1) %{
7772   // Basic Idea:  long = (int & 0xffffffffL) * (int & 0xffffffffL)
7773   match(Set dst (MulL (AndL (ConvI2L src) mask) (AndL (ConvI2L src1) mask)));
7774   effect(KILL flags);
7775 
7776   ins_cost(300);
7777   format %{ "MUL    $dst,$src1" %}




7738 
7739   ins_cost(300);
7740   format %{ "IMUL   $dst,$src,$imm" %}
7741   opcode(0x69);  /* 69 /r id */
7742   ins_encode( OpcSE(imm), RegMem( dst, src ), Con8or32( imm ) );
7743   ins_pipe( ialu_reg_mem_alu0 );
7744 %}
7745 
7746 // Multiply Memory
7747 instruct mulI(rRegI dst, memory src, eFlagsReg cr) %{
7748   match(Set dst (MulI dst (LoadI src)));
7749   effect(KILL cr);
7750 
7751   ins_cost(350);
7752   format %{ "IMUL   $dst,$src" %}
7753   opcode(0xAF, 0x0F);
7754   ins_encode( OpcS, OpcP, RegMem( dst, src) );
7755   ins_pipe( ialu_reg_mem_alu0 );
7756 %}
7757 
7758 instruct mulAddS2I_rReg(rRegI dst, rRegI src1, rRegI src2, rRegI src3, eFlagsReg cr)
7759 %{
7760   match(Set dst (MulAddS2I (Binary dst src1) (Binary src2 src3)));
7761   effect(KILL cr, KILL src2);
7762 
7763   expand %{ mulI_rReg(dst, src1, cr);
7764            mulI_rReg(src2, src3, cr);
7765            addI_rReg(dst, src2, cr); %}
7766 %}
7767 
7768 // Multiply Register Int to Long
7769 instruct mulI2L(eADXRegL dst, eAXRegI src, nadxRegI src1, eFlagsReg flags) %{
7770   // Basic Idea: long = (long)int * (long)int
7771   match(Set dst (MulL (ConvI2L src) (ConvI2L src1)));
7772   effect(DEF dst, USE src, USE src1, KILL flags);
7773 
7774   ins_cost(300);
7775   format %{ "IMUL   $dst,$src1" %}
7776 
7777   ins_encode( long_int_multiply( dst, src1 ) );
7778   ins_pipe( ialu_reg_reg_alu0 );
7779 %}
7780 
7781 instruct mulIS_eReg(eADXRegL dst, immL_32bits mask, eFlagsReg flags, eAXRegI src, nadxRegI src1) %{
7782   // Basic Idea:  long = (int & 0xffffffffL) * (int & 0xffffffffL)
7783   match(Set dst (MulL (AndL (ConvI2L src) mask) (AndL (ConvI2L src1) mask)));
7784   effect(KILL flags);
7785 
7786   ins_cost(300);
7787   format %{ "MUL    $dst,$src1" %}


< prev index next >