question on inline assembly and long long values

Chris Friesen cfriesen at
Thu Apr 7 06:01:20 EST 2005

Kumar Gala wrote:
> I'm having a similar need (for a different purpose), this post might be 
> useful:

Sweet!  My new code is now shorter *and* more efficient:

static inline unsigned long long getmsr()
	unsigned long long val;
         asm volatile( \
                 "mfmsr  %L0               \n\t" \
                 "rldicl %0,%L0,32,32       \n\t" \
                 "rldicl %L0,%L0,0,32        \n\t" \
                 : "=r" (val));
	return val;

This results in

unsigned long long a = asdf3();
unsigned long long b = asdf3();

being compiled to

	mfmsr  6
	rldicl 5,6,32,32
	rldicl 6,6,0,32
	mfmsr  8
	rldicl 7,8,32,32
	rldicl 8,8,0,32

Which is about as good as it gets...



More information about the Linuxppc-dev mailing list