hotspot/src/share/vm/classfile/vmSymbols.cpp
changeset 4567 7fc02fbe5c7a
parent 4562 5d93cb2d2090
child 5547 f4b087cbb361
--- a/hotspot/src/share/vm/classfile/vmSymbols.cpp	Tue Jan 05 13:05:58 2010 +0100
+++ b/hotspot/src/share/vm/classfile/vmSymbols.cpp	Tue Jan 05 15:21:25 2010 +0100
@@ -299,6 +299,20 @@
   return wrapper_intrinsic(type, true);
 }
 
+vmIntrinsics::ID vmIntrinsics::for_raw_conversion(BasicType src, BasicType dest) {
+#define SRC_DEST(s,d) (((int)(s) << 4) + (int)(d))
+  switch (SRC_DEST(src, dest)) {
+  case SRC_DEST(T_INT, T_FLOAT):   return vmIntrinsics::_intBitsToFloat;
+  case SRC_DEST(T_FLOAT, T_INT):   return vmIntrinsics::_floatToRawIntBits;
+
+  case SRC_DEST(T_LONG, T_DOUBLE): return vmIntrinsics::_longBitsToDouble;
+  case SRC_DEST(T_DOUBLE, T_LONG): return vmIntrinsics::_doubleToRawLongBits;
+  }
+#undef SRC_DEST
+
+  return vmIntrinsics::_none;
+}
+
 methodOop vmIntrinsics::method_for(vmIntrinsics::ID id) {
   if (id == _none)  return NULL;
   symbolOop cname = vmSymbols::symbol_at(class_for(id));