C nebo ASM?
Jan Waclawek
konfera@efton.sk
Pátek Květen 22 11:32:25 CEST 2009
SDCC 2.9.1 -mpic16:
_main:
; .line 14; uu2.c for ( Ukazatel = 0; Ukazatel < 32; ++Ukazatel) {
CLRF r0x00
_00105_DS_:
MOVLW 0x20
SUBWF r0x00, W
BC _00109_DS_
; .line 16; uu2.c Soucet += Pole[Ukazatel];
MOVLW LOW(_Pole)
ADDWF r0x00, W
MOVWF r0x01
CLRF r0x02
MOVLW HIGH(_Pole)
ADDWFC r0x02, F
MOVFF r0x01, FSR0L
MOVFF r0x02, FSR0H
MOVFF INDF0, r0x01
MOVF r0x01, W
BANKSEL _Soucet
ADDWF _Soucet, F, B
; .line 14; uu2.c for ( Ukazatel = 0; Ukazatel < 32; ++Ukazatel) {
INCF r0x00, F
BRA _00105_DS_
_00109_DS_:
RETURN
Pre ostatne platformy (skusil som '51 aj Z80) to SDCC preklada takmer rovnako - samotne optimalizacie na urovni algoritmov su viac-menej nezavisle od platformy (inak su tie optimalizacie, co robi, popisane v dokumentacii - nie je to zase nic prevratne).
----------------------
avr-gcc (AVR)
15 0000 9091 0000 lds r25,Soucet
16 0004 20E0 ldi r18,lo8(0)
17 0006 30E0 ldi r19,hi8(0)
18 .L2:
19 0008 F901 movw r30,r18
20 000a E050 subi r30,lo8(-(Pole))
21 000c F040 sbci r31,hi8(-(Pole))
22 000e 8081 ld r24,Z
23 0010 980F add r25,r24
24 0012 2F5F subi r18,lo8(-(1))
25 0014 3F4F sbci r19,hi8(-(1))
26 0016 2032 cpi r18,32
27 0018 3105 cpc r19,__zero_reg__
28 001a 01F4 brne .L2
29 001c 9093 0000 sts Soucet,r25
30 /* epilogue: frame size=0 */
31 0020 0895 ret
--------------------------
CodeVision (AVR)
; 0000 000E for ( Ukazatel = 0; Ukazatel < 32; ++Ukazatel) {
; Ukazatel -> R17
00006e e010 LDI R17,LOW(0)
_0x5:
00006f 3210 CPI R17,32
000070 f460 BRSH _0x6
; 0000 000F
; 0000 0010 Soucet += Pole[Ukazatel];
000071 2da5 MOV R26,R5
000072 27bb CLR R27
000073 2fe1 MOV R30,R17
000074 e0f0 LDI R31,0
000075 5ae0 SUBI R30,LOW(-_Pole)
000076 4ffe SBCI R31,HIGH(-_Pole)
000077 81e0 LD R30,Z
000078 e0f0 LDI R31,0
000079 0fea ADD R30,R26
00007a 2e5e MOV R5,R30
; 0000 0011 }
00007b 5f1f SUBI R17,-LOW(1)
00007c cff2 RJMP _0x5
_0x6:
; 0000 0012
; 0000 0013 }
_0x7:
00007d cfff RJMP _0x7
------------------
Este som skusil Dunfield C51, ale to je cista hroza, ani to sem nejdem posielat (je to napokon dost obskurny prekladac).
Keila tu momentalne nemam, ale to by mohol skusit niekto kto ho ma poruke.
Zaver: toto zda sa ziadny jednocipovy kompilator neriesi ako (auto)inkrementovany pointer.
wek
Další informace o konferenci Hw-list