This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [tree-ssa] Merge status


"Joseph S. Myers" <jsm@polyomino.org.uk> writes:

> On Wed, 17 Mar 2004, Andreas Jaeger wrote:
>
>> These two (and similar ones):
>> 
>> #define IXDR_GET_INT32(buf)           ((int32_t)ntohl((uint32_t)*(buf)++))
>> #define IXDR_PUT_INT32(buf, v)        (*(buf)++ = (int32_t)htonl((uint32_t)(v)))
>
> These don't seem to use lvalue casts (and presume that the buf argument
> points to integers of the right width so that they don't need to).
>
> IXDR_GET_LONG and IXDR_PUT_LONG use such casts, but I don't really see the
> need for them to do so; it looks like they are (apart from being obsolete)  
> meant to have exactly the same interface as IXDR_GET_INT32 and
> IXDR_PUT_INT32, only return long if that differs from int32_t.  In
> particular, all the uses of them in libc/sunrpc have buf of type int32_t
> *, which doesn't need the casts.  If these macros are documented the 
> documentation isn't in glibc, but does anything break if you define
>
> #define IXDR_GET_LONG(buf) ((long)IXDR_GET_INT32(buf))

If I use this definition, the assembler code on AMD64 looks different:

@@ -148,7 +148,7 @@
  1c0:  8b 00                   mov    (%rax),%eax
  1c2:  31 f6                   xor    %esi,%esi
  1c4:  0f c8                   bswap  %eax
- 1c6:  89 c0                   mov    %eax,%eax
+ 1c6:  48 98                   cltq   
  1c8:  48 89 45 00             mov    %rax,0x0(%rbp)
  1cc:  8b 03                   mov    (%rbx),%eax
  1ce:  48 83 c3 04             add    $0x4,%rbx


Andreas
-- 
 Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
  SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]