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