Mercurial > hg > truffle
comparison src/share/vm/c1x/c1x_VMExits.cpp @ 1422:3483ec571caf
* using reflected objects instead of oops
* removed scratch from allocatable registers
* instanceof xir snippet
* arraylength xir snippet
* exceptionobject xir snippet
* VMEntries and VMExits as interfaces
* calls to VMEntries and VMExits are routet through logging proxies
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Mon, 02 Aug 2010 15:44:38 -0700 |
parents | 6223633ce7dd |
children | 760213a60e8b |
comparison
equal
deleted
inserted
replaced
1421:6223633ce7dd | 1422:3483ec571caf |
---|---|
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 # include "incls/_precompiled.incl" | 25 # include "incls/_precompiled.incl" |
26 # include "incls/_c1x_VMExits.cpp.incl" | 26 # include "incls/_c1x_VMExits.cpp.incl" |
27 /* | |
28 jobject OopCache::handles = NULL; | |
29 jobject OopCache::mirrors = NULL; | |
30 int OopCache::capacity = 0; | |
31 int OopCache::used = 0; | |
32 | 27 |
33 void initialize() { | |
34 | |
35 } | |
36 static Handle mirror(oop internal_object); | |
37 static Handle resolve(oop mirror); | |
38 | |
39 */ | |
40 KlassHandle VMExits::_vmExitsKlass; | 28 KlassHandle VMExits::_vmExitsKlass; |
41 Handle VMExits::_vmExitsObject; | 29 Handle VMExits::_vmExitsObject; |
42 | 30 |
43 KlassHandle &VMExits::vmExitsKlass() { | 31 KlassHandle &VMExits::vmExitsKlass() { |
44 if (_vmExitsKlass.is_null()) { | 32 if (_vmExitsKlass.is_null()) { |
61 _vmExitsObject = res; | 49 _vmExitsObject = res; |
62 } | 50 } |
63 return _vmExitsObject; | 51 return _vmExitsObject; |
64 } | 52 } |
65 | 53 |
66 void VMExits::compileMethod(oop method, int entry_bci) { | 54 void VMExits::compileMethod(methodOop method, int entry_bci) { |
67 assert(method != NULL, "just checking"); | 55 assert(method != NULL, "just checking"); |
56 oop reflected_method = C1XObjects::getReflectedMethod(method, Thread::current()); | |
68 JavaValue result(T_VOID); | 57 JavaValue result(T_VOID); |
69 JavaCallArguments args; | 58 JavaCallArguments args; |
70 args.push_oop(instance()); | 59 args.push_oop(instance()); |
71 args.push_oop(method); | 60 args.push_oop(reflected_method); |
72 args.push_int(entry_bci); | 61 args.push_int(entry_bci); |
73 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::compileMethod_name(), vmSymbols::compileMethod_signature(), &args, Thread::current()); | 62 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::compileMethod_name(), vmSymbols::compileMethod_signature(), &args, Thread::current()); |
74 check_pending_exception("Error while calling compileMethod"); | 63 check_pending_exception("Error while calling compileMethod"); |
75 } | 64 } |
76 | 65 |
77 oop VMExits::createRiMethod(methodOop m) { | 66 oop VMExits::createRiMethod(methodOop m, TRAPS) { |
78 assert(m != NULL, "just checking"); | 67 assert(m != NULL, "just checking"); |
68 oop reflected_method = C1XObjects::getReflectedMethod(m, CHECK_0); | |
79 JavaValue result(T_OBJECT); | 69 JavaValue result(T_OBJECT); |
80 JavaCallArguments args; | 70 JavaCallArguments args; |
81 args.push_oop(instance()); | 71 args.push_oop(instance()); |
82 args.push_oop(m); | 72 args.push_oop(reflected_method); |
83 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiMethod_name(), vmSymbols::createRiMethod_signature(), &args, Thread::current()); | 73 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiMethod_name(), vmSymbols::createRiMethod_signature(), &args, THREAD); |
84 check_pending_exception("Error while calling createRiMethod"); | 74 check_pending_exception("Error while calling createRiMethod"); |
85 return (oop)result.get_jobject(); | 75 return (oop)result.get_jobject(); |
86 } | 76 } |
87 | 77 |
88 oop VMExits::createRiField(oop field_holder, symbolOop field_name, oop field_type, int index) { | 78 oop VMExits::createRiField(oop field_holder, symbolOop field_name, oop field_type, int index, TRAPS) { |
89 assert(field_holder != NULL && field_name != NULL && field_type != NULL, "just checking"); | 79 assert(field_holder != NULL && field_name != NULL && field_type != NULL, "just checking"); |
80 oop name = C1XObjects::getReflectedSymbol(field_name, CHECK_0); | |
90 JavaValue result(T_OBJECT); | 81 JavaValue result(T_OBJECT); |
91 JavaCallArguments args; | 82 JavaCallArguments args; |
92 args.push_oop(instance()); | 83 args.push_oop(instance()); |
93 args.push_oop(field_holder); | 84 args.push_oop(field_holder); |
94 args.push_oop(field_name); | 85 args.push_oop(name); |
95 args.push_oop(field_type); | 86 args.push_oop(field_type); |
96 args.push_int(index); | 87 args.push_int(index); |
97 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiField_name(), vmSymbols::createRiField_signature(), &args, Thread::current()); | 88 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiField_name(), vmSymbols::createRiField_signature(), &args, THREAD); |
98 check_pending_exception("Error while calling createRiField"); | 89 check_pending_exception("Error while calling createRiField"); |
99 return (oop)result.get_jobject(); | 90 return (oop)result.get_jobject(); |
100 } | 91 } |
101 | 92 |
102 oop VMExits::createRiType(klassOop k) { | 93 oop VMExits::createRiType(klassOop k, TRAPS) { |
103 assert(k != NULL, "just checking"); | 94 assert(k != NULL, "just checking"); |
104 JavaValue result(T_OBJECT); | 95 JavaValue result(T_OBJECT); |
105 JavaCallArguments args; | 96 JavaCallArguments args; |
106 args.push_oop(instance()); | 97 args.push_oop(instance()); |
107 args.push_oop(k); | 98 args.push_oop(C1XObjects::getReflectedClass(k)); |
108 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiType_name(), vmSymbols::createRiType_signature(), &args, Thread::current()); | 99 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiType_name(), vmSymbols::createRiType_signature(), &args, THREAD); |
109 check_pending_exception("Error while calling createRiType"); | 100 check_pending_exception("Error while calling createRiType"); |
110 return (oop)result.get_jobject(); | 101 return (oop)result.get_jobject(); |
111 } | 102 } |
112 | 103 |
113 oop VMExits::createRiTypePrimitive(int basic_type) { | 104 oop VMExits::createRiTypePrimitive(int basic_type, TRAPS) { |
114 JavaValue result(T_OBJECT); | 105 JavaValue result(T_OBJECT); |
115 JavaCallArguments args; | 106 JavaCallArguments args; |
116 args.push_oop(instance()); | 107 args.push_oop(instance()); |
117 args.push_int(basic_type); | 108 args.push_int(basic_type); |
118 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiTypePrimitive_name(), vmSymbols::createRiTypePrimitive_signature(), &args, Thread::current()); | 109 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiTypePrimitive_name(), vmSymbols::createRiTypePrimitive_signature(), &args, THREAD); |
119 check_pending_exception("Error while calling createRiTypePrimitive"); | 110 check_pending_exception("Error while calling createRiTypePrimitive"); |
120 return (oop)result.get_jobject(); | 111 return (oop)result.get_jobject(); |
121 } | 112 } |
122 | 113 |
123 oop VMExits::createRiTypeUnresolved(symbolOop name, klassOop accessor) { | 114 oop VMExits::createRiTypeUnresolved(symbolOop name, klassOop accessor, TRAPS) { |
124 // assert(name != NULL && accessor != NULL, "just checking"); | 115 // assert(name != NULL && accessor != NULL, "just checking"); |
125 JavaValue result(T_OBJECT); | 116 JavaValue result(T_OBJECT); |
126 JavaCallArguments args; | 117 JavaCallArguments args; |
127 args.push_oop(instance()); | 118 args.push_oop(instance()); |
128 args.push_oop(name); | 119 args.push_oop(C1XObjects::getReflectedSymbol(name, THREAD)); |
129 args.push_oop(accessor); | 120 args.push_oop(C1XObjects::getReflectedClass(accessor)); |
130 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiTypeUnresolved_name(), vmSymbols::createRiTypeUnresolved_signature(), &args, Thread::current()); | 121 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiTypeUnresolved_name(), vmSymbols::createRiTypeUnresolved_signature(), &args, THREAD); |
131 check_pending_exception("Error while calling createRiTypeUnresolved"); | 122 check_pending_exception("Error while calling createRiTypeUnresolved"); |
132 return (oop)result.get_jobject(); | 123 return (oop)result.get_jobject(); |
133 } | 124 } |
134 | 125 |
135 oop VMExits::createRiConstantPool(constantPoolOop cp) { | 126 oop VMExits::createRiConstantPool(constantPoolOop cp, TRAPS) { |
136 assert(cp != NULL, "just checking"); | 127 assert(cp != NULL, "just checking"); |
137 JavaValue result(T_OBJECT); | 128 JavaValue result(T_OBJECT); |
138 JavaCallArguments args; | 129 JavaCallArguments args; |
139 args.push_oop(instance()); | 130 args.push_oop(instance()); |
140 args.push_oop(cp); | 131 args.push_oop(C1XObjects::getReflectedClass(cp->klass())); |
141 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiConstantPool_name(), vmSymbols::createRiConstantPool_signature(), &args, Thread::current()); | 132 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiConstantPool_name(), vmSymbols::createRiConstantPool_signature(), &args, THREAD); |
142 check_pending_exception("Error while calling createRiConstantPool"); | 133 check_pending_exception("Error while calling createRiConstantPool"); |
143 return (oop)result.get_jobject(); | 134 return (oop)result.get_jobject(); |
144 } | 135 } |
145 | 136 |
146 oop VMExits::createRiSignature(symbolOop symbol) { | 137 oop VMExits::createRiSignature(symbolOop symbol, TRAPS) { |
147 assert(symbol != NULL, "just checking"); | 138 assert(symbol != NULL, "just checking"); |
148 JavaValue result(T_OBJECT); | 139 JavaValue result(T_OBJECT); |
149 JavaCallArguments args; | 140 JavaCallArguments args; |
150 args.push_oop(instance()); | 141 args.push_oop(instance()); |
151 args.push_oop(symbol); | 142 args.push_oop(C1XObjects::getReflectedSymbol(symbol, THREAD)); |
152 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiSignature_name(), vmSymbols::createRiSignature_signature(), &args, Thread::current()); | 143 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createRiSignature_name(), vmSymbols::createRiSignature_signature(), &args, THREAD); |
153 check_pending_exception("Error while calling createRiSignature"); | 144 check_pending_exception("Error while calling createRiSignature"); |
154 return (oop)result.get_jobject(); | 145 return (oop)result.get_jobject(); |
155 } | 146 } |
156 | 147 |
157 oop VMExits::createCiConstantInt(jint value) { | 148 oop VMExits::createCiConstantInt(jint value, TRAPS) { |
158 JavaValue result(T_OBJECT); | 149 JavaValue result(T_OBJECT); |
159 JavaCallArguments args; | 150 JavaCallArguments args; |
160 args.push_oop(instance()); | 151 args.push_oop(instance()); |
161 args.push_int(value); | 152 args.push_int(value); |
162 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantInt_name(), vmSymbols::createCiConstantInt_signature(), &args, Thread::current()); | 153 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantInt_name(), vmSymbols::createCiConstantInt_signature(), &args, THREAD); |
163 check_pending_exception("Error while calling createCiConstantInt"); | 154 check_pending_exception("Error while calling createCiConstantInt"); |
164 return (oop)result.get_jobject(); | 155 return (oop)result.get_jobject(); |
165 | 156 |
166 } | 157 } |
167 | 158 |
168 oop VMExits::createCiConstantLong(jlong value) { | 159 oop VMExits::createCiConstantLong(jlong value, TRAPS) { |
169 JavaValue result(T_OBJECT); | 160 JavaValue result(T_OBJECT); |
170 JavaCallArguments args; | 161 JavaCallArguments args; |
171 args.push_oop(instance()); | 162 args.push_oop(instance()); |
172 args.push_long(value); | 163 args.push_long(value); |
173 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantLong_name(), vmSymbols::createCiConstantLong_signature(), &args, Thread::current()); | 164 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantLong_name(), vmSymbols::createCiConstantLong_signature(), &args, THREAD); |
174 check_pending_exception("Error while calling createCiConstantFloat"); | 165 check_pending_exception("Error while calling createCiConstantFloat"); |
175 return (oop)result.get_jobject(); | 166 return (oop)result.get_jobject(); |
176 | 167 |
177 } | 168 } |
178 | 169 |
179 oop VMExits::createCiConstantFloat(jfloat value) { | 170 oop VMExits::createCiConstantFloat(jfloat value, TRAPS) { |
180 JavaValue result(T_OBJECT); | 171 JavaValue result(T_OBJECT); |
181 JavaCallArguments args; | 172 JavaCallArguments args; |
182 args.push_oop(instance()); | 173 args.push_oop(instance()); |
183 args.push_float(value); | 174 args.push_float(value); |
184 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantFloat_name(), vmSymbols::createCiConstantFloat_signature(), &args, Thread::current()); | 175 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantFloat_name(), vmSymbols::createCiConstantFloat_signature(), &args, THREAD); |
185 check_pending_exception("Error while calling createCiConstantFloat"); | 176 check_pending_exception("Error while calling createCiConstantFloat"); |
186 return (oop)result.get_jobject(); | 177 return (oop)result.get_jobject(); |
187 | 178 |
188 } | 179 } |
189 | 180 |
190 oop VMExits::createCiConstantDouble(jdouble value) { | 181 oop VMExits::createCiConstantDouble(jdouble value, TRAPS) { |
191 JavaValue result(T_OBJECT); | 182 JavaValue result(T_OBJECT); |
192 JavaCallArguments args; | 183 JavaCallArguments args; |
193 args.push_oop(instance()); | 184 args.push_oop(instance()); |
194 args.push_double(value); | 185 args.push_double(value); |
195 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantDouble_name(), vmSymbols::createCiConstantDouble_signature(), &args, Thread::current()); | 186 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantDouble_name(), vmSymbols::createCiConstantDouble_signature(), &args, THREAD); |
196 check_pending_exception("Error while calling createCiConstantDouble"); | 187 check_pending_exception("Error while calling createCiConstantDouble"); |
197 return (oop)result.get_jobject(); | 188 return (oop)result.get_jobject(); |
198 } | 189 } |
199 | 190 |
200 oop VMExits::createCiConstantObject(oop value) { | 191 oop VMExits::createCiConstantObject(oop value, TRAPS) { |
201 JavaValue result(T_OBJECT); | 192 JavaValue result(T_OBJECT); |
202 JavaCallArguments args; | 193 JavaCallArguments args; |
203 args.push_oop(instance()); | 194 args.push_oop(instance()); |
204 args.push_oop(value); | 195 args.push_oop(value); |
205 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantObject_name(), vmSymbols::createCiConstantObject_signature(), &args, Thread::current()); | 196 JavaCalls::call_interface(&result, vmExitsKlass(), vmSymbols::createCiConstantObject_name(), vmSymbols::createCiConstantObject_signature(), &args, THREAD); |
206 check_pending_exception("Error while calling createCiConstantObject"); | 197 check_pending_exception("Error while calling createCiConstantObject"); |
207 return (oop)result.get_jobject(); | 198 return (oop)result.get_jobject(); |
208 } | 199 } |