Mercurial > hg > graal-compiler
comparison src/cpu/x86/vm/assembler_x86.cpp @ 2464:d86923d96dca
7034967: C1: assert(false) failed: error (assembler_sparc.cpp:2043)
Summary: Fix -XX:+VerifyOops
Reviewed-by: kvn, never
author | iveresov |
---|---|
date | Fri, 08 Apr 2011 17:03:31 -0700 |
parents | 09f96c3ff1ad |
children | 15c9a0e16269 5d046bf49ce7 |
comparison
equal
deleted
inserted
replaced
2463:3f49d30f8184 | 2464:d86923d96dca |
---|---|
7939 #ifdef _LP64 | 7939 #ifdef _LP64 |
7940 push(rscratch1); // save r10, trashed by movptr() | 7940 push(rscratch1); // save r10, trashed by movptr() |
7941 #endif | 7941 #endif |
7942 push(rax); // save rax, | 7942 push(rax); // save rax, |
7943 // addr may contain rsp so we will have to adjust it based on the push | 7943 // addr may contain rsp so we will have to adjust it based on the push |
7944 // we just did | 7944 // we just did (and on 64 bit we do two pushes) |
7945 // NOTE: 64bit seemed to have had a bug in that it did movq(addr, rax); which | 7945 // NOTE: 64bit seemed to have had a bug in that it did movq(addr, rax); which |
7946 // stores rax into addr which is backwards of what was intended. | 7946 // stores rax into addr which is backwards of what was intended. |
7947 if (addr.uses(rsp)) { | 7947 if (addr.uses(rsp)) { |
7948 lea(rax, addr); | 7948 lea(rax, addr); |
7949 pushptr(Address(rax, BytesPerWord)); | 7949 pushptr(Address(rax, LP64_ONLY(2 *) BytesPerWord)); |
7950 } else { | 7950 } else { |
7951 pushptr(addr); | 7951 pushptr(addr); |
7952 } | 7952 } |
7953 | 7953 |
7954 ExternalAddress buffer((address) b); | 7954 ExternalAddress buffer((address) b); |
8394 } else | 8394 } else |
8395 #endif | 8395 #endif |
8396 movptr(dst, src); | 8396 movptr(dst, src); |
8397 } | 8397 } |
8398 | 8398 |
8399 // Doesn't do verfication, generates fixed size code | |
8400 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src) { | |
8401 #ifdef _LP64 | |
8402 if (UseCompressedOops) { | |
8403 movl(dst, src); | |
8404 decode_heap_oop_not_null(dst); | |
8405 } else | |
8406 #endif | |
8407 movptr(dst, src); | |
8408 } | |
8409 | |
8399 void MacroAssembler::store_heap_oop(Address dst, Register src) { | 8410 void MacroAssembler::store_heap_oop(Address dst, Register src) { |
8400 #ifdef _LP64 | 8411 #ifdef _LP64 |
8401 if (UseCompressedOops) { | 8412 if (UseCompressedOops) { |
8402 assert(!dst.uses(src), "not enough registers"); | 8413 assert(!dst.uses(src), "not enough registers"); |
8403 encode_heap_oop(src); | 8414 encode_heap_oop(src); |