< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

 4376 %{
 4377   predicate(!UseCompactObjectHeaders);
 4378   match(Set dst (LoadNKlass mem));
 4379 
 4380   ins_cost(125); // XXX
 4381   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 4382   ins_encode %{
 4383     __ movl($dst$$Register, $mem$$Address);
 4384   %}
 4385   ins_pipe(ialu_reg_mem); // XXX
 4386 %}
 4387 
 4388 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 4389 %{
 4390   predicate(UseCompactObjectHeaders);
 4391   match(Set dst (LoadNKlass mem));
 4392   effect(KILL cr);
 4393   ins_cost(125);
 4394   format %{
 4395     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 4396     "shrl    $dst, markWord::klass_shift_at_offset"
 4397   %}
 4398   ins_encode %{




 4399     if (UseAPX) {
 4400       __ eshrl($dst$$Register, $mem$$Address, markWord::klass_shift_at_offset, false);
 4401     }
 4402     else {
 4403       __ movl($dst$$Register, $mem$$Address);
 4404       __ shrl($dst$$Register, markWord::klass_shift_at_offset);
 4405     }
 4406   %}
 4407   ins_pipe(ialu_reg_mem);
 4408 %}
 4409 
 4410 // Load Float
 4411 instruct loadF(regF dst, memory mem)
 4412 %{
 4413   match(Set dst (LoadF mem));
 4414 
 4415   ins_cost(145); // XXX
 4416   format %{ "movss   $dst, $mem\t# float" %}
 4417   ins_encode %{
 4418     __ movflt($dst$$XMMRegister, $mem$$Address);
 4419   %}
 4420   ins_pipe(pipe_slow); // XXX
 4421 %}
 4422 
 4423 // Load Double
 4424 instruct loadD_partial(regD dst, memory mem)

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

 4408     }
 4409   %}
 4410   ins_pipe(ialu_reg_mem);
 4411 %}
 4412 
 4413 // Load Float
 4414 instruct loadF(regF dst, memory mem)
 4415 %{
 4416   match(Set dst (LoadF mem));
 4417 
 4418   ins_cost(145); // XXX
 4419   format %{ "movss   $dst, $mem\t# float" %}
 4420   ins_encode %{
 4421     __ movflt($dst$$XMMRegister, $mem$$Address);
 4422   %}
 4423   ins_pipe(pipe_slow); // XXX
 4424 %}
 4425 
 4426 // Load Double
 4427 instruct loadD_partial(regD dst, memory mem)
< prev index next >