src/cpu/x86/vm/x86_64.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6695810 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/x86_64.ad

Print this page




6047 instruct loadN(rRegN dst, memory mem, rFlagsReg cr)
6048 %{
6049    match(Set dst (LoadN mem));
6050    effect(KILL cr);
6051 
6052    ins_cost(125); // XXX
6053    format %{ "movl    $dst, $mem\t# compressed ptr" %}
6054    ins_encode %{
6055      Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp);
6056      Register dst = as_Register($dst$$reg);
6057      __ movl(dst, addr);
6058    %}
6059    ins_pipe(ialu_reg_mem); // XXX
6060 %}
6061 
6062 
6063 // Load Klass Pointer
6064 instruct loadKlass(rRegP dst, memory mem)
6065 %{
6066   match(Set dst (LoadKlass mem));
6067   predicate(!n->in(MemNode::Address)->bottom_type()->is_narrow());
6068 
6069   ins_cost(125); // XXX
6070   format %{ "movq    $dst, $mem\t# class" %}
6071   opcode(0x8B);
6072   ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem));
6073   ins_pipe(ialu_reg_mem); // XXX
6074 %}
6075 
6076 // Load Klass Pointer
6077 instruct loadKlassComp(rRegP dst, memory mem)
6078 %{
6079   match(Set dst (LoadKlass mem));
6080   predicate(n->in(MemNode::Address)->bottom_type()->is_narrow());
6081 
6082   ins_cost(125); // XXX
6083   format %{ "movl    $dst, $mem\t# compressed class\n\t"
6084             "decode_heap_oop $dst,$dst" %}
6085   ins_encode %{
6086     Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp);
6087     Register dst = as_Register($dst$$reg);
6088     __ movl(dst, addr);
6089     // klass is never null in the header but this is generated for all
6090     // klass loads not just the _klass field in the header.
6091     __ decode_heap_oop(dst);
6092   %}
6093   ins_pipe(ialu_reg_mem); // XXX
6094 %}
6095 
6096 // Load Float
6097 instruct loadF(regF dst, memory mem)
6098 %{
6099   match(Set dst (LoadF mem));
6100 




6047 instruct loadN(rRegN dst, memory mem, rFlagsReg cr)
6048 %{
6049    match(Set dst (LoadN mem));
6050    effect(KILL cr);
6051 
6052    ins_cost(125); // XXX
6053    format %{ "movl    $dst, $mem\t# compressed ptr" %}
6054    ins_encode %{
6055      Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp);
6056      Register dst = as_Register($dst$$reg);
6057      __ movl(dst, addr);
6058    %}
6059    ins_pipe(ialu_reg_mem); // XXX
6060 %}
6061 
6062 
6063 // Load Klass Pointer
6064 instruct loadKlass(rRegP dst, memory mem)
6065 %{
6066   match(Set dst (LoadKlass mem));
6067   predicate(!n->in(MemNode::Address)->bottom_type()->is_ptr_to_narrowoop());
6068 
6069   ins_cost(125); // XXX
6070   format %{ "movq    $dst, $mem\t# class" %}
6071   opcode(0x8B);
6072   ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem));
6073   ins_pipe(ialu_reg_mem); // XXX
6074 %}
6075 
6076 // Load Klass Pointer
6077 instruct loadKlassComp(rRegP dst, memory mem)
6078 %{
6079   match(Set dst (LoadKlass mem));
6080   predicate(n->in(MemNode::Address)->bottom_type()->is_ptr_to_narrowoop());
6081 
6082   ins_cost(125); // XXX
6083   format %{ "movl    $dst, $mem\t# compressed class\n\t"
6084             "decode_heap_oop $dst,$dst" %}
6085   ins_encode %{
6086     Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp);
6087     Register dst = as_Register($dst$$reg);
6088     __ movl(dst, addr);
6089     // klass is never null in the header but this is generated for all
6090     // klass loads not just the _klass field in the header.
6091     __ decode_heap_oop(dst);
6092   %}
6093   ins_pipe(ialu_reg_mem); // XXX
6094 %}
6095 
6096 // Load Float
6097 instruct loadF(regF dst, memory mem)
6098 %{
6099   match(Set dst (LoadF mem));
6100 


src/cpu/x86/vm/x86_64.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File