poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 1/2] pkl, testsuite: add support for printing/formatting float


From: Mohammad-Reza Nabipoor
Subject: [PATCH v2 1/2] pkl, testsuite: add support for printing/formatting floating-points
Date: Mon, 9 Jan 2023 00:57:59 +0100

2022-01-09  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>

        * libpoke/pkl-insn.def (formatf32): Add new instruction.
        (formatf64): Likewise.
        * libpoke/pvm.jitter (FORMATF): New macro for formatting
        floating-point numbers.
        (formatf32): New instruction for formatting floating-point
        numbers.
        (formatf64): Likewise.
        * libpoke/pkl-ast.h (PKL_AST_FORMAT_ARG_FLOATING_POINT_P): New macro.
        (PKL_AST_FORMAT_ARG_FLOATING_POINT_STYLE): Likewise.
        (PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC): Likewise.
        (PKL_AST_FORMAT_ARG_FLOATING_POINT_WIDTH): Likewise.
        (struct pkl_ast_format_arg): Add new fields for floating-points.
        * libpoke/pkl-trans.c (pkl_trans1_ps_format): Handle new specifiers
        for floating-point numbers (f, e, g).
        * libpoke/pkl-gen.c (pkl_gen_pr_format): Add support for formatting
        and printing floating-point numbers.
        * doc/poke.texi (Printing): Add new format specifiers to the table.
        * testsuite/poke.pkl/format-43.pk: New test.
        * testsuite/poke.pkl/format-44.pk: Likewise.
        * testsuite/poke.pkl/format-45.pk: Likewise.
        * testsuite/poke.pkl/format-46.pk: Likewise.
        * testsuite/poke.pkl/format-47.pk: Likewise.
        * testsuite/poke.pkl/format-48.pk: Likewise.
        * testsuite/poke.pkl/format-49.pk: Likewise.
        * testsuite/poke.pkl/format-50.pk: Likewise.
        * testsuite/poke.pkl/format-51.pk: Likewise.
        * testsuite/poke.pkl/format-52.pk: Likewise.
        * testsuite/poke.pkl/format-53.pk: Likewise.
        * testsuite/poke.pkl/format-54.pk: Likewise.
        * testsuite/poke.pkl/format-55.pk: Likewise.
        * testsuite/poke.pkl/format-56.pk: Likewise.
        * testsuite/poke.pkl/format-57.pk: Likewise.
        * testsuite/poke.pkl/format-58.pk: Likewise.
        * testsuite/poke.pkl/format-59.pk: Likewise.
        * testsuite/poke.pkl/format-60.pk: Likewise.
        * testsuite/poke.pkl/format-61.pk: Likewise.
        * testsuite/poke.pkl/format-62.pk: Likewise.
        * testsuite/poke.pkl/format-63.pk: Likewise.
        * testsuite/poke.pkl/format-64.pk: Likewise.
        * testsuite/poke.pkl/format-65.pk: Likewise.
        * testsuite/poke.pkl/format-66.pk: Likewise.
        * testsuite/poke.pkl/format-67.pk: Likewise.
        * testsuite/poke.pkl/format-68.pk: Likewise.
        * testsuite/poke.pkl/format-69.pk: Likewise.
        * testsuite/poke.pkl/format-70.pk: Likewise.
        * testsuite/poke.pkl/format-71.pk: Likewise.
        * testsuite/poke.pkl/format-72.pk: Likewise.
        * testsuite/poke.pkl/format-73.pk: Likewise.
        * testsuite/poke.pkl/format-diag-2.pk: Likewise.
        * testsuite/poke.pkl/format-diag-3.pk: Likewise.
        * testsuite/poke.pkl/format-diag-4.pk: Likewise.
        * testsuite/poke.pkl/format-diag-5.pk: Likewise.
        * testsuite/poke.pkl/format-diag-6.pk: Likewise.
        * testsuite/poke.pkl/format-diag-7.pk: Likewise.
        * testsuite/poke.pkl/format-diag-8.pk: Likewise.
        * testsuite/poke.pkl/format-diag-9.pk: Likewise.
        * testsuite/poke.pkl/printf-41.pk: Likewise.
        * testsuite/poke.pkl/printf-42.pk: Likewise.
        * testsuite/poke.pkl/printf-43.pk: Likewise.
        * testsuite/poke.pkl/printf-44.pk: Likewise.
        * testsuite/poke.pkl/printf-45.pk: Likewise.
        * testsuite/poke.pkl/printf-46.pk: Likewise.
        * testsuite/poke.pkl/printf-47.pk: Likewise.
        * testsuite/poke.pkl/printf-48.pk: Likewise.
        * testsuite/poke.pkl/printf-49.pk: Likewise.
        * testsuite/poke.pkl/printf-50.pk: Likewise.
        * testsuite/poke.pkl/printf-51.pk: Likewise.
        * testsuite/poke.pkl/printf-52.pk: Likewise.
        * testsuite/poke.pkl/printf-53.pk: Likewise.
        * testsuite/poke.pkl/printf-54.pk: Likewise.
        * testsuite/poke.pkl/printf-55.pk: Likewise.
        * testsuite/poke.pkl/printf-56.pk: Likewise.
        * testsuite/poke.pkl/printf-57.pk: Likewise.
        * testsuite/poke.pkl/printf-58.pk: Likewise.
        * testsuite/poke.pkl/printf-59.pk: Likewise.
        * testsuite/poke.pkl/printf-60.pk: Likewise.
        * testsuite/poke.pkl/printf-61.pk: Likewise.
        * testsuite/poke.pkl/printf-62.pk: Likewise.
        * testsuite/poke.pkl/printf-63.pk: Likewise.
        * testsuite/poke.pkl/printf-64.pk: Likewise.
        * testsuite/poke.pkl/printf-65.pk: Likewise.
        * testsuite/poke.pkl/printf-66.pk: Likewise.
        * testsuite/poke.pkl/printf-67.pk: Likewise.
        * testsuite/poke.pkl/printf-68.pk: Likewise.
        * testsuite/poke.pkl/printf-69.pk: Likewise.
        * testsuite/poke.pkl/printf-70.pk: Likewise.
        * testsuite/poke.pkl/printf-71.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-19.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-20.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-21.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-22.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-23.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-24.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-25.pk: Likewise.
        * testsuite/poke.pkl/printf-diag-26.pk: Likewise.
        * testsuite/Makefile.am (EXTRA_DIST): Update.
---
 ChangeLog                            |  99 +++++++++++++++++++
 doc/poke.texi                        |  13 +++
 libpoke/pkl-ast.h                    |  16 ++++
 libpoke/pkl-gen.c                    | 137 ++++++++++++++++++++-------
 libpoke/pkl-insn.def                 |   2 +
 libpoke/pkl-trans.c                  | 108 ++++++++++++++++++++-
 libpoke/pvm.jitter                   |  77 +++++++++++++++
 testsuite/Makefile.am                |  78 +++++++++++++++
 testsuite/poke.pkl/format-43.pk      |   4 +
 testsuite/poke.pkl/format-44.pk      |   4 +
 testsuite/poke.pkl/format-45.pk      |   4 +
 testsuite/poke.pkl/format-46.pk      |   4 +
 testsuite/poke.pkl/format-47.pk      |   4 +
 testsuite/poke.pkl/format-48.pk      |   4 +
 testsuite/poke.pkl/format-49.pk      |   4 +
 testsuite/poke.pkl/format-50.pk      |   4 +
 testsuite/poke.pkl/format-51.pk      |   4 +
 testsuite/poke.pkl/format-52.pk      |   4 +
 testsuite/poke.pkl/format-53.pk      |   4 +
 testsuite/poke.pkl/format-54.pk      |   4 +
 testsuite/poke.pkl/format-55.pk      |   4 +
 testsuite/poke.pkl/format-56.pk      |   4 +
 testsuite/poke.pkl/format-57.pk      |   4 +
 testsuite/poke.pkl/format-58.pk      |   4 +
 testsuite/poke.pkl/format-59.pk      |   4 +
 testsuite/poke.pkl/format-60.pk      |   4 +
 testsuite/poke.pkl/format-61.pk      |   4 +
 testsuite/poke.pkl/format-62.pk      |   4 +
 testsuite/poke.pkl/format-63.pk      |   4 +
 testsuite/poke.pkl/format-64.pk      |   4 +
 testsuite/poke.pkl/format-65.pk      |   4 +
 testsuite/poke.pkl/format-66.pk      |   4 +
 testsuite/poke.pkl/format-67.pk      |   4 +
 testsuite/poke.pkl/format-68.pk      |   4 +
 testsuite/poke.pkl/format-69.pk      |   4 +
 testsuite/poke.pkl/format-70.pk      |   4 +
 testsuite/poke.pkl/format-71.pk      |   4 +
 testsuite/poke.pkl/format-72.pk      |   4 +
 testsuite/poke.pkl/format-73.pk      |   4 +
 testsuite/poke.pkl/format-diag-2.pk  |   3 +
 testsuite/poke.pkl/format-diag-3.pk  |   3 +
 testsuite/poke.pkl/format-diag-4.pk  |   3 +
 testsuite/poke.pkl/format-diag-5.pk  |   3 +
 testsuite/poke.pkl/format-diag-6.pk  |   3 +
 testsuite/poke.pkl/format-diag-7.pk  |   3 +
 testsuite/poke.pkl/format-diag-8.pk  |   3 +
 testsuite/poke.pkl/format-diag-9.pk  |   3 +
 testsuite/poke.pkl/printf-41.pk      |   3 +
 testsuite/poke.pkl/printf-42.pk      |   3 +
 testsuite/poke.pkl/printf-43.pk      |   3 +
 testsuite/poke.pkl/printf-44.pk      |   3 +
 testsuite/poke.pkl/printf-45.pk      |   3 +
 testsuite/poke.pkl/printf-46.pk      |   3 +
 testsuite/poke.pkl/printf-47.pk      |   3 +
 testsuite/poke.pkl/printf-48.pk      |   3 +
 testsuite/poke.pkl/printf-49.pk      |   3 +
 testsuite/poke.pkl/printf-50.pk      |   3 +
 testsuite/poke.pkl/printf-51.pk      |   3 +
 testsuite/poke.pkl/printf-52.pk      |   3 +
 testsuite/poke.pkl/printf-53.pk      |   3 +
 testsuite/poke.pkl/printf-54.pk      |   3 +
 testsuite/poke.pkl/printf-55.pk      |   3 +
 testsuite/poke.pkl/printf-56.pk      |   3 +
 testsuite/poke.pkl/printf-57.pk      |   3 +
 testsuite/poke.pkl/printf-58.pk      |   3 +
 testsuite/poke.pkl/printf-59.pk      |   3 +
 testsuite/poke.pkl/printf-60.pk      |   3 +
 testsuite/poke.pkl/printf-61.pk      |   3 +
 testsuite/poke.pkl/printf-62.pk      |   3 +
 testsuite/poke.pkl/printf-63.pk      |   3 +
 testsuite/poke.pkl/printf-64.pk      |   3 +
 testsuite/poke.pkl/printf-65.pk      |   3 +
 testsuite/poke.pkl/printf-66.pk      |   3 +
 testsuite/poke.pkl/printf-67.pk      |   3 +
 testsuite/poke.pkl/printf-68.pk      |   3 +
 testsuite/poke.pkl/printf-69.pk      |   3 +
 testsuite/poke.pkl/printf-70.pk      |   3 +
 testsuite/poke.pkl/printf-71.pk      |   3 +
 testsuite/poke.pkl/printf-diag-19.pk |   3 +
 testsuite/poke.pkl/printf-diag-20.pk |   3 +
 testsuite/poke.pkl/printf-diag-21.pk |   3 +
 testsuite/poke.pkl/printf-diag-22.pk |   3 +
 testsuite/poke.pkl/printf-diag-23.pk |   3 +
 testsuite/poke.pkl/printf-diag-24.pk |   3 +
 testsuite/poke.pkl/printf-diag-25.pk |   3 +
 testsuite/poke.pkl/printf-diag-26.pk |   3 +
 86 files changed, 758 insertions(+), 37 deletions(-)
 create mode 100644 testsuite/poke.pkl/format-43.pk
 create mode 100644 testsuite/poke.pkl/format-44.pk
 create mode 100644 testsuite/poke.pkl/format-45.pk
 create mode 100644 testsuite/poke.pkl/format-46.pk
 create mode 100644 testsuite/poke.pkl/format-47.pk
 create mode 100644 testsuite/poke.pkl/format-48.pk
 create mode 100644 testsuite/poke.pkl/format-49.pk
 create mode 100644 testsuite/poke.pkl/format-50.pk
 create mode 100644 testsuite/poke.pkl/format-51.pk
 create mode 100644 testsuite/poke.pkl/format-52.pk
 create mode 100644 testsuite/poke.pkl/format-53.pk
 create mode 100644 testsuite/poke.pkl/format-54.pk
 create mode 100644 testsuite/poke.pkl/format-55.pk
 create mode 100644 testsuite/poke.pkl/format-56.pk
 create mode 100644 testsuite/poke.pkl/format-57.pk
 create mode 100644 testsuite/poke.pkl/format-58.pk
 create mode 100644 testsuite/poke.pkl/format-59.pk
 create mode 100644 testsuite/poke.pkl/format-60.pk
 create mode 100644 testsuite/poke.pkl/format-61.pk
 create mode 100644 testsuite/poke.pkl/format-62.pk
 create mode 100644 testsuite/poke.pkl/format-63.pk
 create mode 100644 testsuite/poke.pkl/format-64.pk
 create mode 100644 testsuite/poke.pkl/format-65.pk
 create mode 100644 testsuite/poke.pkl/format-66.pk
 create mode 100644 testsuite/poke.pkl/format-67.pk
 create mode 100644 testsuite/poke.pkl/format-68.pk
 create mode 100644 testsuite/poke.pkl/format-69.pk
 create mode 100644 testsuite/poke.pkl/format-70.pk
 create mode 100644 testsuite/poke.pkl/format-71.pk
 create mode 100644 testsuite/poke.pkl/format-72.pk
 create mode 100644 testsuite/poke.pkl/format-73.pk
 create mode 100644 testsuite/poke.pkl/format-diag-2.pk
 create mode 100644 testsuite/poke.pkl/format-diag-3.pk
 create mode 100644 testsuite/poke.pkl/format-diag-4.pk
 create mode 100644 testsuite/poke.pkl/format-diag-5.pk
 create mode 100644 testsuite/poke.pkl/format-diag-6.pk
 create mode 100644 testsuite/poke.pkl/format-diag-7.pk
 create mode 100644 testsuite/poke.pkl/format-diag-8.pk
 create mode 100644 testsuite/poke.pkl/format-diag-9.pk
 create mode 100644 testsuite/poke.pkl/printf-41.pk
 create mode 100644 testsuite/poke.pkl/printf-42.pk
 create mode 100644 testsuite/poke.pkl/printf-43.pk
 create mode 100644 testsuite/poke.pkl/printf-44.pk
 create mode 100644 testsuite/poke.pkl/printf-45.pk
 create mode 100644 testsuite/poke.pkl/printf-46.pk
 create mode 100644 testsuite/poke.pkl/printf-47.pk
 create mode 100644 testsuite/poke.pkl/printf-48.pk
 create mode 100644 testsuite/poke.pkl/printf-49.pk
 create mode 100644 testsuite/poke.pkl/printf-50.pk
 create mode 100644 testsuite/poke.pkl/printf-51.pk
 create mode 100644 testsuite/poke.pkl/printf-52.pk
 create mode 100644 testsuite/poke.pkl/printf-53.pk
 create mode 100644 testsuite/poke.pkl/printf-54.pk
 create mode 100644 testsuite/poke.pkl/printf-55.pk
 create mode 100644 testsuite/poke.pkl/printf-56.pk
 create mode 100644 testsuite/poke.pkl/printf-57.pk
 create mode 100644 testsuite/poke.pkl/printf-58.pk
 create mode 100644 testsuite/poke.pkl/printf-59.pk
 create mode 100644 testsuite/poke.pkl/printf-60.pk
 create mode 100644 testsuite/poke.pkl/printf-61.pk
 create mode 100644 testsuite/poke.pkl/printf-62.pk
 create mode 100644 testsuite/poke.pkl/printf-63.pk
 create mode 100644 testsuite/poke.pkl/printf-64.pk
 create mode 100644 testsuite/poke.pkl/printf-65.pk
 create mode 100644 testsuite/poke.pkl/printf-66.pk
 create mode 100644 testsuite/poke.pkl/printf-67.pk
 create mode 100644 testsuite/poke.pkl/printf-68.pk
 create mode 100644 testsuite/poke.pkl/printf-69.pk
 create mode 100644 testsuite/poke.pkl/printf-70.pk
 create mode 100644 testsuite/poke.pkl/printf-71.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-19.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-20.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-21.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-22.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-23.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-24.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-25.pk
 create mode 100644 testsuite/poke.pkl/printf-diag-26.pk

diff --git a/ChangeLog b/ChangeLog
index a4add249..813f70d5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,102 @@
+2022-01-09  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+
+       * libpoke/pkl-insn.def (formatf32): Add new instruction.
+       (formatf64): Likewise.
+       * libpoke/pvm.jitter (FORMATF): New macro for formatting
+       floating-point numbers.
+       (formatf32): New instruction for formatting floating-point
+       numbers.
+       (formatf64): Likewise.
+       * libpoke/pkl-ast.h (PKL_AST_FORMAT_ARG_FLOATING_POINT_P): New macro.
+       (PKL_AST_FORMAT_ARG_FLOATING_POINT_STYLE): Likewise.
+       (PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC): Likewise.
+       (PKL_AST_FORMAT_ARG_FLOATING_POINT_WIDTH): Likewise.
+       (struct pkl_ast_format_arg): Add new fields for floating-points.
+       * libpoke/pkl-trans.c (pkl_trans1_ps_format): Handle new specifiers
+       for floating-point numbers (f, e, g).
+       * libpoke/pkl-gen.c (pkl_gen_pr_format): Add support for formatting
+       and printing floating-point numbers.
+       * doc/poke.texi (Printing): Add new format specifiers to the table.
+       * testsuite/poke.pkl/format-43.pk: New test.
+       * testsuite/poke.pkl/format-44.pk: Likewise.
+       * testsuite/poke.pkl/format-45.pk: Likewise.
+       * testsuite/poke.pkl/format-46.pk: Likewise.
+       * testsuite/poke.pkl/format-47.pk: Likewise.
+       * testsuite/poke.pkl/format-48.pk: Likewise.
+       * testsuite/poke.pkl/format-49.pk: Likewise.
+       * testsuite/poke.pkl/format-50.pk: Likewise.
+       * testsuite/poke.pkl/format-51.pk: Likewise.
+       * testsuite/poke.pkl/format-52.pk: Likewise.
+       * testsuite/poke.pkl/format-53.pk: Likewise.
+       * testsuite/poke.pkl/format-54.pk: Likewise.
+       * testsuite/poke.pkl/format-55.pk: Likewise.
+       * testsuite/poke.pkl/format-56.pk: Likewise.
+       * testsuite/poke.pkl/format-57.pk: Likewise.
+       * testsuite/poke.pkl/format-58.pk: Likewise.
+       * testsuite/poke.pkl/format-59.pk: Likewise.
+       * testsuite/poke.pkl/format-60.pk: Likewise.
+       * testsuite/poke.pkl/format-61.pk: Likewise.
+       * testsuite/poke.pkl/format-62.pk: Likewise.
+       * testsuite/poke.pkl/format-63.pk: Likewise.
+       * testsuite/poke.pkl/format-64.pk: Likewise.
+       * testsuite/poke.pkl/format-65.pk: Likewise.
+       * testsuite/poke.pkl/format-66.pk: Likewise.
+       * testsuite/poke.pkl/format-67.pk: Likewise.
+       * testsuite/poke.pkl/format-68.pk: Likewise.
+       * testsuite/poke.pkl/format-69.pk: Likewise.
+       * testsuite/poke.pkl/format-70.pk: Likewise.
+       * testsuite/poke.pkl/format-71.pk: Likewise.
+       * testsuite/poke.pkl/format-72.pk: Likewise.
+       * testsuite/poke.pkl/format-73.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-2.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-3.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-4.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-5.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-6.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-7.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-8.pk: Likewise.
+       * testsuite/poke.pkl/format-diag-9.pk: Likewise.
+       * testsuite/poke.pkl/printf-41.pk: Likewise.
+       * testsuite/poke.pkl/printf-42.pk: Likewise.
+       * testsuite/poke.pkl/printf-43.pk: Likewise.
+       * testsuite/poke.pkl/printf-44.pk: Likewise.
+       * testsuite/poke.pkl/printf-45.pk: Likewise.
+       * testsuite/poke.pkl/printf-46.pk: Likewise.
+       * testsuite/poke.pkl/printf-47.pk: Likewise.
+       * testsuite/poke.pkl/printf-48.pk: Likewise.
+       * testsuite/poke.pkl/printf-49.pk: Likewise.
+       * testsuite/poke.pkl/printf-50.pk: Likewise.
+       * testsuite/poke.pkl/printf-51.pk: Likewise.
+       * testsuite/poke.pkl/printf-52.pk: Likewise.
+       * testsuite/poke.pkl/printf-53.pk: Likewise.
+       * testsuite/poke.pkl/printf-54.pk: Likewise.
+       * testsuite/poke.pkl/printf-55.pk: Likewise.
+       * testsuite/poke.pkl/printf-56.pk: Likewise.
+       * testsuite/poke.pkl/printf-57.pk: Likewise.
+       * testsuite/poke.pkl/printf-58.pk: Likewise.
+       * testsuite/poke.pkl/printf-59.pk: Likewise.
+       * testsuite/poke.pkl/printf-60.pk: Likewise.
+       * testsuite/poke.pkl/printf-61.pk: Likewise.
+       * testsuite/poke.pkl/printf-62.pk: Likewise.
+       * testsuite/poke.pkl/printf-63.pk: Likewise.
+       * testsuite/poke.pkl/printf-64.pk: Likewise.
+       * testsuite/poke.pkl/printf-65.pk: Likewise.
+       * testsuite/poke.pkl/printf-66.pk: Likewise.
+       * testsuite/poke.pkl/printf-67.pk: Likewise.
+       * testsuite/poke.pkl/printf-68.pk: Likewise.
+       * testsuite/poke.pkl/printf-69.pk: Likewise.
+       * testsuite/poke.pkl/printf-70.pk: Likewise.
+       * testsuite/poke.pkl/printf-71.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-19.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-20.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-21.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-22.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-23.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-24.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-25.pk: Likewise.
+       * testsuite/poke.pkl/printf-diag-26.pk: Likewise.
+       * testsuite/Makefile.am (EXTRA_DIST): Update.
+
 2023-01-08  Jose E. Marchesi  <jemarch@gnu.org>
 
        * libpoke/pkl-rt.pk (getenv): Avoid calling the `gettenv'
diff --git a/doc/poke.texi b/doc/poke.texi
index ab0ba0c7..392f5f4c 100644
--- a/doc/poke.texi
+++ b/doc/poke.texi
@@ -14485,6 +14485,19 @@ integers.
 Same as @code{%i}, but for unsigned integers.
 @item %c
 A shorter way to write @code{%u8c}.
+@item %(f|e|g)@var{bits}d
+Reinterpret the argument as @var{bits}-wide floating-point number
+and print the floating-point value in base 10 similar to C's
+@code{printf} library function.  Currently, @var{bits} can only be
+32 or 64.
+
+@example
+(poke) printf ("%f64d\n", 0x40091eb851eb851fUL);
+3.140000000000000
+@end example
+
+@item %(f|e|g)@var{bits}.@var{precision}d
+Same as previous item, but with specified @var{precision}.
 @item %v
 Print the value printed representation of the argument, which can be
 of any type including complex types like arrays and structs.  This is
diff --git a/libpoke/pkl-ast.h b/libpoke/pkl-ast.h
index 3b56175d..f652dd52 100644
--- a/libpoke/pkl-ast.h
+++ b/libpoke/pkl-ast.h
@@ -1416,6 +1416,14 @@ pkl_ast_node pkl_ast_make_format (pkl_ast ast, 
pkl_ast_node fmt,
    VALUE_P indicates whether the argument shall be printed as a PVM
    value or not (whether this argument corresponds to a %v or not).
 
+   FLOATING_POINT_P indicates whether the argument shall be interpreted
+   as a floating-point number.
+
+   FLOATING_POINT_STYLE specify the floating-point style. This is similar
+   to C's printf function: %f, %e, %g.
+
+   FLOATING_POINT_PREC specify the precision for the floating-point number.
+
    FORMAT_MODE and FORMAT_DEPTH specify how the argument shall be
    printed if VALUE_P is true.  FORMAT_MODE can be one of the
    PKL_AST_FORMAT_MODE_* constants defined below, while FORMAT_DEPTH can
@@ -1427,6 +1435,10 @@ pkl_ast_node pkl_ast_make_format (pkl_ast ast, 
pkl_ast_node fmt,
 #define PKL_AST_FORMAT_ARG_BEGIN_SC(AST) ((AST)->format_arg.begin_sc)
 #define PKL_AST_FORMAT_ARG_END_SC(AST) ((AST)->format_arg.end_sc)
 #define PKL_AST_FORMAT_ARG_VALUE_P(AST) ((AST)->format_arg.value_p)
+#define PKL_AST_FORMAT_ARG_FLOATING_POINT_P(AST) ((AST)->format_arg.fp_p)
+#define PKL_AST_FORMAT_ARG_FLOATING_POINT_STYLE(AST) 
((AST)->format_arg.fp_style)
+#define PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC(AST) ((AST)->format_arg.fp_prec)
+#define PKL_AST_FORMAT_ARG_FLOATING_POINT_WIDTH(AST) 
((AST)->format_arg.fp_width)
 #define PKL_AST_FORMAT_ARG_FORMAT_MODE(AST) ((AST)->format_arg.format_mode)
 #define PKL_AST_FORMAT_ARG_FORMAT_DEPTH(AST) ((AST)->format_arg.format_depth)
 
@@ -1441,6 +1453,10 @@ struct pkl_ast_format_arg
   char *end_sc;
   int base;
   int value_p;
+  int fp_p;
+  int fp_style;
+  unsigned fp_prec;
+  unsigned fp_width;
   int format_mode;
   int format_depth;
   char *suffix;
diff --git a/libpoke/pkl-gen.c b/libpoke/pkl-gen.c
index 94b33dd7..27217d88 100644
--- a/libpoke/pkl-gen.c
+++ b/libpoke/pkl-gen.c
@@ -1462,49 +1462,83 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_format)
       /* Generate code to put the value on the stack.  */
       PKL_PASS_SUBPASS (exp);
 
-      /* Everything except %v.  */
-      if (!PKL_AST_FORMAT_ARG_VALUE_P (arg))
+      if (PKL_AST_FORMAT_ARG_VALUE_P (arg))
         {
+          /* Generate code to format the literal value (%v).  */
+          exp_type = PKL_AST_TYPE (exp);
+          arg_omode = PKL_AST_FORMAT_ARG_FORMAT_MODE (arg);
+          arg_odepth = PKL_AST_FORMAT_ARG_FORMAT_DEPTH (arg);
+
+          /* Set the argument's own omode and odepth, saving
+             the VM's own.  */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOM); /* OMODE */
           pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
-                        base ? pvm_make_int (base, 32) : PVM_NULL);
-          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FORMAT, PKL_AST_TYPE (exp));
-          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, pvm_make_ulong (nstr++, 
64));
-          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_SWAP);
-          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AINS);
-          goto fmt_suffix;
-        }
+                        pvm_make_int (arg_omode, 32)); /* OMODE NOMODE */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOM);  /* OMODE */
 
-      /* Generate code to format the literal value (%v).  */
-      exp_type = PKL_AST_TYPE (exp);
-      arg_omode = PKL_AST_FORMAT_ARG_FORMAT_MODE (arg);
-      arg_odepth = PKL_AST_FORMAT_ARG_FORMAT_DEPTH (arg);
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOD); /* OMODE ODEPTH */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
+                        pvm_make_int (arg_odepth, 32)); /* OMODE ODEPTH 
NODEPTH */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOD);   /* OMODE ODEPTH */
 
-      /* Set the argument's own omode and odepth, saving
-         the VM's own.  */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOM); /* OMODE */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
-                    pvm_make_int (arg_omode, 32)); /* OMODE NOMODE */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOM);  /* OMODE */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT); /* OMODE ODEPTH EXP */
 
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOD); /* OMODE ODEPTH */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
-                    pvm_make_int (arg_odepth, 32)); /* OMODE ODEPTH NODEPTH */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOD);   /* OMODE ODEPTH */
+          /* Format the value.  */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
+                        pvm_make_int (0, 32)); /* OMODE ODEPTH EXP DEPTH */
+          PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_FORMATER);
+          PKL_PASS_SUBPASS (exp_type); /* OMODE ODEPTH STR */
+          PKL_GEN_POP_CONTEXT;
 
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT); /* OMODE ODEPTH EXP */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NROT); /* STR OMODE ODEPTH */
 
-      /* Format the value.  */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
-                    pvm_make_int (0, 32)); /* OMODE ODEPTH EXP DEPTH */
-      PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_FORMATER);
-      PKL_PASS_SUBPASS (exp_type); /* OMODE ODEPTH STR */
-      PKL_GEN_POP_CONTEXT;
+          /* Restore the current omode and odepth in the VM.  */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOD); /* ARR STR OMODE */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOM); /* ARR STR */
+        }
+      else if (PKL_AST_FORMAT_ARG_FLOATING_POINT_P (arg))
+        {
+          enum pkl_asm_insn insn;
+          pvm_val prec
+              = pvm_make_uint (PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC (arg),
+                               32);
 
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NROT); /* STR OMODE ODEPTH */
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, prec); /* ARR EXP PREC */
+
+          switch (PKL_AST_FORMAT_ARG_FLOATING_POINT_WIDTH (arg))
+            {
+            case 32:
+              insn = PKL_INSN_FORMATF32;
+              break;
+            case 64:
+              insn = PKL_INSN_FORMATF64;
+              break;
+            default:
+              assert (0 && "unreachable reached");
+            }
+          switch (PKL_AST_FORMAT_ARG_FLOATING_POINT_STYLE (arg))
+            {
+            case 'f':
+              pkl_asm_insn (PKL_GEN_ASM, insn, 0);  /* ARR STR */
+              break;
+            case 'e':
+              pkl_asm_insn (PKL_GEN_ASM, insn, 1);  /* ARR STR */
+              break;
+            case 'g':
+              pkl_asm_insn (PKL_GEN_ASM, insn, 2);  /* ARR STR */
+              break;
+            default:
+              assert (0 && "unreachable reached");
+            }
+        }
+      else
+        {
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
+                        base ? pvm_make_int (base, 32) : PVM_NULL);
+          pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FORMAT,
+                        PKL_AST_TYPE (exp));  /* ARR STR */
+        }
 
-      /* Restore the current omode and odepth in the VM.  */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOD); /* ARR STR OMODE */
-      pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOM); /* ARR STR */
       pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
                     pvm_make_ulong (nstr++, 64)); /* ARR STR IDX */
       pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_SWAP);  /* ARR IDX STR */
@@ -1642,6 +1676,41 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_pr_print_stmt)
                   pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOD); /* OMODE */
                   pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOM); /* _ */
                 }
+              else if (PKL_AST_FORMAT_ARG_FLOATING_POINT_P (arg))
+                {
+                  enum pkl_asm_insn insn;
+                  pvm_val prec = pvm_make_uint (
+                      PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC (arg), 32);
+
+                  pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, prec); /* EXP PREC 
*/
+
+                  switch (PKL_AST_FORMAT_ARG_FLOATING_POINT_WIDTH (arg))
+                    {
+                    case 32:
+                      insn = PKL_INSN_FORMATF32;
+                      break;
+                    case 64:
+                      insn = PKL_INSN_FORMATF64;
+                      break;
+                    default:
+                      assert (0 && "unreachable reached");
+                    }
+                  switch (PKL_AST_FORMAT_ARG_FLOATING_POINT_STYLE (arg))
+                    {
+                    case 'f':
+                      pkl_asm_insn (PKL_GEN_ASM, insn, 0);  /* STR */
+                      break;
+                    case 'e':
+                      pkl_asm_insn (PKL_GEN_ASM, insn, 1);  /* STR */
+                      break;
+                    case 'g':
+                      pkl_asm_insn (PKL_GEN_ASM, insn, 2);  /* STR */
+                      break;
+                    default:
+                      assert (0 && "unreachable reached");
+                    }
+                  pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PRINTS);
+                }
               else
                 {
                   pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
diff --git a/libpoke/pkl-insn.def b/libpoke/pkl-insn.def
index cb4d1973..bd764348 100644
--- a/libpoke/pkl-insn.def
+++ b/libpoke/pkl-insn.def
@@ -252,6 +252,8 @@ PKL_DEF_INSN(PKL_INSN_FORMATI,"n","formati")
 PKL_DEF_INSN(PKL_INSN_FORMATIU,"n","formatiu")
 PKL_DEF_INSN(PKL_INSN_FORMATL,"n","formatl")
 PKL_DEF_INSN(PKL_INSN_FORMATLU,"n","formatlu")
+PKL_DEF_INSN(PKL_INSN_FORMATF32,"n","formatf32")
+PKL_DEF_INSN(PKL_INSN_FORMATF64,"n","formatf64")
 
 /* Offset instructions.  */
 
diff --git a/libpoke/pkl-trans.c b/libpoke/pkl-trans.c
index 355c0d49..b7d88976 100644
--- a/libpoke/pkl-trans.c
+++ b/libpoke/pkl-trans.c
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <xalloc.h>
 #include <stdlib.h>
+#include <errno.h>
 
 #include "pk-utils.h"
 
@@ -683,8 +684,8 @@ PKL_PHASE_BEGIN_HANDLER (pkl_trans1_ps_format)
   pkl_ast_node args = PKL_AST_FORMAT_ARGS (format);
   pkl_ast_node format_fmt = PKL_AST_FORMAT_FMT (format);
   char *fmt, *p;
-  pkl_ast_node t, arg;
-  int ntag, nargs = 0;
+  pkl_ast_node arg;
+  int ntag, nargs = PKL_AST_FORMAT_NARGS (format);
   pkl_ast_node types = NULL, prev_arg = NULL;
   const char *msg = NULL;
   /* XXX this hard limit should go away.  */
@@ -696,7 +697,7 @@ PKL_PHASE_BEGIN_HANDLER (pkl_trans1_ps_format)
   char *new_style_class = NULL;
 
   /* Calculate the number of arguments.  */
-  for (t = args; t; t = PKL_AST_CHAIN (t))
+  for (pkl_ast_node t = args; t; t = PKL_AST_CHAIN (t))
     nargs++;
   PKL_AST_FORMAT_NARGS (format) = nargs;
 
@@ -878,6 +879,107 @@ PKL_PHASE_BEGIN_HANDLER (pkl_trans1_ps_format)
             ntag++;
             break;
           }
+        case 'f':
+        case 'e':
+        case 'g':
+          {
+            unsigned int bits;
+
+            PKL_AST_FORMAT_ARG_FLOATING_POINT_P (arg) = 1;
+            PKL_AST_FORMAT_ARG_FLOATING_POINT_STYLE (arg) = p[1];
+
+            if (p[2] >= '0' && p[2] <= '9')
+              {
+                int next_idx;
+
+                if (p[3] >= '0' && p[3] <= '9')
+                  {
+                    bits = (p[2] - '0') * 10 + (p[3] - '0');
+                    next_idx = 4;
+                  }
+                else
+                  {
+                    bits = p[2] - '0';
+                    next_idx = 3;
+                  }
+
+                if (bits == 0 || !(/*bits == 16 ||*/ bits == 32 || bits == 64))
+                  {
+                    msg = _("invalid bit-width for a floating-point number");
+                    goto invalid_tag;
+                  }
+                PKL_AST_FORMAT_ARG_FLOATING_POINT_WIDTH (arg) = bits;
+
+                if (p[next_idx] == '.')
+                  {
+                    int prec_begin_idx;
+                    char tmp;
+                    long prec;
+
+                    prec_begin_idx = ++next_idx;
+                    while (p[next_idx] >= '0' && p[next_idx] <= '9')
+                      ++next_idx;
+                    if (next_idx == prec_begin_idx)
+                      {
+                        msg = _("expected a precision number after dot");
+                        goto invalid_tag;
+                      }
+                    tmp = p[next_idx];
+                    p[next_idx] = '\0';
+                    errno = 0;
+                    prec = strtol (&p[prec_begin_idx], NULL, 10);
+                    if (errno != 0)
+                      {
+                        msg = _("invalid precision");
+                        goto invalid_tag;
+                      }
+                    PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC (arg)
+                        = (unsigned)prec;
+                    p[next_idx] = tmp;
+                  }
+                else
+                  {
+                    PKL_AST_FORMAT_ARG_FLOATING_POINT_PREC (arg)
+                        = bits == 32 ? 7 : 15;
+                  }
+
+                switch (p[next_idx])
+                  {
+                  case 'b': PKL_AST_FORMAT_ARG_BASE (arg) = 2; break;
+                  case 'o': PKL_AST_FORMAT_ARG_BASE (arg) = 8; break;
+                  case 'd': PKL_AST_FORMAT_ARG_BASE (arg) = 10; break;
+                  case 'x': PKL_AST_FORMAT_ARG_BASE (arg) = 16; break;
+                  default:
+                    msg = _("invalid base");
+                    goto invalid_tag;
+                  }
+
+                if (PKL_AST_FORMAT_ARG_BASE (arg) != 10)
+                  {
+                    msg = _("only base 10 is supported for floating-point 
numbers");
+                    goto invalid_tag;
+                  }
+
+                atype = pkl_ast_make_integral_type (PKL_PASS_AST,
+                                                    bits, /*signed_p*/ 0);
+                types = pkl_ast_chainon (types, atype);
+
+                p += ++next_idx;
+              }
+            else
+              {
+                if (p[1] == 'f')
+                  msg = _("expected decimal digit after %f");
+                else if (p[1] == 'e')
+                  msg = _("expected decimal digit after %e");
+                else
+                  msg = _("expected decimal digit after %g");
+
+                goto invalid_tag;
+              }
+            ntag++;
+            break;
+          }
         case '<':
           /* Fallthrough.  */
         case '>':
diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
index 35be8504..e8ba8425 100644
--- a/libpoke/pvm.jitter
+++ b/libpoke/pvm.jitter
@@ -875,6 +875,27 @@ late-header-c
     JITTER_PUSH_STACK (pvm_make_string ((OUT)));                            \
   } while (0)
 
+#define FORMATF(RESULT,NUM,PREC,STYLE,TYPEF)                                \
+  do                                                                        \
+    {                                                                       \
+      static const char STYLES[] = { 'f', 'e', 'g' };                       \
+      TYPEF x;                                                              \
+      int n;                                                                \
+      char fmt[16];                                                         \
+                                                                            \
+      PVM_ASSERT (sizeof (x) == sizeof (NUM));                              \
+      PVM_ASSERT ((STYLE) < 3);                                             \
+                                                                            \
+      memcpy (&x, &(NUM), sizeof (NUM));                                    \
+      n = snprintf (fmt, sizeof (fmt), "%%.%u%c", (unsigned)(PREC),         \
+                    STYLES[(STYLE) % 3]);                                   \
+      if (n == -1)                                                          \
+        PVM_RAISE_DFL (PVM_E_CONV);                                         \
+      n = asprintf (&(RESULT), fmt, x);                                     \
+      if (n == -1)                                                          \
+        PVM_RAISE_DFL (PVM_E_CONV);                                         \
+    }                                                                       \
+  while (0)
   end
 end
 
@@ -2399,6 +2420,62 @@ instruction formatlu (?n)
   end
 end
 
+# Instruction: formatf32
+#
+# Given a UINT (that should be interpreted as a 32-bit floating-point
+# number), and a UINT (as the conversion precision), push the string
+# representation of the floating-point number with specified precision.
+# The formatting style is given by a literal parameters.
+#
+# Style 0  <=>  %f in printf
+# Style 1  <=>  %e in printf
+# Style 2  <=>  %g in printf
+#
+# Stack: ( UINT UINT -- STR )
+
+instruction formatf32 (?n)
+  branching # because of PVM_RAISE_DIRECT
+  code
+    char *result = NULL;
+    uint32_t num = PVM_VAL_UINT (JITTER_UNDER_TOP_STACK ());
+    unsigned style = (unsigned)JITTER_ARGN0;
+    uint32_t precision = PVM_VAL_UINT (JITTER_TOP_STACK ());
+
+    JITTER_DROP_STACK ();
+    FORMATF (result, num, precision, style, float);
+    JITTER_TOP_STACK () = pvm_make_string (result);
+    free (result);
+  end
+end
+
+# Instruction: formatf64
+#
+# Given a ULONG (that should be interpreted as a 64-bit floating-point
+# number), and a UINT (as the conversion precision), push the string
+# representation of the floating-point number with specified precision.
+# The formatting style is given by a literal parameters.
+#
+# Style 0  <=>  %f in printf
+# Style 1  <=>  %e in printf
+# Style 2  <=>  %g in printf
+#
+# Stack: ( ULONG UINT -- STR )
+
+instruction formatf64 (?n)
+  branching # because of PVM_RAISE_DIRECT
+  code
+    char *result = NULL;
+    uint64_t num = PVM_VAL_ULONG (JITTER_UNDER_TOP_STACK ());
+    unsigned style = (unsigned)JITTER_ARGN0;
+    uint32_t precision = PVM_VAL_UINT (JITTER_TOP_STACK ());
+
+    JITTER_DROP_STACK ();
+    FORMATF (result, num, precision, style, double);
+    JITTER_TOP_STACK () = pvm_make_string (result);
+    free (result);
+  end
+end
+
 
 ## Main stack manipulation instructions
 
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index adf82877..3de991c2 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -1390,7 +1390,46 @@ EXTRA_DIST = \
   poke.pkl/format-40.pk \
   poke.pkl/format-41.pk \
   poke.pkl/format-42.pk \
+  poke.pkl/format-43.pk \
+  poke.pkl/format-44.pk \
+  poke.pkl/format-45.pk \
+  poke.pkl/format-46.pk \
+  poke.pkl/format-47.pk \
+  poke.pkl/format-48.pk \
+  poke.pkl/format-49.pk \
+  poke.pkl/format-50.pk \
+  poke.pkl/format-51.pk \
+  poke.pkl/format-52.pk \
+  poke.pkl/format-53.pk \
+  poke.pkl/format-54.pk \
+  poke.pkl/format-55.pk \
+  poke.pkl/format-56.pk \
+  poke.pkl/format-57.pk \
+  poke.pkl/format-58.pk \
+  poke.pkl/format-59.pk \
+  poke.pkl/format-60.pk \
+  poke.pkl/format-61.pk \
+  poke.pkl/format-62.pk \
+  poke.pkl/format-63.pk \
+  poke.pkl/format-64.pk \
+  poke.pkl/format-65.pk \
+  poke.pkl/format-66.pk \
+  poke.pkl/format-67.pk \
+  poke.pkl/format-68.pk \
+  poke.pkl/format-69.pk \
+  poke.pkl/format-70.pk \
+  poke.pkl/format-71.pk \
+  poke.pkl/format-72.pk \
+  poke.pkl/format-73.pk \
   poke.pkl/format-diag-1.pk \
+  poke.pkl/format-diag-2.pk \
+  poke.pkl/format-diag-3.pk \
+  poke.pkl/format-diag-4.pk \
+  poke.pkl/format-diag-5.pk \
+  poke.pkl/format-diag-6.pk \
+  poke.pkl/format-diag-7.pk \
+  poke.pkl/format-diag-8.pk \
+  poke.pkl/format-diag-9.pk \
   poke.pkl/format-optcond-1.pk \
   poke.pkl/format-optcond-2.pk \
   poke.pkl/format-optcond-3.pk \
@@ -1979,6 +2018,37 @@ EXTRA_DIST = \
   poke.pkl/printf-38.pk \
   poke.pkl/printf-39.pk \
   poke.pkl/printf-40.pk \
+  poke.pkl/printf-41.pk \
+  poke.pkl/printf-42.pk \
+  poke.pkl/printf-43.pk \
+  poke.pkl/printf-44.pk \
+  poke.pkl/printf-45.pk \
+  poke.pkl/printf-46.pk \
+  poke.pkl/printf-47.pk \
+  poke.pkl/printf-48.pk \
+  poke.pkl/printf-49.pk \
+  poke.pkl/printf-50.pk \
+  poke.pkl/printf-51.pk \
+  poke.pkl/printf-52.pk \
+  poke.pkl/printf-53.pk \
+  poke.pkl/printf-54.pk \
+  poke.pkl/printf-55.pk \
+  poke.pkl/printf-56.pk \
+  poke.pkl/printf-57.pk \
+  poke.pkl/printf-58.pk \
+  poke.pkl/printf-59.pk \
+  poke.pkl/printf-60.pk \
+  poke.pkl/printf-61.pk \
+  poke.pkl/printf-62.pk \
+  poke.pkl/printf-63.pk \
+  poke.pkl/printf-64.pk \
+  poke.pkl/printf-65.pk \
+  poke.pkl/printf-66.pk \
+  poke.pkl/printf-67.pk \
+  poke.pkl/printf-68.pk \
+  poke.pkl/printf-69.pk \
+  poke.pkl/printf-70.pk \
+  poke.pkl/printf-71.pk \
   poke.pkl/printf-binary-1.pk \
   poke.pkl/printf-binary-2.pk \
   poke.pkl/printf-binary-3.pk \
@@ -2008,6 +2078,14 @@ EXTRA_DIST = \
   poke.pkl/printf-diag-15.pk \
   poke.pkl/printf-diag-16.pk \
   poke.pkl/printf-diag-18.pk \
+  poke.pkl/printf-diag-19.pk \
+  poke.pkl/printf-diag-20.pk \
+  poke.pkl/printf-diag-21.pk \
+  poke.pkl/printf-diag-22.pk \
+  poke.pkl/printf-diag-23.pk \
+  poke.pkl/printf-diag-24.pk \
+  poke.pkl/printf-diag-25.pk \
+  poke.pkl/printf-diag-26.pk \
   poke.pkl/printf-value-1.pk \
   poke.pkl/printf-value-2.pk \
   poke.pkl/printf-value-3.pk \
diff --git a/testsuite/poke.pkl/format-43.pk b/testsuite/poke.pkl/format-43.pk
new file mode 100644
index 00000000..a326625f
--- /dev/null
+++ b/testsuite/poke.pkl/format-43.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f32d", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001"} } */
diff --git a/testsuite/poke.pkl/format-44.pk b/testsuite/poke.pkl/format-44.pk
new file mode 100644
index 00000000..3e236580
--- /dev/null
+++ b/testsuite/poke.pkl/format-44.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f32d", 0x4048f5c3U);} } */
+/* { dg-output {"Xx3.1400001"} } */
diff --git a/testsuite/poke.pkl/format-45.pk b/testsuite/poke.pkl/format-45.pk
new file mode 100644
index 00000000..52ab1fd6
--- /dev/null
+++ b/testsuite/poke.pkl/format-45.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f32dxX", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001xX"} } */
diff --git a/testsuite/poke.pkl/format-46.pk b/testsuite/poke.pkl/format-46.pk
new file mode 100644
index 00000000..1f667c19
--- /dev/null
+++ b/testsuite/poke.pkl/format-46.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f32dxX", 0x4048f5c3U);} } */
+/* { dg-output {"Xx3.1400001xX"} } */
diff --git a/testsuite/poke.pkl/format-47.pk b/testsuite/poke.pkl/format-47.pk
new file mode 100644
index 00000000..965d7d60
--- /dev/null
+++ b/testsuite/poke.pkl/format-47.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%s%f32d%u32x", "FP!", 0x4048f5c3U, 0x4048f5c3U);} } 
*/
+/* { dg-output {"FP!3.14000014048f5c3"} } */
diff --git a/testsuite/poke.pkl/format-48.pk b/testsuite/poke.pkl/format-48.pk
new file mode 100644
index 00000000..3cf4032b
--- /dev/null
+++ b/testsuite/poke.pkl/format-48.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f32.7d", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001"} } */
diff --git a/testsuite/poke.pkl/format-49.pk b/testsuite/poke.pkl/format-49.pk
new file mode 100644
index 00000000..32dd5d93
--- /dev/null
+++ b/testsuite/poke.pkl/format-49.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f32.7d", 0x4048f5c3U);} } */
+/* { dg-output {"Xx3.1400001"} } */
diff --git a/testsuite/poke.pkl/format-50.pk b/testsuite/poke.pkl/format-50.pk
new file mode 100644
index 00000000..a3c411d9
--- /dev/null
+++ b/testsuite/poke.pkl/format-50.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f32.7dxX", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001xX"} } */
diff --git a/testsuite/poke.pkl/format-51.pk b/testsuite/poke.pkl/format-51.pk
new file mode 100644
index 00000000..36f953cd
--- /dev/null
+++ b/testsuite/poke.pkl/format-51.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f32.7dxX", 0x4048f5c3U);} } */
+/* { dg-output {"Xx3.1400001xX"} } */
diff --git a/testsuite/poke.pkl/format-52.pk b/testsuite/poke.pkl/format-52.pk
new file mode 100644
index 00000000..0c7bca42
--- /dev/null
+++ b/testsuite/poke.pkl/format-52.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%s%f32.7d%u32x", "FP!", 0x4048f5c3U, 0x4048f5c3U);} 
} */
+/* { dg-output {"FP!3.14000014048f5c3"} } */
diff --git a/testsuite/poke.pkl/format-53.pk b/testsuite/poke.pkl/format-53.pk
new file mode 100644
index 00000000..e379c0f3
--- /dev/null
+++ b/testsuite/poke.pkl/format-53.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f32.9d%s", 0x4048f5c3U, "XxX");} } */
+/* { dg-output {"3.140000105XxX"} } */
diff --git a/testsuite/poke.pkl/format-54.pk b/testsuite/poke.pkl/format-54.pk
new file mode 100644
index 00000000..1e92b1de
--- /dev/null
+++ b/testsuite/poke.pkl/format-54.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("  %f32.22d %s  ", 0x4048f5c3U, "!");} } */
+/* { dg-output {"  3.1400001049041748046875 !  "} } */
diff --git a/testsuite/poke.pkl/format-55.pk b/testsuite/poke.pkl/format-55.pk
new file mode 100644
index 00000000..336e0d8b
--- /dev/null
+++ b/testsuite/poke.pkl/format-55.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%e32.22d", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001049041748046875e\+00"} } */
diff --git a/testsuite/poke.pkl/format-56.pk b/testsuite/poke.pkl/format-56.pk
new file mode 100644
index 00000000..8549cc8c
--- /dev/null
+++ b/testsuite/poke.pkl/format-56.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%g32.8d", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001"} } */
diff --git a/testsuite/poke.pkl/format-57.pk b/testsuite/poke.pkl/format-57.pk
new file mode 100644
index 00000000..8549cc8c
--- /dev/null
+++ b/testsuite/poke.pkl/format-57.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%g32.8d", 0x4048f5c3U);} } */
+/* { dg-output {"3.1400001"} } */
diff --git a/testsuite/poke.pkl/format-58.pk b/testsuite/poke.pkl/format-58.pk
new file mode 100644
index 00000000..b27a06cf
--- /dev/null
+++ b/testsuite/poke.pkl/format-58.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f64d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.140000000000000"} } */
diff --git a/testsuite/poke.pkl/format-59.pk b/testsuite/poke.pkl/format-59.pk
new file mode 100644
index 00000000..8070eeab
--- /dev/null
+++ b/testsuite/poke.pkl/format-59.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f64d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"Xx3.140000000000000"} } */
diff --git a/testsuite/poke.pkl/format-60.pk b/testsuite/poke.pkl/format-60.pk
new file mode 100644
index 00000000..8fc9de65
--- /dev/null
+++ b/testsuite/poke.pkl/format-60.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f64dxX", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.140000000000000xX"} } */
diff --git a/testsuite/poke.pkl/format-61.pk b/testsuite/poke.pkl/format-61.pk
new file mode 100644
index 00000000..1c2029d7
--- /dev/null
+++ b/testsuite/poke.pkl/format-61.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f64dxX", 0x40091eb851eb851fU);} } */
+/* { dg-output {"Xx3.140000000000000xX"} } */
diff --git a/testsuite/poke.pkl/format-62.pk b/testsuite/poke.pkl/format-62.pk
new file mode 100644
index 00000000..59df0b4b
--- /dev/null
+++ b/testsuite/poke.pkl/format-62.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%s%f64d%u64x", "FP!", 0x40091eb851eb851fU, 
0x40091eb851eb851fU);} } */
+/* { dg-output {"FP!3.14000000000000040091eb851eb851f"} } */
diff --git a/testsuite/poke.pkl/format-63.pk b/testsuite/poke.pkl/format-63.pk
new file mode 100644
index 00000000..17cc8d9a
--- /dev/null
+++ b/testsuite/poke.pkl/format-63.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f64.15d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.140000000000000"} } */
diff --git a/testsuite/poke.pkl/format-64.pk b/testsuite/poke.pkl/format-64.pk
new file mode 100644
index 00000000..f3d71448
--- /dev/null
+++ b/testsuite/poke.pkl/format-64.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f64.15d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"Xx3.140000000000000"} } */
diff --git a/testsuite/poke.pkl/format-65.pk b/testsuite/poke.pkl/format-65.pk
new file mode 100644
index 00000000..3432de92
--- /dev/null
+++ b/testsuite/poke.pkl/format-65.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f64.15dxX", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.140000000000000xX"} } */
diff --git a/testsuite/poke.pkl/format-66.pk b/testsuite/poke.pkl/format-66.pk
new file mode 100644
index 00000000..9a5b5c14
--- /dev/null
+++ b/testsuite/poke.pkl/format-66.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("Xx%f64.15dxX", 0x40091eb851eb851fU);} } */
+/* { dg-output {"Xx3.140000000000000xX"} } */
diff --git a/testsuite/poke.pkl/format-67.pk b/testsuite/poke.pkl/format-67.pk
new file mode 100644
index 00000000..36a822f5
--- /dev/null
+++ b/testsuite/poke.pkl/format-67.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%s%f64.15d%u64x", "FP!", 0x40091eb851eb851fU, 
0x40091eb851eb851fU);} } */
+/* { dg-output {"FP!3.14000000000000040091eb851eb851f"} } */
diff --git a/testsuite/poke.pkl/format-68.pk b/testsuite/poke.pkl/format-68.pk
new file mode 100644
index 00000000..80156b2d
--- /dev/null
+++ b/testsuite/poke.pkl/format-68.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f64.7d%s", 0x40091eb851eb851fU, "XxX");} } */
+/* { dg-output {"3.1400000XxX"} } */
diff --git a/testsuite/poke.pkl/format-69.pk b/testsuite/poke.pkl/format-69.pk
new file mode 100644
index 00000000..272db154
--- /dev/null
+++ b/testsuite/poke.pkl/format-69.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%s%f64.14d%s", "!", 0x40091eb851eb851fU, "XxX");} } 
*/
+/* { dg-output {"!3.14000000000000XxX"} } */
diff --git a/testsuite/poke.pkl/format-70.pk b/testsuite/poke.pkl/format-70.pk
new file mode 100644
index 00000000..66f770bf
--- /dev/null
+++ b/testsuite/poke.pkl/format-70.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("  %f64.22d %s  ", 0x40091eb851eb851fU, "!");} } */
+/* { dg-output {"  3.1400000000000001243450 !  "} } */
diff --git a/testsuite/poke.pkl/format-71.pk b/testsuite/poke.pkl/format-71.pk
new file mode 100644
index 00000000..158fb98c
--- /dev/null
+++ b/testsuite/poke.pkl/format-71.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%f64.51d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.140000000000000124344978758017532527446746826171875"} } */
diff --git a/testsuite/poke.pkl/format-72.pk b/testsuite/poke.pkl/format-72.pk
new file mode 100644
index 00000000..7c592d74
--- /dev/null
+++ b/testsuite/poke.pkl/format-72.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%e64.15d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.140000000000000e\+00"} } */
diff --git a/testsuite/poke.pkl/format-73.pk b/testsuite/poke.pkl/format-73.pk
new file mode 100644
index 00000000..a2a6799d
--- /dev/null
+++ b/testsuite/poke.pkl/format-73.pk
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+
+/* { dg-command {format ("%g64.15d", 0x40091eb851eb851fU);} } */
+/* { dg-output {"3.14"} } */
diff --git a/testsuite/poke.pkl/format-diag-2.pk 
b/testsuite/poke.pkl/format-diag-2.pk
new file mode 100644
index 00000000..5de99f65
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-2.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("%f1d", 1UH); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-3.pk 
b/testsuite/poke.pkl/format-diag-3.pk
new file mode 100644
index 00000000..9bd748fa
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-3.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("x%f16d", 1UH); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-4.pk 
b/testsuite/poke.pkl/format-diag-4.pk
new file mode 100644
index 00000000..0d901f44
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-4.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("%f32bAB", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-5.pk 
b/testsuite/poke.pkl/format-diag-5.pk
new file mode 100644
index 00000000..cb01cbec
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-5.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("AB%f32oCD", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-6.pk 
b/testsuite/poke.pkl/format-diag-6.pk
new file mode 100644
index 00000000..02b1ed2f
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-6.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("%f32x", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-7.pk 
b/testsuite/poke.pkl/format-diag-7.pk
new file mode 100644
index 00000000..8012f8d6
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-7.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format (" %f64b %s", 1U, "Hi"); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-8.pk 
b/testsuite/poke.pkl/format-diag-8.pk
new file mode 100644
index 00000000..97456e0c
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-8.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("%f64o", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/format-diag-9.pk 
b/testsuite/poke.pkl/format-diag-9.pk
new file mode 100644
index 00000000..b1910845
--- /dev/null
+++ b/testsuite/poke.pkl/format-diag-9.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+format ("%f64x", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-41.pk b/testsuite/poke.pkl/printf-41.pk
new file mode 100644
index 00000000..bae954d9
--- /dev/null
+++ b/testsuite/poke.pkl/printf-41.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f32d", 0x4048f5c3U); /* { dg-output {3.1400001} } */
diff --git a/testsuite/poke.pkl/printf-42.pk b/testsuite/poke.pkl/printf-42.pk
new file mode 100644
index 00000000..8facaa7c
--- /dev/null
+++ b/testsuite/poke.pkl/printf-42.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f32d", 0x4048f5c3U); /* { dg-output {Xx3.1400001} } */
diff --git a/testsuite/poke.pkl/printf-43.pk b/testsuite/poke.pkl/printf-43.pk
new file mode 100644
index 00000000..5023336c
--- /dev/null
+++ b/testsuite/poke.pkl/printf-43.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f32dxX", 0x4048f5c3U); /* { dg-output {3.1400001xX} } */
diff --git a/testsuite/poke.pkl/printf-44.pk b/testsuite/poke.pkl/printf-44.pk
new file mode 100644
index 00000000..ea6e7a97
--- /dev/null
+++ b/testsuite/poke.pkl/printf-44.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f32dxX", 0x4048f5c3U); /* { dg-output {Xx3.1400001xX} } */
diff --git a/testsuite/poke.pkl/printf-45.pk b/testsuite/poke.pkl/printf-45.pk
new file mode 100644
index 00000000..a3dde7c8
--- /dev/null
+++ b/testsuite/poke.pkl/printf-45.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%s%f32d%u32x", "FP!", 0x4048f5c3U, 0x4048f5c3U); /* { dg-output 
{FP!3.14000014048f5c3} } */
diff --git a/testsuite/poke.pkl/printf-46.pk b/testsuite/poke.pkl/printf-46.pk
new file mode 100644
index 00000000..75e2c803
--- /dev/null
+++ b/testsuite/poke.pkl/printf-46.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f32.7d", 0x4048f5c3U); /* { dg-output {3.1400001} } */
diff --git a/testsuite/poke.pkl/printf-47.pk b/testsuite/poke.pkl/printf-47.pk
new file mode 100644
index 00000000..4d4c7349
--- /dev/null
+++ b/testsuite/poke.pkl/printf-47.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f32.7d", 0x4048f5c3U); /* { dg-output {Xx3.1400001} } */
diff --git a/testsuite/poke.pkl/printf-48.pk b/testsuite/poke.pkl/printf-48.pk
new file mode 100644
index 00000000..35a13390
--- /dev/null
+++ b/testsuite/poke.pkl/printf-48.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f32.7dxX", 0x4048f5c3U); /* { dg-output {3.1400001xX} } */
diff --git a/testsuite/poke.pkl/printf-49.pk b/testsuite/poke.pkl/printf-49.pk
new file mode 100644
index 00000000..9e9a1890
--- /dev/null
+++ b/testsuite/poke.pkl/printf-49.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f32.7dxX", 0x4048f5c3U); /* { dg-output {Xx3.1400001xX} } */
diff --git a/testsuite/poke.pkl/printf-50.pk b/testsuite/poke.pkl/printf-50.pk
new file mode 100644
index 00000000..bb4ee360
--- /dev/null
+++ b/testsuite/poke.pkl/printf-50.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%s%f32.7d%u32x", "FP!", 0x4048f5c3U, 0x4048f5c3U); /* { dg-output 
{FP!3.14000014048f5c3} } */
diff --git a/testsuite/poke.pkl/printf-51.pk b/testsuite/poke.pkl/printf-51.pk
new file mode 100644
index 00000000..c58178bd
--- /dev/null
+++ b/testsuite/poke.pkl/printf-51.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f32.9d%s", 0x4048f5c3U, "XxX"); /* { dg-output {3.140000105XxX} } */
diff --git a/testsuite/poke.pkl/printf-52.pk b/testsuite/poke.pkl/printf-52.pk
new file mode 100644
index 00000000..d191b711
--- /dev/null
+++ b/testsuite/poke.pkl/printf-52.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("  %f32.22d %s  ", 0x4048f5c3U, "!"); /* { dg-output {  
3.1400001049041748046875 !  } } */
diff --git a/testsuite/poke.pkl/printf-53.pk b/testsuite/poke.pkl/printf-53.pk
new file mode 100644
index 00000000..a451ab1a
--- /dev/null
+++ b/testsuite/poke.pkl/printf-53.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%e32.22d", 0x4048f5c3U); /* { dg-output 
{3.1400001049041748046875e\+00} } */
diff --git a/testsuite/poke.pkl/printf-54.pk b/testsuite/poke.pkl/printf-54.pk
new file mode 100644
index 00000000..62ce87af
--- /dev/null
+++ b/testsuite/poke.pkl/printf-54.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%g32.8d", 0x4048f5c3U); /* { dg-output {3.1400001} } */
diff --git a/testsuite/poke.pkl/printf-55.pk b/testsuite/poke.pkl/printf-55.pk
new file mode 100644
index 00000000..62ce87af
--- /dev/null
+++ b/testsuite/poke.pkl/printf-55.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%g32.8d", 0x4048f5c3U); /* { dg-output {3.1400001} } */
diff --git a/testsuite/poke.pkl/printf-56.pk b/testsuite/poke.pkl/printf-56.pk
new file mode 100644
index 00000000..66db325c
--- /dev/null
+++ b/testsuite/poke.pkl/printf-56.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f64d", 0x40091eb851eb851fU); /* { dg-output {3.140000000000000} } */
diff --git a/testsuite/poke.pkl/printf-57.pk b/testsuite/poke.pkl/printf-57.pk
new file mode 100644
index 00000000..8510be86
--- /dev/null
+++ b/testsuite/poke.pkl/printf-57.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f64d", 0x40091eb851eb851fU); /* { dg-output {Xx3.140000000000000} 
} */
diff --git a/testsuite/poke.pkl/printf-58.pk b/testsuite/poke.pkl/printf-58.pk
new file mode 100644
index 00000000..6117ec85
--- /dev/null
+++ b/testsuite/poke.pkl/printf-58.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f64dxX", 0x40091eb851eb851fU); /* { dg-output {3.140000000000000xX} 
} */
diff --git a/testsuite/poke.pkl/printf-59.pk b/testsuite/poke.pkl/printf-59.pk
new file mode 100644
index 00000000..848c3d51
--- /dev/null
+++ b/testsuite/poke.pkl/printf-59.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f64dxX", 0x40091eb851eb851fU); /* { dg-output 
{Xx3.140000000000000xX} } */
diff --git a/testsuite/poke.pkl/printf-60.pk b/testsuite/poke.pkl/printf-60.pk
new file mode 100644
index 00000000..0a6fdba8
--- /dev/null
+++ b/testsuite/poke.pkl/printf-60.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%s%f64d%u64x", "FP!", 0x40091eb851eb851fU, 0x40091eb851eb851fU); /* { 
dg-output {FP!3.14000000000000040091eb851eb851f} } */
diff --git a/testsuite/poke.pkl/printf-61.pk b/testsuite/poke.pkl/printf-61.pk
new file mode 100644
index 00000000..b4a33dbb
--- /dev/null
+++ b/testsuite/poke.pkl/printf-61.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f64.15d", 0x40091eb851eb851fU); /* { dg-output {3.140000000000000} } 
*/
diff --git a/testsuite/poke.pkl/printf-62.pk b/testsuite/poke.pkl/printf-62.pk
new file mode 100644
index 00000000..09082f95
--- /dev/null
+++ b/testsuite/poke.pkl/printf-62.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f64.15d", 0x40091eb851eb851fU); /* { dg-output 
{Xx3.140000000000000} } */
diff --git a/testsuite/poke.pkl/printf-63.pk b/testsuite/poke.pkl/printf-63.pk
new file mode 100644
index 00000000..9c64170e
--- /dev/null
+++ b/testsuite/poke.pkl/printf-63.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f64.15dxX", 0x40091eb851eb851fU); /* { dg-output 
{3.140000000000000xX} } */
diff --git a/testsuite/poke.pkl/printf-64.pk b/testsuite/poke.pkl/printf-64.pk
new file mode 100644
index 00000000..8a049eb6
--- /dev/null
+++ b/testsuite/poke.pkl/printf-64.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("Xx%f64.15dxX", 0x40091eb851eb851fU); /* { dg-output 
{Xx3.140000000000000xX} } */
diff --git a/testsuite/poke.pkl/printf-65.pk b/testsuite/poke.pkl/printf-65.pk
new file mode 100644
index 00000000..129bb3a1
--- /dev/null
+++ b/testsuite/poke.pkl/printf-65.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%s%f64.15d%u64x", "FP!", 0x40091eb851eb851fU, 0x40091eb851eb851fU); 
/* { dg-output {FP!3.14000000000000040091eb851eb851f} } */
diff --git a/testsuite/poke.pkl/printf-66.pk b/testsuite/poke.pkl/printf-66.pk
new file mode 100644
index 00000000..6adf2e21
--- /dev/null
+++ b/testsuite/poke.pkl/printf-66.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f64.7d%s", 0x40091eb851eb851fU, "XxX"); /* { dg-output 
{3.1400000XxX} } */
diff --git a/testsuite/poke.pkl/printf-67.pk b/testsuite/poke.pkl/printf-67.pk
new file mode 100644
index 00000000..94ef9d77
--- /dev/null
+++ b/testsuite/poke.pkl/printf-67.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%s%f64.14d%s", "!", 0x40091eb851eb851fU, "XxX"); /* { dg-output 
{!3.14000000000000XxX} } */
diff --git a/testsuite/poke.pkl/printf-68.pk b/testsuite/poke.pkl/printf-68.pk
new file mode 100644
index 00000000..acb9b115
--- /dev/null
+++ b/testsuite/poke.pkl/printf-68.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("  %f64.22d %s  ", 0x40091eb851eb851fU, "!"); /* { dg-output {  
3.1400000000000001243450 !  } } */
diff --git a/testsuite/poke.pkl/printf-69.pk b/testsuite/poke.pkl/printf-69.pk
new file mode 100644
index 00000000..fd7ab551
--- /dev/null
+++ b/testsuite/poke.pkl/printf-69.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%f64.51d", 0x40091eb851eb851fU); /* { dg-output 
{3.140000000000000124344978758017532527446746826171875} } */
diff --git a/testsuite/poke.pkl/printf-70.pk b/testsuite/poke.pkl/printf-70.pk
new file mode 100644
index 00000000..ea2b4021
--- /dev/null
+++ b/testsuite/poke.pkl/printf-70.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%e64.15d", 0x40091eb851eb851fU); /* { dg-output 
{3.140000000000000e\+00} } */
diff --git a/testsuite/poke.pkl/printf-71.pk b/testsuite/poke.pkl/printf-71.pk
new file mode 100644
index 00000000..27461660
--- /dev/null
+++ b/testsuite/poke.pkl/printf-71.pk
@@ -0,0 +1,3 @@
+/* { dg-do run } */
+
+printf ("%g64.15d", 0x40091eb851eb851fU); /* { dg-output {3.14} } */
diff --git a/testsuite/poke.pkl/printf-diag-19.pk 
b/testsuite/poke.pkl/printf-diag-19.pk
new file mode 100644
index 00000000..7b489d29
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-19.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("%f1d", 1UH); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-20.pk 
b/testsuite/poke.pkl/printf-diag-20.pk
new file mode 100644
index 00000000..1a0bc1bc
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-20.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("x%f16d", 1UH); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-21.pk 
b/testsuite/poke.pkl/printf-diag-21.pk
new file mode 100644
index 00000000..c9eef385
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-21.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("%f32bAB", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-22.pk 
b/testsuite/poke.pkl/printf-diag-22.pk
new file mode 100644
index 00000000..76b59ecb
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-22.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("AB%f32oCD", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-23.pk 
b/testsuite/poke.pkl/printf-diag-23.pk
new file mode 100644
index 00000000..8a34ead6
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-23.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("%f32x", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-24.pk 
b/testsuite/poke.pkl/printf-diag-24.pk
new file mode 100644
index 00000000..d7bc5a21
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-24.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf (" %f64b %s", 1U, "Hi"); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-25.pk 
b/testsuite/poke.pkl/printf-diag-25.pk
new file mode 100644
index 00000000..d7f00eaf
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-25.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("%f64o", 1U); /* { dg-error "" } */
diff --git a/testsuite/poke.pkl/printf-diag-26.pk 
b/testsuite/poke.pkl/printf-diag-26.pk
new file mode 100644
index 00000000..54ca8460
--- /dev/null
+++ b/testsuite/poke.pkl/printf-diag-26.pk
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+
+printf ("%f64x", 1U); /* { dg-error "" } */
-- 
2.39.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]