[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