[PATCH] powerpc: Don't use long for 32-bit temp variables in spin lock ops
Paul Mackerras
paulus at samba.org
Wed Jun 13 14:33:03 EST 2007
Olof Johansson writes:
> The spinlock ops have long as their return type (as well as for some
> of the temporary types internally). All locks are 32-bit, so it makes
> no sense to do 64-bit ops on them.
>
> For example, this is how my compiler built _spin_lock() for me:
>
> c0000000004b2050: li r0,0
> c0000000004b2054: stb r0,460(r13)
> c0000000004b2058: lwz r0,8(r13)
> c0000000004b205c: lwarx r9,0,r3
> c0000000004b2060: cmpwi r9,0
> c0000000004b2064: bne- c0000000004b2078 <._spin_lock+0x28>
> c0000000004b2068: stwcx. r0,0,r3
> c0000000004b206c: nop
> c0000000004b2070: bne+ c0000000004b205c <._spin_lock+0xc>
> c0000000004b2074: isync
> c0000000004b2078: cmpdi cr7,r9,0
> c0000000004b207c: .long 0x4dfe0020
> c0000000004b2080: mr r1,r1
> c0000000004b2084: lwz r0,0(r3)
> c0000000004b2088: cmpdi cr7,r0,0
> c0000000004b208c: bne+ cr7,c0000000004b2080 <._spin_lock+0x30>
> c0000000004b2090: mr r2,r2
> c0000000004b2094: b c0000000004b2058 <._spin_lock+0x8>
>
> Note the cmpdi at ..78 when r9 was loaded with lwarx.
That's OK; the lwarx is defined to zero-extend the value to 64 bits.
Or are you implying that cmpdi is slower than cmpwi on some 64-bit
processors? :)
Paul.
More information about the Linuxppc-dev
mailing list