Mercurial > hg > truffle
comparison src/cpu/x86/vm/x86_64.ad @ 163:885ed790ecf0
6695810: null oop passed to encode_heap_oop_not_null
Summary: fix several problems in C2 related to Escape Analysis and Compressed Oops.
Reviewed-by: never, jrose
author | kvn |
---|---|
date | Wed, 21 May 2008 10:45:07 -0700 |
parents | f3de1255b035 |
children | c436414a719e |
comparison
equal
deleted
inserted
replaced
162:8aa010f60e0f | 163:885ed790ecf0 |
---|---|
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 %{ |
6356 __ xorq(dst, dst); | 6356 __ xorq(dst, dst); |
6357 %} | 6357 %} |
6358 ins_pipe(ialu_reg); | 6358 ins_pipe(ialu_reg); |
6359 %} | 6359 %} |
6360 | 6360 |
6361 instruct loadConN(rRegN dst, immN src) %{ | 6361 instruct loadConN(rRegN dst, immN src, rFlagsReg cr) %{ |
6362 match(Set dst src); | 6362 match(Set dst src); |
6363 effect(KILL cr); | |
6363 | 6364 |
6364 ins_cost(125); | 6365 ins_cost(125); |
6365 format %{ "movq $dst, $src\t# compressed ptr\n\t" | 6366 format %{ "movq $dst, $src\t# compressed ptr\n\t" |
6366 "encode_heap_oop_not_null $dst,$dst" %} | 6367 "encode_heap_oop_not_null $dst,$dst" %} |
6367 ins_encode %{ | 6368 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); |