Advertisement
Guest User

Untitled

a guest
May 21st, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. typedef struct vector
  4. {
  5.     float s1, s2, s3, s4;
  6. } vector;
  7.  
  8. int main()
  9. {
  10.  
  11.     vector a, b, c, d, result1, result2, resultCheck;
  12.  
  13.     // zmienic wartosci!!!
  14.     // TODO!!
  15.  
  16.     a.s1 = 11;
  17.     a.s2 = 12;
  18.     a.s3 = 13;
  19.     a.s4 = 14;
  20.     b.s1 = 1;
  21.     b.s2 = 2;
  22.     b.s3 = 3;
  23.     b.s4 = 4;
  24.     c.s1 = 17;
  25.     c.s2 = -8;
  26.     c.s3 = -11;
  27.     c.s4 = -2.4;
  28.     d.s1 = 6.6;
  29.     d.s2 = -1;  
  30.     d.s3 = 0;
  31.     d.s4 = 0;
  32.  
  33.    // do sprawdzania
  34.     // asm(
  35.     //     "movups %1, %%xmm0\n\t"
  36.     //     "movups %2, %%xmm1\n\t"
  37.     //     "shufps $0x21, %%xmm0, %%xmm0\n\t"
  38.     //     "movups %%xmm0, %0\n"
  39.     //     : "=g"(resultCheck) //%0
  40.     //     : "g"(a), "g"(b), "g"(c), "g"(d), "g"(d)
  41.     //     : //%1       %2      %3          %4      %5
  42.     // );
  43.  
  44.     // printf("Wektor %f %f %f %f",resultCheck.s1, resultCheck.s2, resultCheck.s3, resultCheck.s4);
  45.  
  46.     asm(
  47.         // wektor A i B
  48.         // 1 Nawias lewe mnozenie
  49.         "movups %1, %%xmm0\n\t"
  50.         "movups %2, %%xmm1\n\t"
  51.         // 00 01 10 11
  52.         "shufps $0x21, %%xmm0, %%xmm0\n\t"
  53.         // 01 00 11 10
  54.         "shufps $0x4E, %%xmm1, %%xmm1\n\t"
  55.         "mulps %%xmm1, %%xmm0\n\t"
  56.         "movaps %%xmm0, %%xmm4\n\t" //wynik do [4]
  57.         // ----
  58.         // 1 Nawias prawe mnozenie
  59.         "movups %1, %%xmm0\n\t"
  60.         "movups %2, %%xmm1\n\t"
  61.         // 01 00 11 10
  62.         "shufps $0x4E, %%xmm0, %%xmm0\n\t"
  63.         // 00 01 10 11
  64.         "shufps $0x21, %%xmm1, %%xmm1\n\t"
  65.         "mulps %%xmm1, %%xmm0\n\t"
  66.         // Odejmowanie Lewe - Prawe
  67.         "subps %%xmm0, %%xmm4\n\t" // xmm4 - xmm0, wynik do [4]
  68.        
  69.         // wektor C i D
  70.         // 1 Nawias lewe mnozenie
  71.         "movups %3, %%xmm0\n\t"
  72.         "movups %4, %%xmm1\n\t"
  73.         // 10 01 01 00
  74.         "shufps $0x94, %%xmm0, %%xmm0\n\t"
  75.         // 11 11 10 11
  76.         "shufps $0xFB, %%xmm1, %%xmm1\n\t"
  77.         "mulps %%xmm1, %%xmm0\n\t"
  78.         "movaps %%xmm0, %%xmm3\n\t" //wynik do [3]
  79.         // 1 Nawias prawe mnozenie
  80.         "movups %3, %%xmm0\n\t"
  81.         "movups %4, %%xmm1\n\t"
  82.         // 11 11 10 11
  83.         "shufps $0xFB, %%xmm0, %%xmm0\n\t"
  84.         // 10 01 01 00
  85.         "shufps $0x94, %%xmm1, %%xmm1\n\t"
  86.         "mulps %%xmm1, %%xmm0\n\t"
  87.         // Odejmowanie Lewe -
  88.         "subps %%xmm0, %%xmm3" // xmm4 - xmm0, wynik do [4]
  89.  
  90.  
  91.         "movups %%xmm0, %0\n"
  92.         : "=g"(resultCheck) //%0
  93.         : "g"(a), "g"(b), "g"(c), "g"(d), "g"(d)
  94.         : //%1      %2      %3          %4      %5
  95.     );
  96.  
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement