Index: osprey/be/cg/whirl2ops.cxx
===================================================================
--- osprey/be/cg/whirl2ops.cxx	(revision 3716)
+++ osprey/be/cg/whirl2ops.cxx	(working copy)
@@ -919,6 +919,32 @@
 
 }
 
+/* Create a new TN for mtype with emulate longlong and float point */
+TN *Build_TN_Of_Mtype_Emulate(TYPE_ID mtype)
+{
+#ifdef TARG_SL
+#ifdef EMULATE_LONGLONG
+  if (MTYPE_is_longlong(mtype)) {
+    TYPE_ID new_mtype = (mtype == MTYPE_I8 ? MTYPE_I4 : MTYPE_U4);
+    TN *tn1 = Build_TN_Of_Mtype (new_mtype);
+    TN *tn2 = Build_TN_Of_Mtype (new_mtype);
+    Add_TN_Pair (tn1, tn2);
+    return tn1;
+  }
+#endif
+#ifdef EMULATE_FLOAT_POINT
+  if (mtype == MTYPE_F8) {
+    TN *tn1 = Build_TN_Of_Mtype(MTYPE_U4);
+    TN *tn2 = Build_TN_Of_Mtype(MTYPE_U4);
+    Add_TN_Pair (tn1, tn2);
+    return tn1;
+  } else if (mtype = MTYPE_F4) {
+    return Build_TN_Of_Mtype(MTYPE_U4);
+  }
+#endif
+#endif
+  return Build_TN_Of_Mtype(mtype);
+}
 
 /* Create a new result TN for the WHIRL node wn. We pass in the opnd_tn
  * array that contains the TNs allocated for each operand. This could
@@ -932,32 +958,11 @@
 {
 #ifdef TARG_SL
 
-#ifdef EMULATE_LONGLONG
-  TYPE_ID mtype = WN_rtype(wn);
-  if (MTYPE_is_longlong(mtype)) {
-    TYPE_ID new_mtype = (mtype == MTYPE_I8 ? MTYPE_I4 : MTYPE_U4);
-    TN *tn  = Build_TN_Of_Mtype (new_mtype);
-    TN *tn2 = Build_TN_Of_Mtype (new_mtype);
-    Add_TN_Pair (tn, tn2);
-    return tn;
-  }
-#endif
 
-#ifdef EMULATE_FLOAT_POINT
-  if (mtype == MTYPE_F8) {
-    TN *tn   = Build_TN_Of_Mtype(MTYPE_U4);
-    TN *pair = Build_TN_Of_Mtype(MTYPE_U4);
-    Add_TN_Pair (tn, pair);
-    return tn;
-  } else if (mtype = MTYPE_F4) {
-    return Build_TN_Of_Mtype(MTYPE_U4);
-  }
-#endif 
 
-  return Build_TN_Of_Mtype (mtype);
+  return Build_TN_Of_Mtype_Emulate(WN_rtype(wn));
+#else
 
-#else // !defined(TARG_SL)
-
 #ifdef EMULATE_LONGLONG
 
   TYPE_ID mtype = WN_rtype(wn);
@@ -2898,9 +2903,9 @@
     // for U8STBITS
     // allocate a larger TN if bit deposit may run out of range
     if(MTYPE_byte_size(rtype) > MTYPE_byte_size(WN_rtype(kid)))
-      field_tn = Build_TN_Of_Mtype (rtype);
+      field_tn = Build_TN_Of_Mtype_Emulate(rtype);
     else
-      field_tn = Allocate_Result_TN (kid, NULL);
+      field_tn = Allocate_Result_TN(kid, NULL);
     Last_Mem_OP = OPS_last(&New_OPs);
     Exp_Load(rtype, desc, field_tn, WN_st(stbits), WN_load_offset(stbits),
 	     &New_OPs, variant); // must do an unsigned load
@@ -2909,9 +2914,9 @@
     // for U8STBITS
     // allocate a larger TN if bit deposit may run out of range
     if(MTYPE_byte_size(rtype) > MTYPE_byte_size(WN_rtype(kid)))
-      result = Build_TN_Of_Mtype (rtype);
+      result = Build_TN_Of_Mtype_Emulate(rtype);
     else
-      result = Allocate_Result_TN (kid, NULL);
+      result = Allocate_Result_TN(kid, NULL);
   }
 
 #ifdef TARG_PPC32
@@ -3126,11 +3131,11 @@
   // for U8ISTBITS
   // allocate larger TNs if bit deposit may run out of range
   if(MTYPE_byte_size(rtype) > MTYPE_byte_size(WN_rtype(kid0))) {
-    result = Build_TN_Of_Mtype (rtype);
-    field_tn = Build_TN_Of_Mtype (rtype);
+    result = Build_TN_Of_Mtype_Emulate(rtype);
+    field_tn = Build_TN_Of_Mtype_Emulate(rtype);
   }else{
-    result = Allocate_Result_TN (kid0, NULL);
-    field_tn = Allocate_Result_TN (kid0, NULL);
+    result = Allocate_Result_TN(kid0, NULL);
+    field_tn = Allocate_Result_TN(kid0, NULL);
   }
 
   // guard against U1MPY or U2MPY
