extern void x86_cons_fix_new
 (fragS *, unsigned int, unsigned int, expressionS *, bfd_reloc_code_real_type);
 
+#define X_PRECISION     5
 #define X_PRECISION_PAD x86_tfloat_pad ()
 extern int x86_tfloat_pad (void);
 
 
 @item @samp{.l}
 Emits 4-byte values.
 @item @samp{.p}
-Emits 12-byte values.
+Emits values with size matching packed-decimal floating-point ones.
 @item @samp{.s}
 Emits 4-byte values.
 @item @samp{.w}
 Emits 2-byte values.
 @item @samp{.x}
-Emits 12-byte values.
+Emits values with size matching long double precision floating-point ones.
 @end table
 
 Note - unlike the @code{.dcb} directive the @samp{.d}, @samp{.s} and @samp{.x}
 
   {"ds.b", s_space, 1},
   {"ds.d", s_space, 8},
   {"ds.l", s_space, 4},
-  {"ds.p", s_space, 12},
+  {"ds.p", s_space, 'p'},
   {"ds.s", s_space, 4},
   {"ds.w", s_space, 2},
-  {"ds.x", s_space, 12},
+  {"ds.x", s_space, 'x'},
   {"debug", s_ignore, 0},
 #ifdef S_SET_DESC
   {"desc", s_desc, 0},
   md_flush_pending_output ();
 #endif
 
+  switch (mult)
+    {
+    case 'x':
+#ifdef X_PRECISION
+# ifndef P_PRECISION
+#  define P_PRECISION     X_PRECISION
+#  define P_PRECISION_PAD X_PRECISION_PAD
+# endif
+      mult = (X_PRECISION + X_PRECISION_PAD) * sizeof (LITTLENUM_TYPE);
+      if (!mult)
+#endif
+       mult = 12;
+      break;
+
+    case 'p':
+#ifdef P_PRECISION
+      mult = (P_PRECISION + P_PRECISION_PAD) * sizeof (LITTLENUM_TYPE);
+      if (!mult)
+#endif
+       mult = 12;
+      break;
+    }
+
 #ifdef md_cons_align
   md_cons_align (1);
 #endif
 
  0010 4f930a40 789a5440 789a5440 00000000  .*
  0020 e65e1710 20395e3b e65e1710 20395e3b  .*
  0030 00000000 0000a044 01000000 0000a044  .*
- 0040 00000000 0000f03f .*
+ 0040 00000000 0000f03f 00000000 00000000  .*
+ 0050 ffffffff ffffffff ffffffff cccccccc  .*
 
  0010 71a37909 4f930a40 789a5440 789a5440  .*
  0020 e65e1710 20395e3b e65e1710 20395e3b  .*
  0030 00000000 0000a044 01000000 0000a044  .*
- 0040 00000000 0000f03f .*
+ 0040 00000000 0000f03f 00000000 00000000  .*
+ 0050 ffffffff ffffffff ffffffff ffffffff  .*
 
  0010 0a40789a 5440789a 54400000 00000000  .*
  0020 e65e1710 20395e3b e65e1710 20395e3b  .*
  0030 00000000 0000a044 01000000 0000a044  .*
- 0040 00000000 0000f03f .*
+ 0040 00000000 0000f03f 00000000 00000000  .*
+ 0050 ffffffff ffffffff ffffcccc cccccccc  .*
 
        .double 37778931862957165903873.0
 # Ensure we handle a crazy number of digits
        .double 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+       .p2align 4,0
+
+       .ds.x 1, -1
+       .p2align 4,0xcc