Mercurial > hg > truffle
comparison src/cpu/sparc/vm/icBuffer_sparc.cpp @ 7066:7d815d842ee0
Merge.
author | Christian Haeubl <haeubl@ssw.jku.at> |
---|---|
date | Fri, 23 Nov 2012 11:50:27 +0100 |
parents | da91efe96a93 |
children | f0c2369fda5a |
comparison
equal
deleted
inserted
replaced
7065:cfacf5d5bade | 7066:7d815d842ee0 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
43 if (TraceJumps) return 300 * wordSize; | 43 if (TraceJumps) return 300 * wordSize; |
44 return (2+2+ 1) * wordSize + 1; // set/jump_to/nop + 1 byte so that code_end can be set in CodeBuffer | 44 return (2+2+ 1) * wordSize + 1; // set/jump_to/nop + 1 byte so that code_end can be set in CodeBuffer |
45 #endif | 45 #endif |
46 } | 46 } |
47 | 47 |
48 void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, oop cached_oop, address entry_point) { | 48 void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, void* cached_value, address entry_point) { |
49 ResourceMark rm; | 49 ResourceMark rm; |
50 CodeBuffer code(code_begin, ic_stub_code_size()); | 50 CodeBuffer code(code_begin, ic_stub_code_size()); |
51 MacroAssembler* masm = new MacroAssembler(&code); | 51 MacroAssembler* masm = new MacroAssembler(&code); |
52 // note: even though the code contains an embedded oop, we do not need reloc info | 52 // note: even though the code contains an embedded metadata, we do not need reloc info |
53 // because | 53 // because |
54 // (1) the oop is old (i.e., doesn't matter for scavenges) | 54 // (1) the metadata is old (i.e., doesn't matter for scavenges) |
55 // (2) these ICStubs are removed *before* a GC happens, so the roots disappear | 55 // (2) these ICStubs are removed *before* a GC happens, so the roots disappear |
56 assert(cached_oop == NULL || cached_oop->is_perm(), "must be old oop"); | 56 AddressLiteral cached_value_addrlit((address)cached_value, relocInfo::none); |
57 AddressLiteral cached_oop_addrlit(cached_oop, relocInfo::none); | |
58 // Force the set to generate the fixed sequence so next_instruction_address works | 57 // Force the set to generate the fixed sequence so next_instruction_address works |
59 masm->patchable_set(cached_oop_addrlit, G5_inline_cache_reg); | 58 masm->patchable_set(cached_value_addrlit, G5_inline_cache_reg); |
60 assert(G3_scratch != G5_method, "Do not clobber the method oop in the transition stub"); | 59 assert(G3_scratch != G5_method, "Do not clobber the method oop in the transition stub"); |
61 assert(G3_scratch != G5_inline_cache_reg, "Do not clobber the inline cache register in the transition stub"); | 60 assert(G3_scratch != G5_inline_cache_reg, "Do not clobber the inline cache register in the transition stub"); |
62 AddressLiteral entry(entry_point); | 61 AddressLiteral entry(entry_point); |
63 masm->JUMP(entry, G3_scratch, 0); | 62 masm->JUMP(entry, G3_scratch, 0); |
64 masm->delayed()->nop(); | 63 masm->delayed()->nop(); |
71 NativeJump* jump = nativeJump_at(move->next_instruction_address()); | 70 NativeJump* jump = nativeJump_at(move->next_instruction_address()); |
72 return jump->jump_destination(); | 71 return jump->jump_destination(); |
73 } | 72 } |
74 | 73 |
75 | 74 |
76 oop InlineCacheBuffer::ic_buffer_cached_oop(address code_begin) { | 75 void* InlineCacheBuffer::ic_buffer_cached_value(address code_begin) { |
77 NativeMovConstReg* move = nativeMovConstReg_at(code_begin); // creation also verifies the object | 76 NativeMovConstReg* move = nativeMovConstReg_at(code_begin); // creation also verifies the object |
78 NativeJump* jump = nativeJump_at(move->next_instruction_address()); | 77 NativeJump* jump = nativeJump_at(move->next_instruction_address()); |
79 return (oop)move->data(); | 78 void* o = (void*)move->data(); |
79 return o; | |
80 } | 80 } |