This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Bryce, better late than never.. On Fri, 6 Apr 2007, Bryce Schober wrote: > 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. I see two solutions to your problem: 1. you can directly specify two suitable registers in the assembler part. You then also need to list those registers in the clobber list argument of __asm__(). See the gcc info manual, Extended Asm for the exact syntax. 2. you can use explicit register variables like this: register int r1 asm("r1"); register int r2 asm("r2"); I actually don't know which would be preferable. The second one might be nicer for long-term maintainance / portability as it is more obvious than using __asm__'s clobber list. Regards, Marius -- Marius Groeger <mgroeger@sysgo.com> SYSGO AG Embedded and Real-Time Software Voice: +49 6136 9948 0 FAX: +49 6136 9948 10 www.sysgo.com | www.elinos.com | www.osek.de | www.pikeos.com Handelsregister: HRB Mainz 90 HRB 8066 Vorstand: Knut Degen, Robert Kaiser, Detlev Schaadt Aufsichtsratsvorsitzender: Dr. Thomas Hoch USt(VAT)-Id-Nr.: DE 149062328 -- For unsubscribe information see http://sourceware.org/lists.html#faq
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |