From: Thiago Jung Bauermann <bauerman@br.ibm.com>
To: gdb-patches@sourceware.org
Subject: [patch 2/4] decimal floating point types
Date: Tue, 27 Mar 2007 16:30:00 -0000 [thread overview]
Message-ID: <1175012973.21904.10.camel@localhost.localdomain> (raw)
In-Reply-To: <20070323030737.475073862@br.ibm.com>
plain text document attachment (decfloat-types.diff)
2007-03-23 Thiago Jung Bauermann <bauerman@br.ibm.com>
* c-lang.c (c_create_fundamental_type): Create fundamental
types for DFP.
* c-valprint.c (c_val_print): Call print_decimal_floating to
print DFP values.
* dwarf2read.c (read_base_type): Read DW_ATE_decimal_float
attribute code and return TYPE_CODE_DECFLOAT.
(dwarf_base_type): Set dwarf2_fundamental_type for DFP values.
* gdbtypes.c: Add three builtin types for DFP.
(build_gdbtypes): Build these three builtin types for DFP.
(gdbtypes_post_init): Initialize builtin_decfloat,
builtin_decdouble and builtin_declong.
* gdbtypes.h: Add three fundamental types for DFP.
(enum type_code): Add TYPE_CODE_DECFLOAT as a type code for DFP.
(struct builtin_type): Add builtin_decfloat, builtin_decdouble
and builtin_declong.
* valprint.c (print_decimal_floating): New function to print DFP
values.
* value.h (print_decimal_floating): Prototype.
Index: gdb/c-lang.c
===================================================================
--- gdb/c-lang.c.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/c-lang.c 2007-03-13 13:39:29.000000000 -0300
@@ -322,6 +322,21 @@ c_create_fundamental_type (struct objfil
TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
0, "long double", objfile);
break;
+ case FT_DECFLOAT:
+ type = init_type (TYPE_CODE_DECFLOAT,
+ 32 / 8,
+ 0, "decimal float", objfile);
+ break;
+ case FT_DBL_PREC_DECFLOAT:
+ type = init_type (TYPE_CODE_DECFLOAT,
+ 64 / 8,
+ 0, "decimal double", objfile);
+ break;
+ case FT_EXT_PREC_DECFLOAT:
+ type = init_type (TYPE_CODE_DECFLOAT,
+ 128 / 8,
+ 0, "decimal long double", objfile);
+ break;
case FT_COMPLEX:
type = init_type (TYPE_CODE_FLT,
2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
Index: gdb/c-valprint.c
===================================================================
--- gdb/c-valprint.c.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/c-valprint.c 2007-03-13 13:39:29.000000000 -0300
@@ -436,6 +436,13 @@ c_val_print (struct type *type, const gd
}
break;
+ case TYPE_CODE_DECFLOAT:
+ if (format)
+ print_scalar_formatted (valaddr + embedded_offset, type, format, 0, stream);
+ else
+ print_decimal_floating (valaddr + embedded_offset, type, stream);
+ break;
+
case TYPE_CODE_VOID:
fprintf_filtered (stream, "void");
break;
Index: gdb/dwarf2read.c
===================================================================
--- gdb/dwarf2read.c.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/dwarf2read.c 2007-03-13 13:39:29.000000000 -0300
@@ -4851,6 +4851,9 @@ read_base_type (struct die_info *die, st
case DW_ATE_complex_float:
code = TYPE_CODE_COMPLEX;
break;
+ case DW_ATE_decimal_float:
+ code = TYPE_CODE_DECFLOAT;
+ break;
case DW_ATE_float:
code = TYPE_CODE_FLT;
break;
@@ -7710,6 +7713,18 @@ dwarf_base_type (int encoding, int size,
type = dwarf2_fundamental_type (objfile, FT_FLOAT, cu);
}
return type;
+ case DW_ATE_decimal_float:
+ if (size == 16)
+ {
+ type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_DECFLOAT, cu);
+ }
+ else if (size == 8)
+ {
+ type = dwarf2_fundamental_type (objfile, FT_EXT_PREC_DECFLOAT, cu);
+ }
+ else
+ type = dwarf2_fundamental_type (objfile, FT_DECFLOAT, cu);
+ return type;
case DW_ATE_signed:
switch (size)
{
Index: gdb/gdbtypes.c
===================================================================
--- gdb/gdbtypes.c.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/gdbtypes.c 2007-03-13 13:39:29.000000000 -0300
@@ -76,6 +76,12 @@ struct type *builtin_type_int128;
struct type *builtin_type_uint128;
struct type *builtin_type_bool;
+/* The following three are about decimal floating point types, which are now
+ considered as potential extension to C99 standard. */
+struct type *builtin_type_decfloat;
+struct type *builtin_type_decdouble;
+struct type *builtin_type_declong;
+
/* 128 bit long vector types */
struct type *builtin_type_v2_double;
struct type *builtin_type_v4_float;
@@ -3450,6 +3456,20 @@ build_gdbtypes (void)
builtin_type_long_double = build_flt (TARGET_LONG_DOUBLE_BIT, "long double",
TARGET_LONG_DOUBLE_FORMAT);
+ /* Builtin types for decimal floating point types. */
+ builtin_type_decfloat =
+ init_type (TYPE_CODE_DECFLOAT, 32 / 8,
+ 0,
+ "decimal float", (struct objfile *) NULL);
+ builtin_type_decdouble =
+ init_type (TYPE_CODE_DECFLOAT, 64 / 8,
+ 0,
+ "decimal double", (struct objfile *) NULL);
+ builtin_type_declong =
+ init_type (TYPE_CODE_DECFLOAT, 128 / 8,
+ 0,
+ "decimal long double", (struct objfile *) NULL);
+
builtin_type_complex =
init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
0,
@@ -3660,6 +3680,21 @@ gdbtypes_post_init (struct gdbarch *gdba
0,
"bool", (struct objfile *) NULL);
+ /* The following three are about decimal floating point types, which are
+ 32-bits, 64-bits and 128-bits respectively. */
+ builtin_type->builtin_decfloat =
+ init_type (TYPE_CODE_DECFLOAT, 32 / 8,
+ 0,
+ "decimal float", (struct objfile *) NULL);
+ builtin_type->builtin_decdouble =
+ init_type (TYPE_CODE_DECFLOAT, 64 / 8,
+ 0,
+ "decimal double", (struct objfile *) NULL);
+ builtin_type->builtin_declong =
+ init_type (TYPE_CODE_DECFLOAT, 128 / 8,
+ 0,
+ "decimal long double", (struct objfile *) NULL);
+
/* Pointer/Address types. */
/* NOTE: on some targets, addresses and pointers are not necessarily
@@ -3807,6 +3842,9 @@ _initialize_gdbtypes (void)
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void_func_ptr);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_CORE_ADDR);
DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_bfd_vma);
+ DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_decfloat);
+ DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_decdouble);
+ DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_declong);
deprecated_register_gdbarch_swap (NULL, 0, build_gdbtypes);
/* Note: These types do not need to be swapped - they are target
Index: gdb/gdbtypes.h
===================================================================
--- gdb/gdbtypes.h.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/gdbtypes.h 2007-03-13 13:39:29.000000000 -0300
@@ -67,7 +67,12 @@ struct block;
#define FT_UNSIGNED_BYTE 27
#define FT_TEMPLATE_ARG 28
-#define FT_NUM_MEMBERS 29 /* Highest FT_* above, plus one. */
+/* The following three fundamental types are for decimal floating point. */
+#define FT_DECFLOAT 29
+#define FT_DBL_PREC_DECFLOAT 30
+#define FT_EXT_PREC_DECFLOAT 31
+
+#define FT_NUM_MEMBERS 32 /* Highest FT_* above, plus one. */
/* Some macros for char-based bitfields. */
@@ -171,7 +176,9 @@ enum type_code
TYPE_CODE_TEMPLATE, /* C++ template */
TYPE_CODE_TEMPLATE_ARG, /* C++ template arg */
- TYPE_CODE_NAMESPACE /* C++ namespace. */
+ TYPE_CODE_NAMESPACE, /* C++ namespace. */
+
+ TYPE_CODE_DECFLOAT /* Decimal floating point. */
};
/* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
@@ -1019,6 +1026,9 @@ struct builtin_type
struct type *builtin_bool;
struct type *builtin_long_long;
struct type *builtin_unsigned_long_long;
+ struct type *builtin_decfloat;
+ struct type *builtin_decdouble;
+ struct type *builtin_declong;
};
/* Return the type table for the specified architecture. */
@@ -1042,6 +1052,9 @@ extern struct type *builtin_type_complex
extern struct type *builtin_type_double_complex;
extern struct type *builtin_type_string;
extern struct type *builtin_type_bool;
+extern struct type *builtin_type_decfloat;
+extern struct type *builtin_type_decdouble;
+extern struct type *builtin_type_declong;
/* Address/pointer types: */
/* (C) Language `pointer to data' type. Some target platforms use an
Index: gdb/valprint.c
===================================================================
--- gdb/valprint.c.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/valprint.c 2007-03-13 13:39:29.000000000 -0300
@@ -35,6 +35,7 @@
#include "floatformat.h"
#include "doublest.h"
#include "exceptions.h"
+#include "dfp.h"
#include <errno.h>
@@ -496,6 +497,18 @@ print_floating (const gdb_byte *valaddr,
}
void
+print_decimal_floating (const gdb_byte *valaddr, struct type *type,
+ struct ui_file *stream)
+{
+ char decstr[128];
+ unsigned len = TYPE_LENGTH (type);
+
+ decimal_to_string (valaddr, len, decstr);
+ fputs_filtered (decstr, stream);
+ return;
+}
+
+void
print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
unsigned len)
{
Index: gdb/value.h
===================================================================
--- gdb/value.h.orig 2007-03-12 16:55:35.000000000 -0300
+++ gdb/value.h 2007-03-13 13:39:29.000000000 -0300
@@ -482,6 +482,9 @@ extern void print_longest (struct ui_fil
extern void print_floating (const gdb_byte *valaddr, struct type *type,
struct ui_file *stream);
+extern void print_decimal_floating (const gdb_byte *valaddr, struct type *type,
+ struct ui_file *stream);
+
extern int value_print (struct value *val, struct ui_file *stream, int format,
enum val_prettyprint pretty);
--
next parent reply other threads:[~2007-03-27 16:30 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20070323030737.475073862@br.ibm.com>
2007-03-27 16:30 ` Thiago Jung Bauermann [this message]
2007-09-20 21:57 [patch 0/4] decimal floating point support Thiago Jung Bauermann
2007-09-20 21:57 ` [patch 2/4] decimal floating point types Thiago Jung Bauermann
2007-10-11 16:00 ` Daniel Jacobowitz
2007-10-15 18:12 ` Thiago Jung Bauermann
2007-10-24 20:11 ` Daniel Jacobowitz
2007-10-25 18:24 ` Thiago Jung Bauermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1175012973.21904.10.camel@localhost.localdomain \
--to=bauerman@br.ibm.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox