< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

 4353 %{
 4354   predicate(!UseCompactObjectHeaders);
 4355   match(Set dst (LoadNKlass mem));
 4356 
 4357   ins_cost(125); // XXX
 4358   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 4359   ins_encode %{
 4360     __ movl($dst$$Register, $mem$$Address);
 4361   %}
 4362   ins_pipe(ialu_reg_mem); // XXX
 4363 %}
 4364 
 4365 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 4366 %{
 4367   predicate(UseCompactObjectHeaders);
 4368   match(Set dst (LoadNKlass mem));
 4369   effect(KILL cr);
 4370   ins_cost(125); // XXX
 4371   format %{
 4372     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 4373     "shrl    $dst, markWord::klass_shift_at_offset"
 4374   %}
 4375   ins_encode %{
 4376     __ movl($dst$$Register, $mem$$Address);
 4377     __ shrl($dst$$Register, markWord::klass_shift_at_offset);





 4378   %}
 4379   ins_pipe(ialu_reg_mem); // XXX
 4380 %}
 4381 
 4382 // Load Float
 4383 instruct loadF(regF dst, memory mem)
 4384 %{
 4385   match(Set dst (LoadF mem));
 4386 
 4387   ins_cost(145); // XXX
 4388   format %{ "movss   $dst, $mem\t# float" %}
 4389   ins_encode %{
 4390     __ movflt($dst$$XMMRegister, $mem$$Address);
 4391   %}
 4392   ins_pipe(pipe_slow); // XXX
 4393 %}
 4394 
 4395 // Load Double
 4396 instruct loadD_partial(regD dst, memory mem)
 4397 %{

 4353 %{
 4354   predicate(!UseCompactObjectHeaders);
 4355   match(Set dst (LoadNKlass mem));
 4356 
 4357   ins_cost(125); // XXX
 4358   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 4359   ins_encode %{
 4360     __ movl($dst$$Register, $mem$$Address);
 4361   %}
 4362   ins_pipe(ialu_reg_mem); // XXX
 4363 %}
 4364 
 4365 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 4366 %{
 4367   predicate(UseCompactObjectHeaders);
 4368   match(Set dst (LoadNKlass mem));
 4369   effect(KILL cr);
 4370   ins_cost(125); // XXX
 4371   format %{
 4372     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 4373     "shrl    $dst, markWord::klass_shift"
 4374   %}
 4375   ins_encode %{
 4376     // The incoming address is pointing into obj-start + klass_offset_in_bytes. We need to extract
 4377     // obj-start, so that we can load from the object's mark-word instead. Usually the address
 4378     // comes as obj-start in obj and klass_offset_in_bytes in disp.
 4379     Register d = $dst$$Register;
 4380     Address  s = $mem$$Address;
 4381     __ movl(d, s.plus_disp(-Type::klass_offset()));
 4382     __ shrl(d, markWord::klass_shift);
 4383   %}
 4384   ins_pipe(ialu_reg_mem); // XXX
 4385 %}
 4386 
 4387 // Load Float
 4388 instruct loadF(regF dst, memory mem)
 4389 %{
 4390   match(Set dst (LoadF mem));
 4391 
 4392   ins_cost(145); // XXX
 4393   format %{ "movss   $dst, $mem\t# float" %}
 4394   ins_encode %{
 4395     __ movflt($dst$$XMMRegister, $mem$$Address);
 4396   %}
 4397   ins_pipe(pipe_slow); // XXX
 4398 %}
 4399 
 4400 // Load Double
 4401 instruct loadD_partial(regD dst, memory mem)
 4402 %{
< prev index next >