C nebo ASM?
Slavomir Skopalik
skopalik@elektlabs.cz
Pátek Květen 22 12:44:16 CEST 2009
Ukazka GCC na platforme ARM 7:
Poznamka:
Kod v C neni zrovna dobre napasan pro prenos na jine platformy.
Pokud to neni nutne jinak, tak pouzivat typ int, ktery je nativni a
kompilator pak neprovadi
zbytecne operace aby mu typ "sedl" do registru.
Slavek
Upraveny C kod:
unsigned char Pole[32] = {
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1
};
int Soucet;
void mainHW(void) {
unsigned char* uc=Pole;
for (int Ukazatel = 0; Ukazatel < 32; ++Ukazatel) {
Soucet += *uc++;
}
}
GCC 4.1 ARM 7
.global _Z6mainHWv
.type _Z6mainHWv, %function
_Z6mainHWv:
.LFB19:
.file 1 "../main.cpp"
.loc 1 77 0
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
ldr ip, .L6
ldr r0, .L6+4
ldrb r1, [ip, #0] @ zero_extendqisi2
mov r2, #0
.L2:
ldrb r3, [r0, r2] @ zero_extendqisi2
add r2, r2, #1
add r3, r3, r1
cmp r2, #32
and r1, r3, #255
bne .L2
strb r1, [ip, #0]
bx lr
Upraveny kod:
ldr ip, .L6
ldr r2, .L6+4
ldr r1, [ip, #0]
add r0, r2, #32
.L2:
ldrb r3, [r2, #-1] @ zero_extendqisi2
add r2, r2, #1
cmp r2, r0
add r1, r1, r3
bne .L2
str r1, [ip, #0]
bx lr
-----Original Message-----
From: hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] On
Behalf Of Michal HW
Sent: Friday, May 22, 2009 9:46 AM
To: HW-news
Subject: Re: C nebo ASM?
PIC18 STD
volatile unsigned char Pole[32] = {
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1
};
unsigned char Soucet;
void main(void) {
auto unsigned char Ukazatel;
for ( Ukazatel = 0; Ukazatel < 32; ++Ukazatel) {
Soucet += Pole[Ukazatel];
}
}
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20090522/8424958c/attachment-0002.htm
Další informace o konferenci Hw-list