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 }