Re: Intermediate void* casts

Geoff Wing <[email protected]>
Newsgroups gmane.os.netbsd.devel.general
Organization PrimeNet Computer Consultants
Message-ID <[email protected]>
Martin Husemann <[email protected]> typed:
: On Sun, Aug 10, 2003 at 05:15:43PM -0700, Bill Studenmund wrote:
:> I'm not so sure about that. Can/will the compiler notice that you're only
:> using half of a 64-bit value? Otherwise, by making this change, you're
: If gcc does miss the obvious, the 32bit code might be slightly slower
: than the old code. I can't test that right now, anyone with i386 gcc 3.3.1
: around? If the value is spread accross two 32 bit registers, and the code

Works OK.  On i386:

compiled -O2 with                       compiled -O2 with
gcc 2.95.3 (NetBSD nb4)                 gcc 3.3.1 (from NetBSD src yesterday)

00000000 <bswap64>:			00000000 <bswap64>:
   0: 55          push   %ebp		   0: 55          push   %ebp
   1: 89 e5       mov    %esp,%ebp	   1: 89 e5       mov    %esp,%ebp
   3: 53          push   %ebx	      |	   3: 8b 45 08    mov    0x8(%ebp),%e
   4: 8b 45 08    mov    0x8(%ebp),%e |	   6: 53          push   %ebx
   7: 8b 55 0c    mov    0xc(%ebp),%e	   7: 8b 55 0c    mov    0xc(%ebp),%e
   a: 89 c1       mov    %eax,%ecx	   a: 89 c1       mov    %eax,%ecx
   c: 66 c1 c9 08 ror    $0x8,%cx	   c: 66 c1 c9 08 ror    $0x8,%cx
  10: c1 c9 10    ror    $0x10,%ecx	  10: c1 c9 10    ror    $0x10,%ecx
  13: 66 c1 c9 08 ror    $0x8,%cx	  13: 66 c1 c9 08 ror    $0x8,%cx
  17: 89 d0       mov    %edx,%eax    |	  17: 89 d3       mov    %edx,%ebx
  19: 31 d2       xor    %edx,%edx    |	  19: 66 c1 cb 08 ror    $0x8,%bx
  1b: 66 c1 c8 08 ror    $0x8,%ax     |	  1d: c1 cb 10    ror    $0x10,%ebx
  1f: c1 c8 10    ror    $0x10,%eax   |	  20: 66 c1 cb 08 ror    $0x8,%bx
  22: 66 c1 c8 08 ror    $0x8,%ax     |	  24: 31 c0       xor    %eax,%eax
  26: 31 db       xor    %ebx,%ebx    |	  26: 89 ca       mov    %ecx,%edx
  28: 89 cb       mov    %ecx,%ebx    |	  28: 89 d9       mov    %ebx,%ecx
  2a: 31 c9       xor    %ecx,%ecx    |	  2a: 31 db       xor    %ebx,%ebx
  2c: 31 d2       xor    %edx,%edx    |	  2c: 09 da       or     %ebx,%edx
  2e: 09 c1       or     %eax,%ecx    |	  2e: 09 c8       or     %ecx,%eax
  30: 09 d3       or     %edx,%ebx    |	  30: 8b 1c 24    mov    (%esp,1),%eb
  32: 89 c8       mov    %ecx,%eax    |	  33: c9          leave  
  34: 89 da       mov    %ebx,%edx    |	  34: c3          ret    
  36: 5b          pop    %ebx	      <
  37: c9          leave  	      <
  38: c3          ret    	      <

Following is how gcc 3.4 20030806 (experimental) with -O2 makes it:

00000000 <bswap64>:
   0:	55                   	push   %ebp
   1:	89 e5                	mov    %esp,%ebp
   3:	8b 45 08             	mov    0x8(%ebp),%eax
   6:	53                   	push   %ebx
   7:	8b 55 0c             	mov    0xc(%ebp),%edx
   a:	89 c1                	mov    %eax,%ecx
   c:	66 c1 c9 08          	ror    $0x8,%cx
  10:	c1 c9 10             	ror    $0x10,%ecx
  13:	66 c1 c9 08          	ror    $0x8,%cx
  17:	89 d3                	mov    %edx,%ebx
  19:	66 c1 cb 08          	ror    $0x8,%bx
  1d:	c1 cb 10             	ror    $0x10,%ebx
  20:	66 c1 cb 08          	ror    $0x8,%bx
  24:	31 c0                	xor    %eax,%eax
  26:	89 ca                	mov    %ecx,%edx
  28:	89 d9                	mov    %ebx,%ecx
  2a:	31 db                	xor    %ebx,%ebx
  2c:	09 da                	or     %ebx,%edx
  2e:	09 c8                	or     %ecx,%eax
  30:	5b                   	pop    %ebx
  31:	c9                   	leave  
  32:	c3                   	ret    

Regards,
-- 
Geoff Wing : <[email protected]>
Rxvt Stuff : <[email protected]>
Zsh Stuff  : <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.