Mercurial > hg > graal-jvmci-8
comparison src/cpu/sparc/vm/icBuffer_sparc.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | f95d63e2154a |
children | f0c2369fda5a |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
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 } |