On 4/10/07, Andrew Haley <aph@xxxxxxxxxxx> wrote:
Sure, but there's nothing to stop him picking two named register variables.
Following Andrew's hint, the following works: typedef struct { int reg[2]; } arm_2_registers_t; static inline arm_2_registers_t arm_2_registers_load( int *src_addr_ptr ) { register int result_0 __asm__ ("r3"); register int result_1 __asm__ ("r4"); arm_2_registers_t result; __asm__ __volatile__ ( "ldmia %0, {%1,%2} \n\t" : "+r" (src_addr_ptr), "=r" (result_0), "=r" (result_1) ); result.reg[0] = result_0; result.reg[1] = result_1; return( result ); } It's still pretty sub-optimal, though, since the registers have to be specified, which could lead to a bunch of register-to-register moving when using several functions like this. It'd be a bit better as a macro that could take the register names as arguments. It's too bad that the assembler can't just make the right choice for us... It doesn't seem like *that* hard a problem... -- Bryce Schober