5454 ins_cost(MEMORY_REF_COST);
5455 size(4);
5456
5457 format %{ "LDUW $mem,$dst\t! compressed ptr" %}
5458 ins_encode %{
5459 Register base = as_Register($mem$$base);
5460 Register index = as_Register($mem$$index);
5461 Register dst = $dst$$Register;
5462 if (index != G0) {
5463 __ lduw(base, index, dst);
5464 } else {
5465 __ lduw(base, $mem$$disp, dst);
5466 }
5467 %}
5468 ins_pipe(iload_mem);
5469 %}
5470
5471 // Load Klass Pointer
5472 instruct loadKlass(iRegP dst, memory mem) %{
5473 match(Set dst (LoadKlass mem));
5474 predicate(!n->in(MemNode::Address)->bottom_type()->is_narrow());
5475 ins_cost(MEMORY_REF_COST);
5476 size(4);
5477
5478 #ifndef _LP64
5479 format %{ "LDUW $mem,$dst\t! klass ptr" %}
5480 opcode(Assembler::lduw_op3, 0, REGP_OP);
5481 #else
5482 format %{ "LDX $mem,$dst\t! klass ptr" %}
5483 opcode(Assembler::ldx_op3, 0, REGP_OP);
5484 #endif
5485 ins_encode( form3_mem_reg( mem, dst ) );
5486 ins_pipe(iload_mem);
5487 %}
5488
5489 // Load Klass Pointer
5490 instruct loadKlassComp(iRegP dst, memory mem) %{
5491 match(Set dst (LoadKlass mem));
5492 predicate(n->in(MemNode::Address)->bottom_type()->is_narrow());
5493 ins_cost(MEMORY_REF_COST);
5494
5495 format %{ "LDUW $mem,$dst\t! compressed klass ptr" %}
5496
5497 ins_encode %{
5498 Register base = as_Register($mem$$base);
5499 Register index = as_Register($mem$$index);
5500 Register dst = $dst$$Register;
5501 if (index != G0) {
5502 __ lduw(base, index, dst);
5503 } else {
5504 __ lduw(base, $mem$$disp, dst);
5505 }
5506 // klass oop never null but this is generated for nonheader klass loads
5507 // too which can be null.
5508 __ decode_heap_oop(dst);
5509 %}
5510 ins_pipe(iload_mem);
5511 %}
5512
|
5454 ins_cost(MEMORY_REF_COST);
5455 size(4);
5456
5457 format %{ "LDUW $mem,$dst\t! compressed ptr" %}
5458 ins_encode %{
5459 Register base = as_Register($mem$$base);
5460 Register index = as_Register($mem$$index);
5461 Register dst = $dst$$Register;
5462 if (index != G0) {
5463 __ lduw(base, index, dst);
5464 } else {
5465 __ lduw(base, $mem$$disp, dst);
5466 }
5467 %}
5468 ins_pipe(iload_mem);
5469 %}
5470
5471 // Load Klass Pointer
5472 instruct loadKlass(iRegP dst, memory mem) %{
5473 match(Set dst (LoadKlass mem));
5474 predicate(!n->in(MemNode::Address)->bottom_type()->is_ptr_to_narrowoop());
5475 ins_cost(MEMORY_REF_COST);
5476 size(4);
5477
5478 #ifndef _LP64
5479 format %{ "LDUW $mem,$dst\t! klass ptr" %}
5480 opcode(Assembler::lduw_op3, 0, REGP_OP);
5481 #else
5482 format %{ "LDX $mem,$dst\t! klass ptr" %}
5483 opcode(Assembler::ldx_op3, 0, REGP_OP);
5484 #endif
5485 ins_encode( form3_mem_reg( mem, dst ) );
5486 ins_pipe(iload_mem);
5487 %}
5488
5489 // Load Klass Pointer
5490 instruct loadKlassComp(iRegP dst, memory mem) %{
5491 match(Set dst (LoadKlass mem));
5492 predicate(n->in(MemNode::Address)->bottom_type()->is_ptr_to_narrowoop());
5493 ins_cost(MEMORY_REF_COST);
5494
5495 format %{ "LDUW $mem,$dst\t! compressed klass ptr" %}
5496
5497 ins_encode %{
5498 Register base = as_Register($mem$$base);
5499 Register index = as_Register($mem$$index);
5500 Register dst = $dst$$Register;
5501 if (index != G0) {
5502 __ lduw(base, index, dst);
5503 } else {
5504 __ lduw(base, $mem$$disp, dst);
5505 }
5506 // klass oop never null but this is generated for nonheader klass loads
5507 // too which can be null.
5508 __ decode_heap_oop(dst);
5509 %}
5510 ins_pipe(iload_mem);
5511 %}
5512
|