281 BASIC_TYPE_CASE(T_BYTE, _Byte_valueOf, _byteValue);
282 BASIC_TYPE_CASE(T_CHAR, _Character_valueOf, _charValue);
283 BASIC_TYPE_CASE(T_SHORT, _Short_valueOf, _shortValue);
284 BASIC_TYPE_CASE(T_INT, _Integer_valueOf, _intValue);
285 BASIC_TYPE_CASE(T_LONG, _Long_valueOf, _longValue);
286 BASIC_TYPE_CASE(T_FLOAT, _Float_valueOf, _floatValue);
287 BASIC_TYPE_CASE(T_DOUBLE, _Double_valueOf, _doubleValue);
288 #undef BASIC_TYPE_CASE
289 }
290 #undef TYPE2
291 return vmIntrinsics::_none;
292 }
293
294 vmIntrinsics::ID vmIntrinsics::for_boxing(BasicType type) {
295 return wrapper_intrinsic(type, false);
296 }
297 vmIntrinsics::ID vmIntrinsics::for_unboxing(BasicType type) {
298 return wrapper_intrinsic(type, true);
299 }
300
301 methodOop vmIntrinsics::method_for(vmIntrinsics::ID id) {
302 if (id == _none) return NULL;
303 symbolOop cname = vmSymbols::symbol_at(class_for(id));
304 symbolOop mname = vmSymbols::symbol_at(name_for(id));
305 symbolOop msig = vmSymbols::symbol_at(signature_for(id));
306 if (cname == NULL || mname == NULL || msig == NULL) return NULL;
307 klassOop k = SystemDictionary::find_well_known_klass(cname);
308 if (k == NULL) return NULL;
309 return instanceKlass::cast(k)->find_method(mname, msig);
310 }
311
312
313 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0"
314 static const char* vm_intrinsic_name_bodies =
315 VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE,
316 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE);
317
318 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT];
319
320 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) {
|
281 BASIC_TYPE_CASE(T_BYTE, _Byte_valueOf, _byteValue);
282 BASIC_TYPE_CASE(T_CHAR, _Character_valueOf, _charValue);
283 BASIC_TYPE_CASE(T_SHORT, _Short_valueOf, _shortValue);
284 BASIC_TYPE_CASE(T_INT, _Integer_valueOf, _intValue);
285 BASIC_TYPE_CASE(T_LONG, _Long_valueOf, _longValue);
286 BASIC_TYPE_CASE(T_FLOAT, _Float_valueOf, _floatValue);
287 BASIC_TYPE_CASE(T_DOUBLE, _Double_valueOf, _doubleValue);
288 #undef BASIC_TYPE_CASE
289 }
290 #undef TYPE2
291 return vmIntrinsics::_none;
292 }
293
294 vmIntrinsics::ID vmIntrinsics::for_boxing(BasicType type) {
295 return wrapper_intrinsic(type, false);
296 }
297 vmIntrinsics::ID vmIntrinsics::for_unboxing(BasicType type) {
298 return wrapper_intrinsic(type, true);
299 }
300
301 vmIntrinsics::ID vmIntrinsics::for_raw_conversion(BasicType src, BasicType dest) {
302 #define SRC_DEST(s,d) (((int)(s) << 4) + (int)(d))
303 switch (SRC_DEST(src, dest)) {
304 case SRC_DEST(T_INT, T_FLOAT): return vmIntrinsics::_intBitsToFloat;
305 case SRC_DEST(T_FLOAT, T_INT): return vmIntrinsics::_floatToRawIntBits;
306
307 case SRC_DEST(T_LONG, T_DOUBLE): return vmIntrinsics::_longBitsToDouble;
308 case SRC_DEST(T_DOUBLE, T_LONG): return vmIntrinsics::_doubleToRawLongBits;
309 }
310 #undef SRC_DEST
311
312 return vmIntrinsics::_none;
313 }
314
315 methodOop vmIntrinsics::method_for(vmIntrinsics::ID id) {
316 if (id == _none) return NULL;
317 symbolOop cname = vmSymbols::symbol_at(class_for(id));
318 symbolOop mname = vmSymbols::symbol_at(name_for(id));
319 symbolOop msig = vmSymbols::symbol_at(signature_for(id));
320 if (cname == NULL || mname == NULL || msig == NULL) return NULL;
321 klassOop k = SystemDictionary::find_well_known_klass(cname);
322 if (k == NULL) return NULL;
323 return instanceKlass::cast(k)->find_method(mname, msig);
324 }
325
326
327 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0"
328 static const char* vm_intrinsic_name_bodies =
329 VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE,
330 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE);
331
332 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT];
333
334 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) {
|