So how should I go about wrapping ldm / stm for usage in C land? I tried: typedef struct { UNS_32 reg[2]; } arm_2_registers_t; static inline arm_2_registers_t arm_2_registers_load( UNS_32 *src_addr_ptr ) { arm_2_registers_t result; __asm__ ( "ldmia %0, {%1,%2} \n\t" : "+r" (src_addr_ptr), "=r" (result.reg[0]), "=r" (result.reg[1]) ); return( result ); } That seems to work fine until the compiler decides to use registers for %1 and %2 that aren't in ascending order. I've examined the assembly constraints and I don't see anything obvious. -- Bryce Schober