+#define mfdcrx(rn) \
+       ({      \
+               unsigned long rval; \
+               asm volatile("mfdcrx %0,%1" : "=r"(rval) : "g"(rn)); \
+               rval; \
+       })

"g" is never correct on PowerPC, you want "r" here.  You can write
this as a static inline btw, you only need the #define stuff when
there is an "i" constraint involved.

I think you can still use static inlines even when a
constraint is one that requires a compile time constant.

Marking a function inline does not guarantee the compiler will
perform inline substitution on it, which you need here.  I don't
think it's a problem with recent GCC in the context of the Linux
kernel though, if you use __always_inline that is.


Segher

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to