Как это не поддерживает? Вот две простых функции, скомпилированные GCC 3.33
00000000 :
void wr_long (unsigned long addr, unsigned long val)
{
0: e1a0c00d mov ip, sp
4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
8: e24cb004 sub fp, ip, #4 ; 0x4
c: e24dd008 sub sp, sp, #8 ; 0x8
10: e50b0010 str r0, [fp, -#16]
14: e50b1014 str r1, [fp, -#20]
*(volatile unsigned long*)(addr) = val;
18: e51b2010 ldr r2, [fp, -#16]
1c: e51b3014 ldr r3, [fp, -#20]
20: e5823000 str r3, [r2]
}
24: e91ba800 ldmdb fp, {fp, sp, pc}
00000028 :
void wr_short (unsigned long addr, unsigned short val)
{
28: e1a0c00d mov ip, sp
2c: e92dd800 stmdb sp!, {fp, ip, lr, pc}
30: e24cb004 sub fp, ip, #4 ; 0x4
34: e24dd008 sub sp, sp, #8 ; 0x8
38: e50b0010 str r0, [fp, -#16]
3c: e1a03001 mov r3, r1
40: e14b31b2 strh r3, [fp, -#18]
*(volatile unsigned short*)(addr) = val;
44: e51b2010 ldr r2, [fp, -#16]
48: e15b31b2 ldrh r3, [fp, -#18]
4c: e1c230b0 strh r3, [r2]
}
50: e91ba800 ldmdb fp, {fp, sp, pc}