Mercurial > hg > truffle
comparison src/cpu/sparc/vm/methodHandles_sparc.cpp @ 710:e5b0439ef4ae
6655638: dynamic languages need method handles
Summary: initial implementation, with known omissions (x86/64, sparc, compiler optim., c-oops, C++ interp.)
Reviewed-by: kvn, twisti, never
author | jrose |
---|---|
date | Wed, 08 Apr 2009 10:56:49 -0700 |
parents | |
children | c640000b7cc1 |
comparison
equal
deleted
inserted
replaced
709:1d037ecd7960 | 710:e5b0439ef4ae |
---|---|
1 /* | |
2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
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 | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
20 * CA 95054 USA or visit www.sun.com if you need additional information or | |
21 * have any questions. | |
22 * | |
23 */ | |
24 | |
25 #include "incls/_precompiled.incl" | |
26 #include "incls/_methodHandles_sparc.cpp.incl" | |
27 | |
28 #define __ _masm-> | |
29 | |
30 address MethodHandleEntry::start_compiled_entry(MacroAssembler* _masm, | |
31 address interpreted_entry) { | |
32 __ align(wordSize); | |
33 address target = __ pc() + sizeof(Data); | |
34 while (__ pc() < target) { | |
35 __ nop(); | |
36 __ align(wordSize); | |
37 } | |
38 | |
39 MethodHandleEntry* me = (MethodHandleEntry*) __ pc(); | |
40 me->set_end_address(__ pc()); // set a temporary end_address | |
41 me->set_from_interpreted_entry(interpreted_entry); | |
42 me->set_type_checking_entry(NULL); | |
43 | |
44 return (address) me; | |
45 } | |
46 | |
47 MethodHandleEntry* MethodHandleEntry::finish_compiled_entry(MacroAssembler* _masm, | |
48 address start_addr) { | |
49 MethodHandleEntry* me = (MethodHandleEntry*) start_addr; | |
50 assert(me->end_address() == start_addr, "valid ME"); | |
51 | |
52 // Fill in the real end_address: | |
53 __ align(wordSize); | |
54 me->set_end_address(__ pc()); | |
55 | |
56 return me; | |
57 } | |
58 | |
59 | |
60 // Code generation | |
61 address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler* _masm) { | |
62 ShouldNotReachHere(); //NYI, 6815692 | |
63 return NULL; | |
64 } | |
65 | |
66 // Generate an "entry" field for a method handle. | |
67 // This determines how the method handle will respond to calls. | |
68 void MethodHandles::generate_method_handle_stub(MacroAssembler* _masm, MethodHandles::EntryKind ek) { | |
69 ShouldNotReachHere(); //NYI, 6815692 | |
70 } |