hotspot/src/cpu/x86/vm/x86_32.ad
changeset 38049 e8541793960f
parent 38018 1dc6c6f21231
child 38286 0ddb6f84e138
equal deleted inserted replaced
38048:21720d6174a2 38049:e8541793960f
  1019       __ vmovdqu(xmm0, Address(rsp, src_offset));
  1019       __ vmovdqu(xmm0, Address(rsp, src_offset));
  1020       __ vmovdqu(Address(rsp, dst_offset), xmm0);
  1020       __ vmovdqu(Address(rsp, dst_offset), xmm0);
  1021       __ vmovdqu(xmm0, Address(rsp, -32));
  1021       __ vmovdqu(xmm0, Address(rsp, -32));
  1022       break;
  1022       break;
  1023     case Op_VecZ:
  1023     case Op_VecZ:
  1024       __ evmovdqul(Address(rsp, -64), xmm0, 2);
  1024       __ evmovdquq(Address(rsp, -64), xmm0, 2);
  1025       __ evmovdqul(xmm0, Address(rsp, src_offset), 2);
  1025       __ evmovdquq(xmm0, Address(rsp, src_offset), 2);
  1026       __ evmovdqul(Address(rsp, dst_offset), xmm0, 2);
  1026       __ evmovdquq(Address(rsp, dst_offset), xmm0, 2);
  1027       __ evmovdqul(xmm0, Address(rsp, -64), 2);
  1027       __ evmovdquq(xmm0, Address(rsp, -64), 2);
  1028       break;
  1028       break;
  1029     default:
  1029     default:
  1030       ShouldNotReachHere();
  1030       ShouldNotReachHere();
  1031     }
  1031     }
  1032     int size = __ offset() - offset;
  1032     int size = __ offset() - offset;
 12045   ins_pipe( pipe_jcc );
 12045   ins_pipe( pipe_jcc );
 12046 %}
 12046 %}
 12047 
 12047 
 12048 // Jump Direct Conditional - Label defines a relative address from Jcc+1
 12048 // Jump Direct Conditional - Label defines a relative address from Jcc+1
 12049 instruct jmpLoopEnd(cmpOp cop, eFlagsReg cr, label labl) %{
 12049 instruct jmpLoopEnd(cmpOp cop, eFlagsReg cr, label labl) %{
       
 12050   predicate(!n->has_vector_mask_set());
 12050   match(CountedLoopEnd cop cr);
 12051   match(CountedLoopEnd cop cr);
 12051   effect(USE labl);
 12052   effect(USE labl);
 12052 
 12053 
 12053   ins_cost(300);
 12054   ins_cost(300);
 12054   format %{ "J$cop    $labl\t# Loop end" %}
 12055   format %{ "J$cop    $labl\t# Loop end" %}
 12060   ins_pipe( pipe_jcc );
 12061   ins_pipe( pipe_jcc );
 12061 %}
 12062 %}
 12062 
 12063 
 12063 // Jump Direct Conditional - Label defines a relative address from Jcc+1
 12064 // Jump Direct Conditional - Label defines a relative address from Jcc+1
 12064 instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{
 12065 instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{
       
 12066   predicate(!n->has_vector_mask_set());
 12065   match(CountedLoopEnd cop cmp);
 12067   match(CountedLoopEnd cop cmp);
 12066   effect(USE labl);
 12068   effect(USE labl);
 12067 
 12069 
 12068   ins_cost(300);
 12070   ins_cost(300);
 12069   format %{ "J$cop,u  $labl\t# Loop end" %}
 12071   format %{ "J$cop,u  $labl\t# Loop end" %}
 12074   %}
 12076   %}
 12075   ins_pipe( pipe_jcc );
 12077   ins_pipe( pipe_jcc );
 12076 %}
 12078 %}
 12077 
 12079 
 12078 instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
 12080 instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
       
 12081   predicate(!n->has_vector_mask_set());
 12079   match(CountedLoopEnd cop cmp);
 12082   match(CountedLoopEnd cop cmp);
 12080   effect(USE labl);
 12083   effect(USE labl);
 12081 
 12084 
 12082   ins_cost(200);
 12085   ins_cost(200);
 12083   format %{ "J$cop,u  $labl\t# Loop end" %}
 12086   format %{ "J$cop,u  $labl\t# Loop end" %}
 12084   size(6);
 12087   size(6);
 12085   ins_encode %{
 12088   ins_encode %{
 12086     Label* L = $labl$$label;
 12089     Label* L = $labl$$label;
 12087     __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump
 12090     __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump
       
 12091   %}
       
 12092   ins_pipe( pipe_jcc );
       
 12093 %}
       
 12094 
       
 12095 // mask version
       
 12096 // Jump Direct Conditional - Label defines a relative address from Jcc+1
       
 12097 instruct jmpLoopEnd_and_restoreMask(cmpOp cop, eFlagsReg cr, label labl) %{
       
 12098   predicate(n->has_vector_mask_set());
       
 12099   match(CountedLoopEnd cop cr);
       
 12100   effect(USE labl);
       
 12101 
       
 12102   ins_cost(400);
       
 12103   format %{ "J$cop    $labl\t# Loop end\n\t"
       
 12104             "restorevectmask \t# vector mask restore for loops" %}
       
 12105   size(10);
       
 12106   ins_encode %{
       
 12107     Label* L = $labl$$label;
       
 12108     __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump
       
 12109     __ restorevectmask();
       
 12110   %}
       
 12111   ins_pipe( pipe_jcc );
       
 12112 %}
       
 12113 
       
 12114 // Jump Direct Conditional - Label defines a relative address from Jcc+1
       
 12115 instruct jmpLoopEndU_and_restoreMask(cmpOpU cop, eFlagsRegU cmp, label labl) %{
       
 12116   predicate(n->has_vector_mask_set());
       
 12117   match(CountedLoopEnd cop cmp);
       
 12118   effect(USE labl);
       
 12119 
       
 12120   ins_cost(400);
       
 12121   format %{ "J$cop,u  $labl\t# Loop end\n\t"
       
 12122             "restorevectmask \t# vector mask restore for loops" %}
       
 12123   size(10);
       
 12124   ins_encode %{
       
 12125     Label* L = $labl$$label;
       
 12126     __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump
       
 12127     __ restorevectmask();
       
 12128   %}
       
 12129   ins_pipe( pipe_jcc );
       
 12130 %}
       
 12131 
       
 12132 instruct jmpLoopEndUCF_and_restoreMask(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{
       
 12133   predicate(n->has_vector_mask_set());
       
 12134   match(CountedLoopEnd cop cmp);
       
 12135   effect(USE labl);
       
 12136 
       
 12137   ins_cost(300);
       
 12138   format %{ "J$cop,u  $labl\t# Loop end\n\t"
       
 12139             "restorevectmask \t# vector mask restore for loops" %}
       
 12140   size(10);
       
 12141   ins_encode %{
       
 12142     Label* L = $labl$$label;
       
 12143     __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump
       
 12144     __ restorevectmask();
 12088   %}
 12145   %}
 12089   ins_pipe( pipe_jcc );
 12146   ins_pipe( pipe_jcc );
 12090 %}
 12147 %}
 12091 
 12148 
 12092 // Jump Direct Conditional - using unsigned comparison
 12149 // Jump Direct Conditional - using unsigned comparison