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] |