< prev index next > src/hotspot/cpu/x86/x86_64.ad
Print this page
%}
// Load narrow Klass Pointer
instruct loadNKlass(rRegN dst, memory mem)
%{
+ predicate(!UseCompactObjectHeaders);
match(Set dst (LoadNKlass mem));
ins_cost(125); // XXX
format %{ "movl $dst, $mem\t# compressed klass ptr" %}
ins_encode %{
__ movl($dst$$Register, $mem$$Address);
%}
ins_pipe(ialu_reg_mem); // XXX
%}
+ instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
+ %{
+ predicate(UseCompactObjectHeaders);
+ match(Set dst (LoadNKlass mem));
+ effect(KILL cr);
+ ins_cost(125); // XXX
+ format %{ "movl $dst, $mem\t# compressed klass ptr" %}
+ ins_encode %{
+ Register index = $mem$$index != 4 ? $mem$$index$$Register : noreg;
+ Address::ScaleFactor sf = (index != noreg) ? static_cast<Address::ScaleFactor>($mem$$scale) : Address::no_scale;
+ __ load_nklass_compact_c2($dst$$Register, $mem$$base$$Register, index, sf, $mem$$disp);
+ %}
+ ins_pipe(pipe_slow); // XXX
+ %}
+
// Load Float
instruct loadF(regF dst, memory mem)
%{
match(Set dst (LoadF mem));
ins_pipe(ialu_cr_reg_imm);
%}
instruct compN_mem_imm_klass(rFlagsRegU cr, memory mem, immNKlass src)
%{
+ predicate(!UseCompactObjectHeaders);
match(Set cr (CmpN src (LoadNKlass mem)));
format %{ "cmpl $mem, $src\t# compressed klass ptr" %}
ins_encode %{
__ cmp_narrow_klass($mem$$Address, (Klass*)$src$$constant);
< prev index next >