< prev index next >

src/hotspot/cpu/x86/x86_32.ad

Print this page

        

*** 4099,4151 **** --- 4099,4201 ---- match(RegF); format %{ %} interface(REG_INTER); %} + // Float register operands + operand vlRegF() %{ + constraint(ALLOC_IN_RC(float_reg_vl)); + match(RegF); + + format %{ %} + interface(REG_INTER); + %} + // XMM Double register operands operand regD() %{ predicate( UseSSE>=2 ); constraint(ALLOC_IN_RC(double_reg_legacy)); match(RegD); format %{ %} interface(REG_INTER); %} + // Double register operands + operand vlRegD() %{ + constraint(ALLOC_IN_RC(double_reg_vl)); + match(RegD); + + format %{ %} + interface(REG_INTER); + %} + // Vectors : note, we use legacy registers to avoid extra (unneeded in 32-bit VM) // runtime code generation via reg_class_dynamic. operand vecS() %{ constraint(ALLOC_IN_RC(vectors_reg_legacy)); match(VecS); format %{ %} interface(REG_INTER); %} + operand legVecS() %{ + constraint(ALLOC_IN_RC(vectors_reg_legacy)); + match(VecS); + + format %{ %} + interface(REG_INTER); + %} + operand vecD() %{ constraint(ALLOC_IN_RC(vectord_reg_legacy)); match(VecD); format %{ %} interface(REG_INTER); %} + operand legVecD() %{ + constraint(ALLOC_IN_RC(vectord_reg_legacy)); + match(VecD); + + format %{ %} + interface(REG_INTER); + %} + operand vecX() %{ constraint(ALLOC_IN_RC(vectorx_reg_legacy)); match(VecX); format %{ %} interface(REG_INTER); %} + operand legVecX() %{ + constraint(ALLOC_IN_RC(vectorx_reg_legacy)); + match(VecX); + + format %{ %} + interface(REG_INTER); + %} + operand vecY() %{ constraint(ALLOC_IN_RC(vectory_reg_legacy)); match(VecY); format %{ %} interface(REG_INTER); %} + operand legVecY() %{ + constraint(ALLOC_IN_RC(vectory_reg_legacy)); + match(VecY); + + format %{ %} + interface(REG_INTER); + %} + //----------Memory Operands---------------------------------------------------- // Direct Memory Operand operand direct(immP addr) %{ match(addr);
*** 6513,6522 **** --- 6563,6592 ---- __ movdbl($mem$$Address, $src$$XMMRegister); %} ins_pipe( pipe_slow ); %} + // Load Double + instruct MoveD2VL(vlRegD dst, regD src) %{ + match(Set dst src); + format %{ "movsd $dst,$src\t! load double (8 bytes)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + + // Load Double + instruct MoveVL2D(regD dst, vlRegD src) %{ + match(Set dst src); + format %{ "movsd $dst,$src\t! load double (8 bytes)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + // Store XMM register to memory (single-precision floating point) // MOVSS instruction instruct storeF(memory mem, regF src) %{ predicate(UseSSE>=1); match(Set mem (StoreF mem src));
*** 6526,6535 **** --- 6596,6625 ---- __ movflt($mem$$Address, $src$$XMMRegister); %} ins_pipe( pipe_slow ); %} + // Load Float + instruct MoveF2VL(vlRegF dst, regF src) %{ + match(Set dst src); + format %{ "movss $dst,$src\t! load float (4 bytes)" %} + ins_encode %{ + __ movflt($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + + // Load Float + instruct MoveVL2F(regF dst, vlRegF src) %{ + match(Set dst src); + format %{ "movss $dst,$src\t! load float (4 bytes)" %} + ins_encode %{ + __ movflt($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + // Store Float instruct storeFPR( memory mem, regFPR1 src) %{ predicate(UseSSE==0); match(Set mem (StoreF mem src));
< prev index next >