static int
 hex_float (int float_type, char *bytes)
 {
-  int length;
+  int length, pad = 0;
   int i;
 
   switch (float_type)
 
     case 'x':
     case 'X':
-      length = 12;
+#ifdef X_PRECISION
+      length = X_PRECISION * sizeof (LITTLENUM_TYPE);
+      pad = X_PRECISION_PAD * sizeof (LITTLENUM_TYPE);
+      if (!length)
+#endif
+       length = 12;
       break;
 
     case 'p':
     case 'P':
-      length = 12;
+#ifdef P_PRECISION
+      length = P_PRECISION * sizeof (LITTLENUM_TYPE);
+      pad = P_PRECISION_PAD * sizeof (LITTLENUM_TYPE);
+      if (!length)
+#endif
+       length = 12;
       break;
 
     default:
        memset (bytes, 0, length - i);
     }
 
-  return length;
+  memset (bytes + length, 0, pad);
+
+  return length + pad;
 }
 
 /*                     float_cons()
 
  0030 00000000 0000a044 01000000 0000a044  .*
  0040 00000000 0000f03f 00000000 00000000  .*
  0050 ffffffff ffffffff ffffffff cccccccc  .*
+ 0060 00000000 00000080 fe3f0000 00000000  .*
+ 0070 00000080 fdbf0000 00000000 00000080  .*
+ 0080 ff030000 aaaaaaaa aaaaaaaa aaaaaaaa  .*
 
  0030 00000000 0000a044 01000000 0000a044  .*
  0040 00000000 0000f03f 00000000 00000000  .*
  0050 ffffffff ffffffff ffffffff ffffffff  .*
+ 0060 00000000 00000080 fe3f0000 00000000  .*
+ 0070 00000000 00000080 fdbf0000 00000000  .*
+ 0080 00000000 00000080 ff030000 00000000  .*
 
  0030 00000000 0000a044 01000000 0000a044  .*
  0040 00000000 0000f03f 00000000 00000000  .*
  0050 ffffffff ffffffff ffffcccc cccccccc  .*
+ 0060 00000000 00000080 fe3f0000 00000000  .*
+ 0070 0080fdbf 00000000 00000080 ff03aaaa  .*
 
 
        .ds.x 1, -1
        .p2align 4,0xcc
+
+       .tfloat 0x:3ffe80
+       .dc.x 0x:bffd80
+       .dcb.x 1, 0x:03ff80
+       .p2align 4,0xaa