etc:common_activities:gcc_vectorization:autovect_ppc
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
etc:common_activities:gcc_vectorization:autovect_ppc [2008/02/04 03:33] – jcmvbkbc | etc:common_activities:gcc_vectorization:autovect_ppc [2008/02/04 04:31] (current) – jcmvbkbc | ||
---|---|---|---|
Line 76: | Line 76: | ||
# в 10 регистре сумма значение 1 регистра + 16 (число) | # в 10 регистре сумма значение 1 регистра + 16 (число) | ||
+ | # r10 = адрес b[0] | ||
addi 10,1,16 | addi 10,1,16 | ||
Line 92: | Line 93: | ||
# прибавить к значению регистра 10 число 16 и положить результат в 8 | # прибавить к значению регистра 10 число 16 и положить результат в 8 | ||
# до этого в регистре 10 был регистр 1 увеличенный на 16 | # до этого в регистре 10 был регистр 1 увеличенный на 16 | ||
+ | # r8 = адрес b[4] | ||
addi 8,10,16 | addi 8,10,16 | ||
Line 102: | Line 104: | ||
lvx 11,0,11 | lvx 11,0,11 | ||
- | # в 11 регистр помещается сумма значения 1 регистра и 16 -- адрес | + | # в 11 регистр помещается сумма значения 1 регистра и 16 |
+ | # r11 = адрес b[0] | ||
addi 11,1,16 | addi 11,1,16 | ||
| | ||
- | # это -- загрузка | + | # это -- загрузка b[0:3] в v13 |
lvx 13,0,11 | lvx 13,0,11 | ||
- | | + | |
- | # в 11 регистр сумму значения 1 регистра и 80 -- адрес переменной | + | # в 11 регистр сумму значения 1 регистра и 80 -- адрес переменной с |
addi 11,1,80 | addi 11,1,80 | ||
- | # это -- загрузка | + | # это -- загрузка с[0:3] в v10 |
lvx 10,0,11 | lvx 10,0,11 | ||
addi 11,1,96 | addi 11,1,96 | ||
- | # ?c[4:7] в v1 | + | # c[4:7] в v1 |
lvx 1,0,11 | lvx 1,0,11 | ||
addi 11,1,112 | addi 11,1,112 | ||
- | # ?c[8:11] в v8 | + | # c[8:11] в v8 |
lvx 8,0,11 | lvx 8,0,11 | ||
Line 131: | Line 134: | ||
lvx 7,0,9 | lvx 7,0,9 | ||
- | # ?b[4:7] в v6 | + | # b[4:7] в v6 |
lvx 6,0,8 | lvx 6,0,8 | ||
| | ||
- | # r9 -- адрес | + | # r9 = адрес b[12] |
addi 9,8,32 | addi 9,8,32 | ||
| | ||
- | # ?c[12:15] в v0 | + | # c[12:15] в v0 |
lvx 0,0,11 | lvx 0,0,11 | ||
- | # r8 -- адрес | + | # r8 = адрес b[8] |
addi 8,8,16 | addi 8,8,16 | ||
- | # ?b[12:5] в v4 | + | # b[12:5] в v4 |
lvx 4,0,9 | lvx 4,0,9 | ||
- | # r9 -- адрес a | + | # r9 = адрес a |
addi 9,1,144 | addi 9,1,144 | ||
- | # ?b[8:11] в v12 | + | # b[8:11] в v12 |
lvx 12,0,8 | lvx 12,0,8 | ||
Line 171: | Line 174: | ||
# в vC[i] написано число от 0x00 до 0x1F и означает какой из 32 элементов vA||vB положить в vD[i] | # в vC[i] написано число от 0x00 до 0x1F и означает какой из 32 элементов vA||vB положить в vD[i] | ||
- | # это -- помещение | + | # это -- помещение c[8, |
vperm 3,8,0,11 | vperm 3,8,0,11 | ||
- | # это -- помещение | + | # это -- помещение c[0,2,4,6] в v5 |
vperm 5,10,1,11 | vperm 5,10,1,11 | ||
- | # это -- помещение | + | # это -- помещение b[0,2,4,6] в v9 |
vperm 9,13,6,11 | vperm 9,13,6,11 | ||
- | # это -- помещение | + | # это -- помещение c[9, |
vperm 8,8,0,7 | vperm 8,8,0,7 | ||
- | # это -- помещение | + | # это -- помещение c[1,3,5,7] в v10 |
vperm 10,10,1,7 | vperm 10,10,1,7 | ||
- | # это -- помещение | + | # это -- помещение b[1,3,5,7] в v13 |
vperm 13,13,6,7 | vperm 13,13,6,7 | ||
Line 203: | Line 206: | ||
# low-order 5 bits of the corresponding word element in register vB. Bits shifted out to bit [0] of the word | # low-order 5 bits of the corresponding word element in register vB. Bits shifted out to bit [0] of the word | ||
# element are lost. Zeros are supplied to the vacated bits on the roght. The result is placed into the corresponding word element of register vD | # element are lost. Zeros are supplied to the vacated bits on the roght. The result is placed into the corresponding word element of register vD | ||
- | # Каждое слово в регистре сдвигается влево на какое-то число бит. | + | # Каждое слово в регистре сдвигается влево на 31 бит, получается 0x80000000 |
vslw 0,0,0 | vslw 0,0,0 | ||
Line 210: | Line 213: | ||
# vmaddfp | # vmaddfp | ||
# vD[i] = vA[i]*vC[i]+vB[i] | # vD[i] = vA[i]*vC[i]+vB[i] | ||
+ | |||
+ | # v13 = b[1, | ||
| | ||
+ | # v9 = b[0, | ||
| | ||
Line 217: | Line 223: | ||
# vsubfp | # vsubfp | ||
# vD[i] = vA[i]-vB[i] | # vD[i] = vA[i]-vB[i] | ||
+ | |||
+ | # v13 = b[1, | ||
| | ||
Line 229: | Line 237: | ||
# The contents of register vS are stored into the quadword addressed by EA. Figure 6-5 shows how a store | # The contents of register vS are stored into the quadword addressed by EA. Figure 6-5 shows how a store | ||
# instruction is performed for a vector register. | # instruction is performed for a vector register. | ||
+ | |||
+ | # a[0]=b[1]*c[1]-b[0]*c[0] | ||
+ | # a[1]=b[3]*c[3]-b[2]*c[2] | ||
+ | # a[2]=b[5]*c[5]-b[4]*c[4] | ||
+ | # a[3]=b[7]*c[7]-b[6]*c[6] | ||
stvx 13,0,9 | stvx 13,0,9 | ||
+ | # r9 -- адрес a[4] | ||
addi 9,9,16 | addi 9,9,16 | ||
+ | |||
+ | |||
+ | # это -- помещение b[8, | ||
vperm 11,12,4,11 | vperm 11,12,4,11 | ||
+ | # это -- помещение b[9, | ||
vperm 12,12,4,7 | vperm 12,12,4,7 | ||
+ | |||
+ | # v11 = b[8, | ||
| | ||
+ | # v12 = b[9, | ||
| | ||
+ | # v12 = b[9, | ||
| | ||
+ | |||
+ | # a[4]=b[9]*c[9]-b[8]*c[8] | ||
+ | # a[5]=b[11]*c[11]-b[10]*c[10] | ||
+ | # a[6]=b[13]*c[13]-b[12]*c[12] | ||
+ | # a[7]=b[15]*c[15]-b[14]*c[14] | ||
stvx 12,0,9 | stvx 12,0,9 | ||
Line 245: | Line 272: | ||
# Вызов функции fbar | # Вызов функции fbar | ||
bl fbar | bl fbar | ||
+ | # загрузка адреса возврата с вершины кадра стека в r0 | ||
lwz 0,228(1) | lwz 0,228(1) | ||
# восстановление предыдущего кадра стека | # восстановление предыдущего кадра стека |
etc/common_activities/gcc_vectorization/autovect_ppc.1202085234.txt.gz · Last modified: 2008/02/04 03:33 by jcmvbkbc