< prev index next >

src/hotspot/cpu/x86/x86_32.ad

Print this page

        

*** 4375,4384 **** --- 4375,4402 ---- %} opclass load_long_memory(load_long_indirect, load_long_indOffset32); + operand legRegF() %{ + predicate( UseSSE>=1 ); + constraint(ALLOC_IN_RC(float_reg_legacy)); + match(RegF); + format %{ %} + interface(REG_INTER); + %} + + operand legRegD() %{ + predicate( UseSSE>=2 ); + constraint(ALLOC_IN_RC(double_reg_legacy)); + match(RegD); + format %{ %} + interface(REG_INTER); + %} + + + //----------Special Memory Operands-------------------------------------------- // Stack Slot Operand - This operand is used for loading and storing temporary // values on the stack where a match requires a value to // flow through memory. operand stackSlotP(sRegP reg) %{
*** 5980,5989 **** --- 5998,6033 ---- %} ins_pipe( pipe_slow ); %} // Load Float + instruct MoveF2LEG(legRegF dst, regF src) %{ + match(Set dst src); + format %{ "movss $dst,$src\t! if src != dst load float (4 bytes)" %} + ins_encode %{ + if ($dst$$reg != $src$$reg) { + __ movflt($dst$$XMMRegister, $src$$XMMRegister); + } + %} + ins_pipe( fpu_reg_reg ); + %} + + // Load Float + instruct MoveLEG2F(regF dst, legRegF src) %{ + match(Set dst src); + format %{ "movss $dst,$src\t! if src != dst load float (4 bytes)" %} + ins_encode %{ + if ($dst$$reg != $src$$reg) { + __ movflt($dst$$XMMRegister, $src$$XMMRegister); + } + %} + ins_pipe( fpu_reg_reg ); + %} + + + + // Load Float instruct loadFPR(regFPR dst, memory mem) %{ predicate(UseSSE==0); match(Set dst (LoadF mem)); ins_cost(150);
*** 6210,6219 **** --- 6254,6288 ---- __ movdbl($dst$$XMMRegister, $constantaddress($con)); %} ins_pipe(pipe_slow); %} + // Load Double + instruct MoveD2LEG(legRegD dst, regD src) %{ + match(Set dst src); + format %{ "movsd $dst,$src\t! if src != dst load double (8 bytes)" %} + ins_encode %{ + if ($dst$$reg != $src$$reg) { + __ movdbl($dst$$XMMRegister, $src$$XMMRegister); + } + %} + ins_pipe( fpu_reg_reg ); + %} + + // Load Double + instruct MoveLEG2D(regD dst, legRegD src) %{ + match(Set dst src); + format %{ "movsd $dst,$src\t! if src != dst load double (8 bytes)" %} + ins_encode %{ + if ($dst$$reg != $src$$reg) { + __ movdbl($dst$$XMMRegister, $src$$XMMRegister); + } + %} + ins_pipe( fpu_reg_reg ); + %} + + // The instruction usage is guarded by predicate in operand immD0(). instruct loadConD0(regD dst, immD0 src) %{ match(Set dst src); ins_cost(100); format %{ "XORPD $dst,$dst\t# double 0.0" %}
< prev index next >