[PATCH/RFC] sim: common: add PRI printf defines
Commit Message
Keeping track of the right printf formats for the various types can be
a pretty big hassle, especially in common code which has to support a
variety of bitsizes. Take a page from the existing standards and add
a set of PRI macros which hide the details in a common header.
---
sim/common/ChangeLog | 8 ++++++++
sim/common/sim-types.h | 21 +++++++++++++++++++++
2 files changed, 29 insertions(+)
Comments
On Sun, Jun 21, 2015 at 1:02 PM, Mike Frysinger <vapier@gentoo.org> wrote:
> Keeping track of the right printf formats for the various types can be
> a pretty big hassle, especially in common code which has to support a
> variety of bitsizes. Take a page from the existing standards and add
> a set of PRI macros which hide the details in a common header.
> ---
> sim/common/ChangeLog | 8 ++++++++
> sim/common/sim-types.h | 21 +++++++++++++++++++++
> 2 files changed, 29 insertions(+)
>
> diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
> index 722ad98..db67a1d 100644
> --- a/sim/common/ChangeLog
> +++ b/sim/common/ChangeLog
> @@ -1,5 +1,13 @@
> 2015-06-21 Mike Frysinger <vapier@gentoo.org>
>
> + * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
> + expanding target bitsizes into standard PRI formats.
> + (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
> + (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
> + (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
> +
It's not that big a deal, but _[_A-Z]+ is reserved for the compiler.
On Mon, Jun 22, 2015 at 5:29 PM, Doug Evans <dje@google.com> wrote:
> On Sun, Jun 21, 2015 at 1:02 PM, Mike Frysinger <vapier@gentoo.org> wrote:
>> Keeping track of the right printf formats for the various types can be
>> a pretty big hassle, especially in common code which has to support a
>> variety of bitsizes. Take a page from the existing standards and add
>> a set of PRI macros which hide the details in a common header.
>> ---
>> sim/common/ChangeLog | 8 ++++++++
>> sim/common/sim-types.h | 21 +++++++++++++++++++++
>> 2 files changed, 29 insertions(+)
>>
>> diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
>> index 722ad98..db67a1d 100644
>> --- a/sim/common/ChangeLog
>> +++ b/sim/common/ChangeLog
>> @@ -1,5 +1,13 @@
>> 2015-06-21 Mike Frysinger <vapier@gentoo.org>
>>
>> + * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
>> + expanding target bitsizes into standard PRI formats.
>> + (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
>> + (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
>> + (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
>> +
>
> It's not that big a deal, but _[_A-Z]+ is reserved for the compiler.
Hmmm.
I'm sure most people know what I meant, but to be precise,
that's _[_A-Z].*
Hope I've got that right now.
On 22 Jun 2015 17:29, Doug Evans wrote:
> On Sun, Jun 21, 2015 at 1:02 PM, Mike Frysinger wrote:
> > Keeping track of the right printf formats for the various types can be
> > a pretty big hassle, especially in common code which has to support a
> > variety of bitsizes. Take a page from the existing standards and add
> > a set of PRI macros which hide the details in a common header.
> > ---
> > sim/common/ChangeLog | 8 ++++++++
> > sim/common/sim-types.h | 21 +++++++++++++++++++++
> > 2 files changed, 29 insertions(+)
> >
> > diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
> > index 722ad98..db67a1d 100644
> > --- a/sim/common/ChangeLog
> > +++ b/sim/common/ChangeLog
> > @@ -1,5 +1,13 @@
> > 2015-06-21 Mike Frysinger <vapier@gentoo.org>
> >
> > + * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
> > + expanding target bitsizes into standard PRI formats.
> > + (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
> > + (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
> > + (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
> > +
>
> It's not that big a deal, but _[_A-Z]+ is reserved for the compiler.
i'm aware of that rule, but it hasn't really stopped us in the code base from
using the _xxx namespace. the sim-bits.h header in particular uses this to mark
the internal macros as such.
i'm certainly open to a diff convention of clearly conveying "this is internal"
if gdb has such a thing. although it too uses _xxx in a few places :).
-mike
On Tue, Jun 23, 2015 at 11:21 AM, Mike Frysinger <vapier@gentoo.org> wrote:
> On 22 Jun 2015 17:29, Doug Evans wrote:
>> On Sun, Jun 21, 2015 at 1:02 PM, Mike Frysinger wrote:
>> > Keeping track of the right printf formats for the various types can be
>> > a pretty big hassle, especially in common code which has to support a
>> > variety of bitsizes. Take a page from the existing standards and add
>> > a set of PRI macros which hide the details in a common header.
>> > ---
>> > sim/common/ChangeLog | 8 ++++++++
>> > sim/common/sim-types.h | 21 +++++++++++++++++++++
>> > 2 files changed, 29 insertions(+)
>> >
>> > diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
>> > index 722ad98..db67a1d 100644
>> > --- a/sim/common/ChangeLog
>> > +++ b/sim/common/ChangeLog
>> > @@ -1,5 +1,13 @@
>> > 2015-06-21 Mike Frysinger <vapier@gentoo.org>
>> >
>> > + * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
>> > + expanding target bitsizes into standard PRI formats.
>> > + (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
>> > + (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
>> > + (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
>> > +
>>
>> It's not that big a deal, but _[_A-Z]+ is reserved for the compiler.
>
> i'm aware of that rule, but it hasn't really stopped us in the code base from
> using the _xxx namespace. the sim-bits.h header in particular uses this to mark
> the internal macros as such.
>
> i'm certainly open to a diff convention of clearly conveying "this is internal"
> if gdb has such a thing. although it too uses _xxx in a few places :).
> -mike
How about a rule saying to avoid _[_A-Z] going forward,
and we'll fix the existing cases if/when we get to them.
?
On 23 Jun 2015 11:28, Doug Evans wrote:
> On Tue, Jun 23, 2015 at 11:21 AM, Mike Frysinger wrote:
> > On 22 Jun 2015 17:29, Doug Evans wrote:
> >> On Sun, Jun 21, 2015 at 1:02 PM, Mike Frysinger wrote:
> >> > Keeping track of the right printf formats for the various types can be
> >> > a pretty big hassle, especially in common code which has to support a
> >> > variety of bitsizes. Take a page from the existing standards and add
> >> > a set of PRI macros which hide the details in a common header.
> >> > ---
> >> > sim/common/ChangeLog | 8 ++++++++
> >> > sim/common/sim-types.h | 21 +++++++++++++++++++++
> >> > 2 files changed, 29 insertions(+)
> >> >
> >> > diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
> >> > index 722ad98..db67a1d 100644
> >> > --- a/sim/common/ChangeLog
> >> > +++ b/sim/common/ChangeLog
> >> > @@ -1,5 +1,13 @@
> >> > 2015-06-21 Mike Frysinger <vapier@gentoo.org>
> >> >
> >> > + * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
> >> > + expanding target bitsizes into standard PRI formats.
> >> > + (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
> >> > + (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
> >> > + (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
> >> > +
> >>
> >> It's not that big a deal, but _[_A-Z]+ is reserved for the compiler.
> >
> > i'm aware of that rule, but it hasn't really stopped us in the code base from
> > using the _xxx namespace. the sim-bits.h header in particular uses this to mark
> > the internal macros as such.
> >
> > i'm certainly open to a diff convention of clearly conveying "this is internal"
> > if gdb has such a thing. although it too uses _xxx in a few places :).
>
> How about a rule saying to avoid _[_A-Z] going forward,
> and we'll fix the existing cases if/when we get to them.
> ?
what's the proposed replacement ? :)
GDB__XXX & SIM__XXX ?
-mike
On Tue, Jun 23, 2015 at 2:58 PM, Mike Frysinger <vapier@gentoo.org> wrote:
> On 23 Jun 2015 11:28, Doug Evans wrote:
>> On Tue, Jun 23, 2015 at 11:21 AM, Mike Frysinger wrote:
>> > On 22 Jun 2015 17:29, Doug Evans wrote:
>> >> On Sun, Jun 21, 2015 at 1:02 PM, Mike Frysinger wrote:
>> >> > Keeping track of the right printf formats for the various types can be
>> >> > a pretty big hassle, especially in common code which has to support a
>> >> > variety of bitsizes. Take a page from the existing standards and add
>> >> > a set of PRI macros which hide the details in a common header.
>> >> > ---
>> >> > sim/common/ChangeLog | 8 ++++++++
>> >> > sim/common/sim-types.h | 21 +++++++++++++++++++++
>> >> > 2 files changed, 29 insertions(+)
>> >> >
>> >> > diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
>> >> > index 722ad98..db67a1d 100644
>> >> > --- a/sim/common/ChangeLog
>> >> > +++ b/sim/common/ChangeLog
>> >> > @@ -1,5 +1,13 @@
>> >> > 2015-06-21 Mike Frysinger <vapier@gentoo.org>
>> >> >
>> >> > + * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
>> >> > + expanding target bitsizes into standard PRI formats.
>> >> > + (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
>> >> > + (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
>> >> > + (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
>> >> > +
>> >>
>> >> It's not that big a deal, but _[_A-Z]+ is reserved for the compiler.
>> >
>> > i'm aware of that rule, but it hasn't really stopped us in the code base from
>> > using the _xxx namespace. the sim-bits.h header in particular uses this to mark
>> > the internal macros as such.
>> >
>> > i'm certainly open to a diff convention of clearly conveying "this is internal"
>> > if gdb has such a thing. although it too uses _xxx in a few places :).
>>
>> How about a rule saying to avoid _[_A-Z] going forward,
>> and we'll fix the existing cases if/when we get to them.
>> ?
>
> what's the proposed replacement ? :)
>
> GDB__XXX & SIM__XXX ?
> -mike
Hi.
I didn't want to impose anything, sometimes the leading _ can just be removed.
For the current patch, SIM__XXX is fine with me.
[if it's important to use something that denotes these as being local
to the file.
Anything beginning with SIM_ would be fine I think.]
@@ -1,5 +1,13 @@
2015-06-21 Mike Frysinger <vapier@gentoo.org>
+ * sim-types.h (_SIM_PRI_TB, __SIM_PRI_TB): New helper macros for
+ expanding target bitsizes into standard PRI formats.
+ (PRI_TW, PRIiTW, PRIxTW): New PRI target word defines.
+ (PRI_TA, PRIiTA, PRIxTA): New PRI target address defines.
+ (PRI_TF, PRIiTF, PRIxTF): New PRI target floating point defines.
+
+2015-06-21 Mike Frysinger <vapier@gentoo.org>
+
* sim-model.c (sim_model_init): Assert model is not NULL.
2015-06-21 Mike Frysinger <vapier@gentoo.org>
@@ -87,6 +87,11 @@ typedef unsigned64 unsigned_8;
typedef unsigned128 unsigned_16;
+/* Macros for printf. */
+#define _SIM_PRI_TB(t, b) __SIM_PRI_TB(t, b)
+#define __SIM_PRI_TB(t, b) PRI##t##b
+
+
/* for general work, the following are defined */
/* unsigned: >= 32 bits */
/* signed: >= 32 bits */
@@ -107,6 +112,10 @@ typedef unsigned16 unsigned_word;
typedef signed16 signed_word;
#endif
+#define PRI_TW(t) _SIM_PRI_TB(t, WITH_TARGET_WORD_BITSIZE)
+#define PRIiTW PRI_TW(i)
+#define PRIxTW PRI_TW(x)
+
/* Other instructions */
#if (WITH_TARGET_ADDRESS_BITSIZE == 64)
@@ -123,6 +132,10 @@ typedef signed16 signed_address;
#endif
typedef unsigned_address address_word;
+#define PRI_TA(t) _SIM_PRI_TB(t, WITH_TARGET_ADDRESS_BITSIZE)
+#define PRIiTA PRI_TA(i)
+#define PRIxTA PRI_TA(x)
+
/* IEEE 1275 cell size */
#if (WITH_TARGET_CELL_BITSIZE == 64)
@@ -135,6 +148,10 @@ typedef signed32 signed_cell;
#endif
typedef signed_cell cell_word; /* cells are normally signed */
+#define PRI_TC(t) _SIM_PRI_TB(t, WITH_TARGET_CELL_BITSIZE)
+#define PRIiTC PRI_TC(i)
+#define PRIxTC PRI_TC(x)
+
/* Floating point registers */
#if (WITH_TARGET_FLOATING_POINT_BITSIZE == 64)
@@ -144,4 +161,8 @@ typedef unsigned64 fp_word;
typedef unsigned32 fp_word;
#endif
+#define PRI_TF(t) _SIM_PRI_TB(t, WITH_TARGET_FLOATING_POINT_BITSIZE)
+#define PRIiTF PRI_TF(i)
+#define PRIxTF PRI_TF(x)
+
#endif