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 }