[elektro] C cimke milyen adattípusnak számít?
Palasik Sandor
palasik at mail.datanet.hu
Thu Jan 24 23:30:22 CET 2008
> Sajnos a switch akármennyire is optimalizál sajnos nem modositja az
> eljarásat, egy tömbbös elágazás valahogy igy néz ki asm-ben
>
> and w0,#0x7,w0
> sl w0,#1,w0
> add #jumptablestart,w0
> goto w0
> jumptablestart:
> goto A0
> goto A1
> ....
> goto A7
>
> ha nagyon inteligens akarok lenni akkor az elsö sort helyettesítem a 2
> sorral egy komparálássak és egy hibas index esetén való ugrassal.
> Ennel gyorsabbat és rövidebbet nem hiszem hogy lehet irni. Raadasul
> böven elfér nem felejtő memória területen, nem ugy mint a C
> esetén
> ami hasonlo dolgokat csak reszletesen tamogat....
Ezt az eljárásmódosítást és részletesen támogatást nem értem.
Próbaképpen egy régi, 16 bites MS C fordítóval csináltam egy 8 felé ágazó
switchet. A következő kód lett belőle:
cmp ax,7
ja $SB175
add ax,ax
xchg ax,bx
jmp WORD PTR cs:$L186[bx]
nop
$L186:
DW $SB175
DW $SC179
DW $SC180
DW $SC181
DW $SC182
DW $SC183
DW $SC184
DW $SC185
Ha nagyon spórolok, akkor kihagyhatom az első feltételes ugrást, ha biztos
vagyok, hogy nem kaphat hibás értéket. Nem olyan tragikus ez.
De ha ennyire számít minden órajel, valószínűleg lehet keverni asm
utasításokat a C forrásba a kritikus helyeken.
Palasik Sándor
More information about the Elektro
mailing list