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