Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


etc:common_activities:gcc_vectorization:autovect_ppc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
etc:common_activities:gcc_vectorization:autovect_ppc [2008/02/04 03:33] jcmvbkbcetc: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 -- адрес переменной ?b+        # в 11 регистр помещается сумма значения 1 регистра и 16 
 +        # r11 = адрес b[0]
      addi 11,1,16      addi 11,1,16
                  
-        # это -- загрузка ?b[0:3] в v13+        # это -- загрузка 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+        # это -- загрузка с[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 -- адрес ?b[12]+        # 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 -- адрес ?b[8]+        # 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,10,12,14] в v3+        # это -- помещение c[8,10,12,14] в v3
      vperm 3,8,0,11      vperm 3,8,0,11
-        # это -- помещение ?c[0,2,4,6] в v5+        # это -- помещение c[0,2,4,6] в v5
      vperm 5,10,1,11      vperm 5,10,1,11
-        # это -- помещение ?b[0,2,4,6] в v9+        # это -- помещение b[0,2,4,6] в v9
      vperm 9,13,6,11      vperm 9,13,6,11
  
-        # это -- помещение ?c[9,11,13,15] в v8+        # это -- помещение c[9,11,13,15] в v8
      vperm 8,8,0,7      vperm 8,8,0,7
-        # это -- помещение ?c[1,3,5,7] в v10+        # это -- помещение c[1,3,5,7] в v10
      vperm 10,10,1,7      vperm 10,10,1,7
-        # это -- помещение ?b[1,3,5,7] в v13+        # это -- помещение 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   vD, vA, vC, vB         # vmaddfp   vD, vA, vC, vB
         # vD[i] = vA[i]*vC[i]+vB[i]          # vD[i] = vA[i]*vC[i]+vB[i] 
 +
 +        # v13 = b[1,3,5,7]*c[1,3,5,7]+0x8000000
      vmaddfp 13,13,10,0      vmaddfp 13,13,10,0
 +        # v9 = b[0,2,4,6]*c[0,2,4,5]+0x8000000
      vmaddfp 9,9,5,0      vmaddfp 9,9,5,0
  
Line 217: Line 223:
         # vsubfp   vD, vA, vB         # vsubfp   vD, vA, vB
         # vD[i] = vA[i]-vB[i]          # vD[i] = vA[i]-vB[i] 
 +
 +        # v13 = b[1,3,5,7]*c[1,3,5,7]-b[0,2,4,6]*c[0,2,4,5]
      vsubfp 13,13,9      vsubfp 13,13,9
            
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,10,12,14] в v11
      vperm 11,12,4,11      vperm 11,12,4,11
 +        # это -- помещение b[9,11,13,15] в v12
      vperm 12,12,4,7      vperm 12,12,4,7
 +
 +        # v11 = b[8,10,12,14]*c[8,10,12,14]+0x8000000
      vmaddfp 11,11,3,0      vmaddfp 11,11,3,0
 +        # v12 = b[9,11,13,15]*c[9,11,13,15]+0x8000000
      vmaddfp 12,12,8,0      vmaddfp 12,12,8,0
 +        # v12 = b[9,11,13,15]*c[9,11,13,15]-b[8,10,12,14]*c[8,10,12,14]
      vsubfp 12,12,11      vsubfp 12,12,11
 +
 +        # 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