Hello,
I am currently working on two inline routines to read and write
data to
addresses >64k.
This is the 'write' routine:
static inline __attribute__((always_inline)) void
flash_write(uint32_t addr,
uint16_t val){
__asm__ __volatile__ (
"dint \n"
"nop \n"
"pushx.a r15 \n"
"movx.a %[addr], r15 \n"
"movx %[val], @r15 \n"
"popx.a r15 \n"
"eint \n"
:
:[addr] "r"(addr), [val] "r"(val)
);
}
and this is the asm code it generates:
static inline __attribute__((always_inline)) void
flash_write(uint32_t addr,
uint16_t val){
__asm__ __volatile__ (
315c: 2e 44 mov @r4, r14
315e: 1f 44 02 00 mov 2(r4),
r15 ;0x0002(r4)
3162: 1d 44 04 00 mov 4(r4),
r13 ;0x0004(r4)
3166: 32 c2 dint
3168: 03 43 nop
316a: 00 18 .word 0x1800; ????
316c: 4f 12 push.b r15
316e: 00 18 .word 0x1800; ????
3170: 4f 4e mov.b r14, r15
3172: 40 18 .word 0x1840; ????
3174: 8f 4d 00 00 mov r13,
0(r15) ;0x0000(r15)
3178: 00 18 .word 0x1800; ????
317a: 7f 41 pop.b r15
317c: 32 d2 eint
uint32_t address = 0x11110UL;
uint16_t val = 0x33;
flash_write(address, val);
}
The main question is why is used the simple MOV instruction
instead of the
extended version?
Regards,
Alex
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts.
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users