< prev index next >

src/hotspot/cpu/x86/x86.ad

Print this page

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




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

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

 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)
< prev index next >