< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

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




 4402     if (UseAPX) {
 4403       __ eshrl($dst$$Register, $mem$$Address, markWord::klass_shift_at_offset, false);
 4404     }
 4405     else {
 4406       __ movl($dst$$Register, $mem$$Address);
 4407       __ shrl($dst$$Register, markWord::klass_shift_at_offset);
 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)

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

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