Mercurial > hg > graal-compiler
comparison src/cpu/x86/vm/assembler_x86.hpp @ 1047:beb8f45ee9f0
6889740: G1: OpenDS fails with "unhandled exception in compiled code"
Summary: Incorrect code was being generated for the store operation in the null case of the aastore bytecode template. The bad code was generated by the store_heap_oop routine which takes a Register as its second argument. Passing NULL_WORD (0) as the second argument causes the value to be converted to Register(0), which is rax. Thus the generated store was "mov (dst), $rax" instead of "mov (dst), $0x0". Changed calls to store_heap_oop that pass NULL_WORD as the second argument to a new routine store_heap_oop_null.
Reviewed-by: kvn, twisti
author | johnc |
---|---|
date | Thu, 29 Oct 2009 09:42:26 -0700 |
parents | 62001a362ce9 |
children | 2f1ec89b9995 |
comparison
equal
deleted
inserted
replaced
1046:72a6752ac432 | 1047:beb8f45ee9f0 |
---|---|
1680 #ifdef _LP64 | 1680 #ifdef _LP64 |
1681 void store_klass_gap(Register dst, Register src); | 1681 void store_klass_gap(Register dst, Register src); |
1682 | 1682 |
1683 void load_heap_oop(Register dst, Address src); | 1683 void load_heap_oop(Register dst, Address src); |
1684 void store_heap_oop(Address dst, Register src); | 1684 void store_heap_oop(Address dst, Register src); |
1685 | |
1686 // This dummy is to prevent a call to store_heap_oop from | |
1687 // converting a zero (like NULL) into a Register by giving | |
1688 // the compiler two choices it can't resolve | |
1689 | |
1690 void store_heap_oop(Address dst, void* dummy); | |
1691 | |
1692 // Used for storing NULL. All other oop constants should be | |
1693 // stored using routines that take a jobject. | |
1694 void store_heap_oop_null(Address dst); | |
1695 | |
1685 void encode_heap_oop(Register r); | 1696 void encode_heap_oop(Register r); |
1686 void decode_heap_oop(Register r); | 1697 void decode_heap_oop(Register r); |
1687 void encode_heap_oop_not_null(Register r); | 1698 void encode_heap_oop_not_null(Register r); |
1688 void decode_heap_oop_not_null(Register r); | 1699 void decode_heap_oop_not_null(Register r); |
1689 void encode_heap_oop_not_null(Register dst, Register src); | 1700 void encode_heap_oop_not_null(Register dst, Register src); |