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
|