Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- typedef struct vector
- {
- float s1, s2, s3, s4;
- } vector;
- int main()
- {
- vector a, b, c, d, empty, result1, result2, resultCheck;
- empty.s1 = 0;
- empty.s2 = 0;
- empty.s3 = 0;
- empty.s4 = 0;
- // zmienic wartosci!!!
- // TODO!!
- a.s1 = 11;
- a.s2 = 12;
- a.s3 = 13;
- a.s4 = 14;
- b.s1 = 1;
- b.s2 = 2;
- b.s3 = 3;
- b.s4 = 4;
- c.s1 = 17;
- c.s2 = -8;
- c.s3 = -11;
- c.s4 = -2.4;
- d.s1 = 6.6;
- d.s2 = -1;
- d.s3 = 0;
- d.s4 = 0;
- // do sprawdzania
- // asm(
- // "movups %1, %%xmm0\n\t"
- // "movups %2, %%xmm1\n\t"
- // "shufps $0x21, %%xmm0, %%xmm0\n\t"
- // "movups %%xmm0, %0\n"
- // : "=g"(resultCheck) //%0
- // : "g"(a), "g"(b), "g"(c), "g"(d), "g"(d)
- // : //%1 %2 %3 %4 %5
- // );
- // printf("Wektor %f %f %f %f",resultCheck.s1, resultCheck.s2, resultCheck.s3, resultCheck.s4);
- asm(
- // wektor A i B
- // 1 Nawias lewe mnozenie
- "movups %1, %%xmm0\n\t"
- "movups %2, %%xmm1\n\t"
- // 00 01 10 11
- "shufps $0x21, %%xmm0, %%xmm0\n\t"
- // 01 00 11 10
- "shufps $0x4E, %%xmm1, %%xmm1\n\t"
- "mulps %%xmm1, %%xmm0\n\t"
- "movaps %%xmm0, %%xmm4\n\t" //wynik do [4]
- // ----
- // 1 Nawias prawe mnozenie
- "movups %1, %%xmm0\n\t"
- "movups %2, %%xmm1\n\t"
- // 01 00 11 10
- "shufps $0x4E, %%xmm0, %%xmm0\n\t"
- // 00 01 10 11
- "shufps $0x21, %%xmm1, %%xmm1\n\t"
- "mulps %%xmm1, %%xmm0\n\t"
- // Odejmowanie Lewe - Prawe
- "subps %%xmm0, %%xmm4\n\t" // xmm4 - xmm0, wynik do [4]
- // wektor C i D
- // 2 Nawias lewe mnozenie
- "movups %3, %%xmm0\n\t"
- "movups %4, %%xmm1\n\t"
- // 10 01 01 00
- "shufps $0x94, %%xmm0, %%xmm0\n\t"
- // 11 11 10 11
- "shufps $0xFB, %%xmm1, %%xmm1\n\t"
- "mulps %%xmm1, %%xmm0\n\t"
- "movaps %%xmm0, %%xmm3\n\t" //wynik do [3]
- // 2 Nawias prawe mnozenie
- "movups %3, %%xmm0\n\t"
- "movups %4, %%xmm1\n\t"
- // 11 11 10 11
- "shufps $0xFB, %%xmm0, %%xmm0\n\t"
- // 10 01 01 00
- "shufps $0x94, %%xmm1, %%xmm1\n\t"
- "mulps %%xmm1, %%xmm0\n\t"
- // Odejmowanie Lewe - Prawe
- "subps %%xmm0, %%xmm3\n\t" // xmm3 - xmm0, wynik do [3]
- // Pierwszy nawias x Drugi nawias
- "mulps %%xmm3, %%xmm4\n\t" //WYNIK CZĄSTKOWY (L1-4) w [4]
- // --------------
- // --------------
- // ---------------------------------------
- // Linijki L5-6
- // Pierwszy n
- "movups %5, %%xmm5\n\t" //pusty wektor (0,0,0,0) do (5)
- "movups %1, %%xmm0\n\t"
- "movups %2, %%xmm1\n\t"
- "shufps $0x08, %%xmm5, %%xmm0\n\t" //0123 -> 02XX (X = 0.0)
- "shufps $0x01, %%xmm5, %%xmm1\n\t" //0123 -> 10XX (X = 0.0)
- "mulps %%xmm1, %%xmm0\n\t"
- "movaps %%xmm0, %%xmm3\n\t" //wynik na bok (3)
- //Pierwszy nawias, drugie mnożenie
- "movups %1, %%xmm0\n\t"
- "movups %2, %%xmm1\n\t"
- "shufps $0x01, %%xmm5, %%xmm0\n\t" //0123 -> 10XX (X = 0.0)
- "shufps $0x08, %%xmm5, %%xmm1\n\t" //0123 -> 02XX (X = 0.0)
- "mulps %%xmm1, %%xmm0\n\t"
- //Pierwszy nawias, odejmowanie
- "subps %%xmm0, %%xmm3\n\t" //wynik w (3)
- //----------------------------
- //3 i 4 wiersz (c,d), linijki 1-2
- //Drugi nawias, pierwsze mnożenie
- "movups %3, %%xmm0\n\t"
- "movups %4, %%xmm1\n\t"
- "shufps $0x06, %%xmm5, %%xmm0\n\t" //0123 -> 21XX (X = 0.0)
- "shufps $0x0F, %%xmm5, %%xmm1\n\t" //0123 -> 33XX (X = 0.0)
- "mulps %%xmm1, %%xmm0\n\t"
- "movaps %%xmm0, %%xmm2\n\t" //wynik na bok(2)
- //Drugi nawias, drugie mnożenie
- "movups %3, %%xmm0\n\t"
- "movups %4, %%xmm1\n\t"
- "shufps $0x0F, %%xmm5, %%xmm0\n\t" //0123 -> 33XX (X = 0.0)
- "shufps $0x06, %%xmm5, %%xmm1\n\t" //0123 -> 21XX (X = 0.0)
- "mulps %%xmm1, %%xmm0\n\t"
- //Drugi nawias, odejmowanie
- "subps %%xmm0, %%xmm2\n\t" //wynik w (2)
- //Mnożenie, pierwszy nawias x drugi nawias
- "mulps %%xmm2, %%xmm3\n\t" //WYNIK CZĄSTKOWY (L1-2) w (3)
- //Dodawanie linii 3-6 i 1-2
- "addps %%xmm3, %%xmm4\n\t" //WYNIK KOŃCOWY (4)
- //Przeniesienie wyniku
- "movups %%xmm0, %0\n"
- : "=g"(resultCheck) //%0
- : "g"(a), "g"(b), "g"(c), "g"(d), "g"(empty)
- : //%1 %2 %3 %4 %5
- );
- printf("Wektor %f",resultCheck.s1 + resultCheck.s2 + resultCheck.s3 + resultCheck.s4);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement