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
Next revisionBoth sides next revision
etc:common_activities:gcc_vectorization:autovect_ppc [2008/02/04 03:33] jcmvbkbcetc:common_activities:gcc_vectorization:autovect_ppc [2008/02/04 04:29] 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
  
etc/common_activities/gcc_vectorization/autovect_ppc.txt · Last modified: 2008/02/04 04:31 by jcmvbkbc