6042 ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem)); |
6042 ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem)); |
6043 ins_pipe(ialu_reg_mem); // XXX |
6043 ins_pipe(ialu_reg_mem); // XXX |
6044 %} |
6044 %} |
6045 |
6045 |
6046 // Load Compressed Pointer |
6046 // Load Compressed Pointer |
6047 instruct loadN(rRegN dst, memory mem, rFlagsReg cr) |
6047 instruct loadN(rRegN dst, memory mem) |
6048 %{ |
6048 %{ |
6049 match(Set dst (LoadN mem)); |
6049 match(Set dst (LoadN mem)); |
6050 effect(KILL cr); |
|
6051 |
6050 |
6052 ins_cost(125); // XXX |
6051 ins_cost(125); // XXX |
6053 format %{ "movl $dst, $mem\t# compressed ptr" %} |
6052 format %{ "movl $dst, $mem\t# compressed ptr" %} |
6054 ins_encode %{ |
6053 ins_encode %{ |
6055 Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp); |
6054 Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp); |
6062 |
6061 |
6063 // Load Klass Pointer |
6062 // Load Klass Pointer |
6064 instruct loadKlass(rRegP dst, memory mem) |
6063 instruct loadKlass(rRegP dst, memory mem) |
6065 %{ |
6064 %{ |
6066 match(Set dst (LoadKlass mem)); |
6065 match(Set dst (LoadKlass mem)); |
6067 predicate(!n->in(MemNode::Address)->bottom_type()->is_narrow()); |
6066 predicate(!n->in(MemNode::Address)->bottom_type()->is_ptr_to_narrowoop()); |
6068 |
6067 |
6069 ins_cost(125); // XXX |
6068 ins_cost(125); // XXX |
6070 format %{ "movq $dst, $mem\t# class" %} |
6069 format %{ "movq $dst, $mem\t# class" %} |
6071 opcode(0x8B); |
6070 opcode(0x8B); |
6072 ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem)); |
6071 ins_encode(REX_reg_mem_wide(dst, mem), OpcP, reg_mem(dst, mem)); |
6073 ins_pipe(ialu_reg_mem); // XXX |
6072 ins_pipe(ialu_reg_mem); // XXX |
6074 %} |
6073 %} |
6075 |
6074 |
6076 // Load Klass Pointer |
6075 // Load Klass Pointer |
6077 instruct loadKlassComp(rRegP dst, memory mem) |
6076 instruct loadKlassComp(rRegP dst, memory mem, rFlagsReg cr) |
6078 %{ |
6077 %{ |
6079 match(Set dst (LoadKlass mem)); |
6078 match(Set dst (LoadKlass mem)); |
6080 predicate(n->in(MemNode::Address)->bottom_type()->is_narrow()); |
6079 predicate(n->in(MemNode::Address)->bottom_type()->is_ptr_to_narrowoop()); |
|
6080 effect(KILL cr); |
6081 |
6081 |
6082 ins_cost(125); // XXX |
6082 ins_cost(125); // XXX |
6083 format %{ "movl $dst, $mem\t# compressed class\n\t" |
6083 format %{ "movl $dst, $mem\t# compressed class\n\t" |
6084 "decode_heap_oop $dst,$dst" %} |
6084 "decode_heap_oop $dst,$dst" %} |
6085 ins_encode %{ |
6085 ins_encode %{ |
6631 ins_encode(REX_mem_wide(mem), OpcP, RM_opc_mem(0x00, mem), Con32(src)); |
6632 ins_encode(REX_mem_wide(mem), OpcP, RM_opc_mem(0x00, mem), Con32(src)); |
6632 ins_pipe(ialu_mem_imm); |
6633 ins_pipe(ialu_mem_imm); |
6633 %} |
6634 %} |
6634 |
6635 |
6635 // Store Compressed Pointer |
6636 // Store Compressed Pointer |
6636 instruct storeN(memory mem, rRegN src, rFlagsReg cr) |
6637 instruct storeN(memory mem, rRegN src) |
6637 %{ |
6638 %{ |
6638 match(Set mem (StoreN mem src)); |
6639 match(Set mem (StoreN mem src)); |
6639 effect(KILL cr); |
|
6640 |
6640 |
6641 ins_cost(125); // XXX |
6641 ins_cost(125); // XXX |
6642 format %{ "movl $mem, $src\t# ptr" %} |
6642 format %{ "movl $mem, $src\t# ptr" %} |
6643 ins_encode %{ |
6643 ins_encode %{ |
6644 Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp); |
6644 Address addr = build_address($mem$$base, $mem$$index, $mem$$scale, $mem$$disp); |