[PATCH/RFC] sim: common: add PRI printf defines

Message ID 1434909729-6766-1-git-send-email-vapier@gentoo.org
State Superseded
Delegated to: Mike Frysinger
Headers

Commit Message

Mike Frysinger June 21, 2015, 6:02 p.m. UTC
  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

Doug Evans June 22, 2015, 10:29 p.m. UTC | #1
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.
  
Doug Evans June 22, 2015, 11:50 p.m. UTC | #2
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.
  
Mike Frysinger June 23, 2015, 4:21 p.m. UTC | #3
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
  
Doug Evans June 23, 2015, 4:28 p.m. UTC | #4
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.
?
  
Mike Frysinger June 23, 2015, 7:58 p.m. UTC | #5
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
  
Doug Evans June 23, 2015, 8:07 p.m. UTC | #6
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.]
  

Patch

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.
+
+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>
diff --git a/sim/common/sim-types.h b/sim/common/sim-types.h
index 862f4e0..a64f644 100644
--- a/sim/common/sim-types.h
+++ b/sim/common/sim-types.h
@@ -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