Ой, не знаю... Klen-овая сборка от 20091127 #include <stdint.h>
#define _rev(var) \
(__extension__({ \
uint32_t __result = var; \
__asm__ __volatile__ ( \
"rev %0, %0" \
: "+r" (__result) \
: \
); \
__result; \
}))
void foo(uint32_t *dst, uint32_t *src, uint32_t len)
{
while(len--)
*dst++ = _rev(*src++);
}
void moo(uint32_t *dst, uint32_t *src, uint32_t len)
{
while(len--)
*dst++ = *src++;
}
_rev.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <foo>:
0: b152 cbz r2, 18 <foo+0x18>
2: 2300 movs r3, #0
4: f851 c003 ldr.w ip, [r1, r3]
8: fa9c fc8c rev.w ip, ip
c: f840 c003 str.w ip, [r0, r3]
10: 3304 adds r3, #4
12: f112 32ff adds.w r2, r2, #4294967295
16: d1f5 bne.n 4 <foo+0x4>
18: 4770 bx lr
1a: bf00 nop
0000001c <moo>:
1c: b142 cbz r2, 30 <moo+0x14>
1e: 2300 movs r3, #0
20: f851 c003 ldr.w ip, [r1, r3]
24: f840 c003 str.w ip, [r0, r3]
28: 3304 adds r3, #4
2a: f112 32ff adds.w r2, r2, #4294967295
2e: d1f7 bne.n 20 <moo+0x4>
30: 4770 bx lr
32: bf00 nop
Вживую именно асм-вставку я не запускал, но этой сборкой мигание светодиодом собирается и работает :-)
arm-kgp-eabi-gcc.exe -c -O2 -mcpu=cortex-m3 -mthumb _rev.c arm-kgp-eabi-objdump.exe -d _rev.o >_rev.dump
-
- ну то под gcc видно работает - koyodza(10.02.2010 13:12)