< prev index next >

src/hotspot/cpu/x86/x86.ad

Print this page

 7276 %{
 7277   predicate(!UseCompactObjectHeaders);
 7278   match(Set dst (LoadNKlass mem));
 7279 
 7280   ins_cost(125); // XXX
 7281   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 7282   ins_encode %{
 7283     __ movl($dst$$Register, $mem$$Address);
 7284   %}
 7285   ins_pipe(ialu_reg_mem); // XXX
 7286 %}
 7287 
 7288 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 7289 %{
 7290   predicate(UseCompactObjectHeaders);
 7291   match(Set dst (LoadNKlass mem));
 7292   effect(KILL cr);
 7293   ins_cost(125);
 7294   format %{
 7295     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 7296     "shrl    $dst, markWord::klass_shift_at_offset"
 7297   %}
 7298   ins_encode %{




 7299     if (UseAPX) {
 7300       __ eshrl($dst$$Register, $mem$$Address, markWord::klass_shift_at_offset, false);
 7301     }
 7302     else {
 7303       __ movl($dst$$Register, $mem$$Address);
 7304       __ shrl($dst$$Register, markWord::klass_shift_at_offset);
 7305     }
 7306   %}
 7307   ins_pipe(ialu_reg_mem);
 7308 %}
 7309 
 7310 // Load Float
 7311 instruct loadF(regF dst, memory mem)
 7312 %{
 7313   match(Set dst (LoadF mem));
 7314 
 7315   ins_cost(145); // XXX
 7316   format %{ "movss   $dst, $mem\t# float" %}
 7317   ins_encode %{
 7318     __ movflt($dst$$XMMRegister, $mem$$Address);
 7319   %}
 7320   ins_pipe(pipe_slow); // XXX
 7321 %}
 7322 
 7323 // Load Double
 7324 instruct loadD_partial(regD dst, memory mem)

 7276 %{
 7277   predicate(!UseCompactObjectHeaders);
 7278   match(Set dst (LoadNKlass mem));
 7279 
 7280   ins_cost(125); // XXX
 7281   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 7282   ins_encode %{
 7283     __ movl($dst$$Register, $mem$$Address);
 7284   %}
 7285   ins_pipe(ialu_reg_mem); // XXX
 7286 %}
 7287 
 7288 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 7289 %{
 7290   predicate(UseCompactObjectHeaders);
 7291   match(Set dst (LoadNKlass mem));
 7292   effect(KILL cr);
 7293   ins_cost(125);
 7294   format %{
 7295     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 7296     "shrl    $dst, markWord::klass_shift"
 7297   %}
 7298   ins_encode %{
 7299     // The incoming address is pointing into obj-start + Type::klass_offset(). We need to extract
 7300     // obj-start, so that we can load from the object's mark-word instead.
 7301     Register d = $dst$$Register;
 7302     Address  s = ($mem$$Address).plus_disp(-Type::klass_offset());
 7303     if (UseAPX) {
 7304       __ eshrl(d, s, markWord::klass_shift, false);
 7305     } else {
 7306       __ movl(d, s);
 7307       __ shrl(d, markWord::klass_shift);

 7308     }
 7309   %}
 7310   ins_pipe(ialu_reg_mem);
 7311 %}
 7312 
 7313 // Load Float
 7314 instruct loadF(regF dst, memory mem)
 7315 %{
 7316   match(Set dst (LoadF mem));
 7317 
 7318   ins_cost(145); // XXX
 7319   format %{ "movss   $dst, $mem\t# float" %}
 7320   ins_encode %{
 7321     __ movflt($dst$$XMMRegister, $mem$$Address);
 7322   %}
 7323   ins_pipe(pipe_slow); // XXX
 7324 %}
 7325 
 7326 // Load Double
 7327 instruct loadD_partial(regD dst, memory mem)
< prev index next >