< prev index next >

src/hotspot/cpu/x86/x86.ad

Print this page

 7146 %{
 7147   predicate(!UseCompactObjectHeaders);
 7148   match(Set dst (LoadNKlass mem));
 7149 
 7150   ins_cost(125); // XXX
 7151   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 7152   ins_encode %{
 7153     __ movl($dst$$Register, $mem$$Address);
 7154   %}
 7155   ins_pipe(ialu_reg_mem); // XXX
 7156 %}
 7157 
 7158 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 7159 %{
 7160   predicate(UseCompactObjectHeaders);
 7161   match(Set dst (LoadNKlass mem));
 7162   effect(KILL cr);
 7163   ins_cost(125);
 7164   format %{
 7165     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 7166     "shrl    $dst, markWord::klass_shift_at_offset"
 7167   %}
 7168   ins_encode %{




 7169     if (UseAPX) {
 7170       __ eshrl($dst$$Register, $mem$$Address, markWord::klass_shift_at_offset, false);
 7171     }
 7172     else {
 7173       __ movl($dst$$Register, $mem$$Address);
 7174       __ shrl($dst$$Register, markWord::klass_shift_at_offset);
 7175     }
 7176   %}
 7177   ins_pipe(ialu_reg_mem);
 7178 %}
 7179 
 7180 // Load Float
 7181 instruct loadF(regF dst, memory mem)
 7182 %{
 7183   match(Set dst (LoadF mem));
 7184 
 7185   ins_cost(145); // XXX
 7186   format %{ "movss   $dst, $mem\t# float" %}
 7187   ins_encode %{
 7188     __ movflt($dst$$XMMRegister, $mem$$Address);
 7189   %}
 7190   ins_pipe(pipe_slow); // XXX
 7191 %}
 7192 
 7193 // Load Double
 7194 instruct loadD_partial(regD dst, memory mem)

 7146 %{
 7147   predicate(!UseCompactObjectHeaders);
 7148   match(Set dst (LoadNKlass mem));
 7149 
 7150   ins_cost(125); // XXX
 7151   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 7152   ins_encode %{
 7153     __ movl($dst$$Register, $mem$$Address);
 7154   %}
 7155   ins_pipe(ialu_reg_mem); // XXX
 7156 %}
 7157 
 7158 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 7159 %{
 7160   predicate(UseCompactObjectHeaders);
 7161   match(Set dst (LoadNKlass mem));
 7162   effect(KILL cr);
 7163   ins_cost(125);
 7164   format %{
 7165     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 7166     "shrl    $dst, markWord::klass_shift"
 7167   %}
 7168   ins_encode %{
 7169     // The incoming address is pointing into obj-start + Type::klass_offset(). We need to extract
 7170     // obj-start, so that we can load from the object's mark-word instead.
 7171     Register d = $dst$$Register;
 7172     Address  s = ($mem$$Address).plus_disp(-Type::klass_offset());
 7173     if (UseAPX) {
 7174       __ eshrl(d, s, markWord::klass_shift, false);
 7175     } else {
 7176       __ movl(d, s);
 7177       __ shrl(d, markWord::klass_shift);

 7178     }
 7179   %}
 7180   ins_pipe(ialu_reg_mem);
 7181 %}
 7182 
 7183 // Load Float
 7184 instruct loadF(regF dst, memory mem)
 7185 %{
 7186   match(Set dst (LoadF mem));
 7187 
 7188   ins_cost(145); // XXX
 7189   format %{ "movss   $dst, $mem\t# float" %}
 7190   ins_encode %{
 7191     __ movflt($dst$$XMMRegister, $mem$$Address);
 7192   %}
 7193   ins_pipe(pipe_slow); // XXX
 7194 %}
 7195 
 7196 // Load Double
 7197 instruct loadD_partial(regD dst, memory mem)
< prev index next >