[openib-general] [PATCH 3/7] AMSO1100 Work Request Definitions	REPOST
    Tom Tucker 
    tom at opengridcomputing.com
       
    Fri Mar 24 11:00:55 PST 2006
    
    
  
On Fri, 2006-03-24 at 10:15 -0800, Roland Dreier wrote:
>     Sean> Does anyone know if using packed when it's not needed
>     Sean> results in less efficient code?
> 
> Yes, it definitely does on some (non-mainstream) architectures.  We
> talked about this before I think...
> 
I don't know that we still need these attributes. I just haven't had
time to remove and test. These header files used to be used by both the
driver and the firmware and the firmware compiler needed them...I don't
think the host does.
> ...ah yes: http://article.gmane.org/gmane.linux.drivers.openib/8396
> 
> The assembly there came from compiling with no optimization, but if
> anything the packed version in that code:
> 
>     struct foo { int a; };
>     struct bar { int b; } __attribute__((packed));
>     
>     int c(struct foo *x) { return x->a; }
>     int d(struct bar *x) { return x->b; }
> 
> looks worse with -O2.  ia64 compiled with -O2 goes from one bundle to six:
> 
>     0000000000000000 <c>:
>        0:	13 40 00 40 10 10 	[MBB]       ld4 r8=[r32]
>        6:	00 00 00 00 10 80 	            nop.b 0x0
>        c:	08 00 84 00       	            br.ret.sptk.many b0;;
>     
>     0000000000000010 <d>:
>       10:	09 70 00 40 00 21 	[MMI]       mov r14=r32
>       16:	f0 10 80 00 42 00 	            adds r15=2,r32
>       1c:	34 00 01 84       	            adds r32=3,r32;;
>       20:	19 80 04 1c 00 14 	[MMB]       ld1 r16=[r14],1
>       26:	f0 00 3c 00 20 00 	            ld1 r15=[r15]
>       2c:	00 00 00 20       	            nop.b 0x0;;
>       30:	09 70 00 1c 00 10 	[MMI]       ld1 r14=[r14]
>       36:	80 00 80 00 20 e0 	            ld1 r8=[r32]
>       3c:	f1 78 bd 53       	            shl r15=r15,16;;
>       40:	01 00 00 00 01 00 	[MII]       nop.m 0x0
>       46:	e0 70 dc ee 29 00 	            shl r14=r14,8
>       4c:	81 38 9d 53       	            shl r8=r8,24;;
>       50:	0b 70 40 1c 0e 20 	[MMI]       or r14=r16,r14;;
>       56:	f0 70 3c 1c 40 00 	            or r15=r14,r15
>       5c:	00 00 04 00       	            nop.i 0x0;;
>       60:	11 00 00 00 01 00 	[MIB]       nop.m 0x0
>       66:	80 78 20 1c 40 80 	            or r8=r15,r8
>       6c:	08 00 84 00       	            br.ret.sptk.many b0;;
> 
> and sparc64 goes similarly crazy:
> 
>     0000000000000000 <c>:
>        0:	81 c3 e0 08 	retl 
>        4:	d0 42 00 00 	ldsw  [ %o0 ], %o0
>        8:	30 68 00 06 	b,a   %xcc, 20 <d>
> 
>     0000000000000020 <d>:
>       20:	c6 0a 00 00 	ldub  [ %o0 ], %g3
>       24:	c2 0a 20 01 	ldub  [ %o0 + 1 ], %g1
>       28:	c4 0a 20 02 	ldub  [ %o0 + 2 ], %g2
>       2c:	87 28 f0 18 	sllx  %g3, 0x18, %g3
>       30:	d0 0a 20 03 	ldub  [ %o0 + 3 ], %o0
>       34:	83 28 70 10 	sllx  %g1, 0x10, %g1
>       38:	82 10 40 03 	or  %g1, %g3, %g1
>       3c:	85 28 b0 08 	sllx  %g2, 8, %g2
>       40:	84 10 80 01 	or  %g2, %g1, %g2
>       44:	90 12 00 02 	or  %o0, %g2, %o0
>       48:	81 c3 e0 08 	retl 
>       4c:	91 3a 20 00 	sra  %o0, 0, %o0
>       50:	30 68 00 04 	b,a   %xcc, 60 <d+0x40>
> 
> Note that mainstream architectures that handle unaligned accesses
> sanely do fine with packed.  eg ppc64:
> 
>     0000000000000000 <.c>:
>        0:	e8 63 00 02 	lwa     r3,0(r3)
>        4:	4e 80 00 20 	blr
>     
>     0000000000000014 <.d>:
>       14:	e8 63 00 02 	lwa     r3,0(r3)
>       18:	4e 80 00 20 	blr
> 
> x86_64:
> 
>     0000000000000000 <c>:
>        0:	8b 07                	mov    (%rdi),%eax
>        2:	c3                   	retq   
>     
>     0000000000000010 <d>:
>       10:	8b 07                	mov    (%rdi),%eax
>       12:	c3                   	retq   
> 
>  - R.
    
    
More information about the general
mailing list