< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

 4367 %{
 4368   predicate(!UseCompactObjectHeaders);
 4369   match(Set dst (LoadNKlass mem));
 4370 
 4371   ins_cost(125); // XXX
 4372   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 4373   ins_encode %{
 4374     __ movl($dst$$Register, $mem$$Address);
 4375   %}
 4376   ins_pipe(ialu_reg_mem); // XXX
 4377 %}
 4378 
 4379 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 4380 %{
 4381   predicate(UseCompactObjectHeaders);
 4382   match(Set dst (LoadNKlass mem));
 4383   effect(KILL cr);
 4384   ins_cost(125);
 4385   format %{
 4386     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 4387     "shrl    $dst, markWord::klass_shift_at_offset"
 4388   %}
 4389   ins_encode %{




 4390     if (UseAPX) {
 4391       __ eshrl($dst$$Register, $mem$$Address, markWord::klass_shift_at_offset, false);
 4392     }
 4393     else {
 4394       __ movl($dst$$Register, $mem$$Address);
 4395       __ shrl($dst$$Register, markWord::klass_shift_at_offset);
 4396     }
 4397   %}
 4398   ins_pipe(ialu_reg_mem);
 4399 %}
 4400 
 4401 // Load Float
 4402 instruct loadF(regF dst, memory mem)
 4403 %{
 4404   match(Set dst (LoadF mem));
 4405 
 4406   ins_cost(145); // XXX
 4407   format %{ "movss   $dst, $mem\t# float" %}
 4408   ins_encode %{
 4409     __ movflt($dst$$XMMRegister, $mem$$Address);
 4410   %}
 4411   ins_pipe(pipe_slow); // XXX
 4412 %}
 4413 
 4414 // Load Double
 4415 instruct loadD_partial(regD dst, memory mem)

 4367 %{
 4368   predicate(!UseCompactObjectHeaders);
 4369   match(Set dst (LoadNKlass mem));
 4370 
 4371   ins_cost(125); // XXX
 4372   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 4373   ins_encode %{
 4374     __ movl($dst$$Register, $mem$$Address);
 4375   %}
 4376   ins_pipe(ialu_reg_mem); // XXX
 4377 %}
 4378 
 4379 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 4380 %{
 4381   predicate(UseCompactObjectHeaders);
 4382   match(Set dst (LoadNKlass mem));
 4383   effect(KILL cr);
 4384   ins_cost(125);
 4385   format %{
 4386     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 4387     "shrl    $dst, markWord::klass_shift"
 4388   %}
 4389   ins_encode %{
 4390     // The incoming address is pointing into obj-start + Type::klass_offset(). We need to extract
 4391     // obj-start, so that we can load from the object's mark-word instead.
 4392     Register d = $dst$$Register;
 4393     Address  s = ($mem$$Address).plus_disp(-Type::klass_offset());
 4394     if (UseAPX) {
 4395       __ eshrl(d, s, markWord::klass_shift, false);
 4396     } else {
 4397       __ movl(d, s);
 4398       __ shrl(d, markWord::klass_shift);

 4399     }
 4400   %}
 4401   ins_pipe(ialu_reg_mem);
 4402 %}
 4403 
 4404 // Load Float
 4405 instruct loadF(regF dst, memory mem)
 4406 %{
 4407   match(Set dst (LoadF mem));
 4408 
 4409   ins_cost(145); // XXX
 4410   format %{ "movss   $dst, $mem\t# float" %}
 4411   ins_encode %{
 4412     __ movflt($dst$$XMMRegister, $mem$$Address);
 4413   %}
 4414   ins_pipe(pipe_slow); // XXX
 4415 %}
 4416 
 4417 // Load Double
 4418 instruct loadD_partial(regD dst, memory mem)
< prev index next >