etc:teach:diplomants:projects:2009:gccvec
Differences
This shows you the differences between two versions of the page.
| etc:teach:diplomants:projects:2009:gccvec [2008/02/18 00:57] – создано zps | etc:teach:diplomants:projects:2009:gccvec [2008/02/24 03:07] (current) – zps | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| [[ etc: | [[ etc: | ||
| - | FIXME написать план | + | |
| + | |||
| + | ===== Ассемблер IA-64 ===== | ||
| + | |||
| + | |||
| + | Чтобы хоть как-то въехать и подружиться с этим зверем решил разобрать пример (: | ||
| + | |||
| + | <code c> | ||
| + | #define N 16 | ||
| + | |||
| + | float S[2*N]; | ||
| + | float M[N]; | ||
| + | |||
| + | void decoder() | ||
| + | { | ||
| + | int i; | ||
| + | for(i=0; i<N; i++) | ||
| + | M[i]=S[i]/2 + S[i]*2; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code asm> | ||
| + | .file " | ||
| + | .pred.safe_across_calls p1-p5, | ||
| + | .sdata | ||
| + | .align 8 | ||
| + | .LC0: | ||
| + | data4 | ||
| + | data4 | ||
| + | .align 8 | ||
| + | .LC1: | ||
| + | data4 | ||
| + | data4 | ||
| + | .text | ||
| + | .align 16 | ||
| + | .global decoder# | ||
| + | .type | ||
| + | .proc decoder# | ||
| + | decoder: | ||
| + | .regstk 0, 0, 0, 0 | ||
| + | .prologue | ||
| + | .body | ||
| + | .mmi | ||
| + | addl r14 = @ltoffx(S# | ||
| + | addl r15 = @gprel(.LC1), | ||
| + | addl r16 = @gprel(.LC0), | ||
| + | ;; | ||
| + | .mmi | ||
| + | ld8.mov r14 = [r14], S# | ||
| + | ldf8 f10 = [r15] | ||
| + | nop 0 | ||
| + | .mii | ||
| + | ldf8 f11 = [r16] | ||
| + | addl r15 = @ltoffx(M# | ||
| + | ;; | ||
| + | nop 0 | ||
| + | .mmi | ||
| + | ldf8 f8 = [r14], 8 | ||
| + | ld8.mov r15 = [r15], M# | ||
| + | nop 0 | ||
| + | ;; | ||
| + | .mmf | ||
| + | ldf8 f7 = [r14], 8 | ||
| + | nop 0 | ||
| + | fpmpy f6 = f8, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f8 = f8, f11, f6 | ||
| + | nop 0 | ||
| + | .mmf | ||
| + | ldf8 f9 = [r14], 8 | ||
| + | nop 0 | ||
| + | fpmpy f6 = f7, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f7 = f7, f11, f6 | ||
| + | nop 0 | ||
| + | .mmf | ||
| + | stf8 [r15] = f8, 8 | ||
| + | ldf8 f8 = [r14], 8 | ||
| + | fpmpy f6 = f9, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f9 = f9, f11, f6 | ||
| + | nop 0 | ||
| + | .mmf | ||
| + | stf8 [r15] = f7, 8 | ||
| + | ldf8 f7 = [r14], 8 | ||
| + | fpmpy f6 = f8, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f8 = f8, f11, f6 | ||
| + | nop 0 | ||
| + | .mmf | ||
| + | stf8 [r15] = f9, 8 | ||
| + | ldf8 f9 = [r14], 8 | ||
| + | fpmpy f6 = f7, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f7 = f7, f11, f6 | ||
| + | nop 0 | ||
| + | .mmf | ||
| + | stf8 [r15] = f8, 8 | ||
| + | ldf8 f8 = [r14], 8 | ||
| + | fpmpy f6 = f9, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f9 = f9, f11, f6 | ||
| + | nop 0 | ||
| + | .mmf | ||
| + | stf8 [r15] = f7, 8 | ||
| + | ldf8 f7 = [r14] | ||
| + | fpmpy f6 = f8, f10 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f8 = f8, f11, f6 | ||
| + | nop 0 | ||
| + | .mfi | ||
| + | stf8 [r15] = f9, 8 | ||
| + | fpmpy f10 = f7, f10 | ||
| + | nop 0 | ||
| + | ;; | ||
| + | .mfi | ||
| + | nop 0 | ||
| + | fpma f7 = f7, f11, f10 | ||
| + | nop 0 | ||
| + | .mmi | ||
| + | nop 0 | ||
| + | stf8 [r15] = f8, 8 | ||
| + | nop 0 | ||
| + | ;; | ||
| + | .mib | ||
| + | stf8 [r15] = f7 | ||
| + | nop 0 | ||
| + | br.ret.sptk.many b0 | ||
| + | .endp decoder# | ||
| + | .common S#,128,8 | ||
| + | .common M#,64,8 | ||
| + | .ident | ||
| + | </ | ||
| + | Цикл был развернут компилятором и превращен в нечто выше. Однако, | ||
| + | |||
| + | FIXME разобраться с тем что написано в ассемблере, | ||
etc/teach/diplomants/projects/2009/gccvec.1203285475.txt.gz · Last modified: 2008/02/18 00:57 by zps