< prev index next >
src/hotspot/cpu/x86/x86_64.ad
Print this page
@@ -5368,25 +5368,32 @@
instruct loadKlass(rRegP dst, memory mem)
%{
match(Set dst (LoadKlass mem));
ins_cost(125); // XXX
- format %{ "movq $dst, $mem\t# class" %}
- opcode(0x8B);
- ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem));
+ format %{ "movq $dst, $mem\t# class\n\t"
+ "shlq $dst, oopDesc::storage_props_nof_bits\n\t"
+ "shrq $dst, oopDesc::storage_props_nof_bits" %}
+ ins_encode %{
+ __ movptr($dst$$Register, $mem$$Address);
+ __ shlq($dst$$Register, oopDesc::storage_props_nof_bits);
+ __ shrq($dst$$Register, oopDesc::storage_props_nof_bits);
+ %}
ins_pipe(ialu_reg_mem); // XXX
%}
// Load narrow Klass Pointer
instruct loadNKlass(rRegN dst, memory mem)
%{
match(Set dst (LoadNKlass mem));
ins_cost(125); // XXX
- format %{ "movl $dst, $mem\t# compressed klass ptr" %}
+ format %{ "movl $dst, $mem\t# compressed klass ptr\n\t"
+ "andl $dst, oopDesc::compressed_klass_mask()" %}
ins_encode %{
__ movl($dst$$Register, $mem$$Address);
+ __ andl($dst$$Register, oopDesc::compressed_klass_mask());
%}
ins_pipe(ialu_reg_mem); // XXX
%}
// Load Float
< prev index next >