On Tue, Aug 1, 2017 at 10:57 PM, Segher Boessenkool <seg...@kernel.crashing.org> wrote: > On Mon, Jul 31, 2017 at 07:10:15PM +1000, Michael Ellerman wrote: >> And ___PPC_RA() is not quite right. The L field is only 2 bits wide, not >> the 5 that ___PPC_RA() allows. >> >> We don't have a __PPC_L() macro, because L fields vary in size and >> location. So I think you're best of open coding it, eg: >> >> +#define PPC_DARN(t, l) stringify_in_c(.long PPC_INST_DARN | \ >> + __PPC_RT(t) | \ >> + (((l) & 0x3) << 16)) > > It would be better if you could do a compile-time error if the L value > is out of range. Hrm, nothing else does such checking either? >
Yeah currently the only checks are whether the register value is valid, using the __PPC_R{A,B,S,T} macros. However, we can't use these macros for inline asm because we're passing a variable into it so the pre-processor attempts to look for register %0 which breaks it. (Have to use triple underscore versions) We could add more checking to validate the L value, but I don't know how much of an issue it currently is. A question for mpe I guess. Thanks, Matt > > Segher