Message ID | 5653740C.9010507@acm.org |
---|---|
State | New |
Headers | show |
On 11/23/2015 01:16 PM, Nathan Sidwell wrote: > The gcc.dg/sso tests gratuitously fail on PTX because they use IO > facilities that don't exist there. This patch changes the dumping to > use the putchar function call (and not a macro), and not use fputs. > > With this they all pass. > > I'm not quite sure where the maintainer boundaries lie for this kind of > fix. Any objections? In the 'put' function, why not just make all targets go through putchar? It's not like this is performance critical code and I don't think it compromises any of the tests, does it? jeff
On 11/23/15 15:41, Jeff Law wrote: > In the 'put' function, why not just make all targets go through putchar? It's > not like this is performance critical code and I don't think it compromises any > of the tests, does it? I contemplated that, but wondered if someone would complain. I'm happy either way. nathan
On 11/23/2015 01:54 PM, Nathan Sidwell wrote: > On 11/23/15 15:41, Jeff Law wrote: > > >> In the 'put' function, why not just make all targets go through >> putchar? It's not like this is performance critical code and I >> don't think it compromises any of the tests, does it? > > I contemplated that, but wondered if someone would complain. I'm > happy either way. Let's go with a single codepath here. The one that ought to work for all targets is putchar. Thanks, jeff
Hi! On Mon, 23 Nov 2015 15:16:12 -0500, Nathan Sidwell <nathan@acm.org> wrote: > The gcc.dg/sso tests gratuitously fail on PTX because they use IO facilities > that don't exist there. This patch changes the dumping to use the putchar > function call (and not a macro), and not use fputs. > void put (const char s[]) > { > +#ifdef __nvptx__ > + int i; > + for (i = 0; s[i]; i++) > + putchar (s[i]); > +#else > fputs (s, stdout); > +#endif > } Doesn't __builtin_printf work? More generally, I've been wondering before, whether we should improve the I/O support in nvptx' newlib. I suppose (but have not verified) that the _stdout member of _REENT (struct _reent) will by default be initilized to &__sf_fake_stdout (and similar for stderr), which we could detect in nvptx I/O functions, and in such cases use the PTX printf function. Or something along these lines. Grüße Thomas
2015-11-23 Nathan Sidwell <nathan@acm.org> * gcc.dg/sso/dump.h: Force IO to be putchar function call on nvptx. Index: gcc/testsuite/gcc.dg/sso/dump.h =================================================================== --- gcc/testsuite/gcc.dg/sso/dump.h (revision 230718) +++ gcc/testsuite/gcc.dg/sso/dump.h (working copy) @@ -1,3 +1,9 @@ +#ifdef __nvptx__ +/* Force function call. NVPTX's IO is extremely limited. */ +#undef putchar +#define putchar (putchar) +#endif + void dump (void *p, unsigned int len) { const char digits[17] = "0123456789abcdef"; @@ -14,7 +20,13 @@ void dump (void *p, unsigned int len) void put (const char s[]) { +#ifdef __nvptx__ + int i; + for (i = 0; s[i]; i++) + putchar (s[i]); +#else fputs (s, stdout); +#endif } void new_line (void)