3 v4df_t c03_0, c03_1, c03_2, c03_3, c03_4, c03_5;
4 v4df_t c47_0, c47_1, c47_2, c47_3, c47_4, c47_5;
10 __asm__
volatile(
"prefetcht0 0(%0) \n\t" : :
"r"( a ) );
11 __asm__
volatile(
"prefetcht2 0(%0) \n\t" : :
"r"( aux->b_next ) );
12 __asm__
volatile(
"prefetcht0 192(%0) \n\t" : :
"r"( c ) );
14 c03_0.v = _mm256_setzero_pd();
15 c03_1.v = _mm256_setzero_pd();
16 c03_2.v = _mm256_setzero_pd();
17 c03_3.v = _mm256_setzero_pd();
18 c03_4.v = _mm256_setzero_pd();
19 c03_5.v = _mm256_setzero_pd();
21 c47_0.v = _mm256_setzero_pd();
22 c47_1.v = _mm256_setzero_pd();
23 c47_2.v = _mm256_setzero_pd();
24 c47_3.v = _mm256_setzero_pd();
25 c47_4.v = _mm256_setzero_pd();
26 c47_5.v = _mm256_setzero_pd();
29 a03.v = _mm256_load_pd( (
double*) a );
30 a47.v = _mm256_load_pd( (
double*)( a + 4 ) );
32 for (
int i = 0; i < k_iter; ++ i )
36 __asm__
volatile(
"prefetcht0 192(%0) \n\t" : :
"r"(a) );
38 b0.v = _mm256_broadcast_sd( b );
39 b1.v = _mm256_broadcast_sd( b + 1 );
40 c03_0.v = _mm256_fmadd_pd( a03.v, b0.v, c03_0.v );
41 c47_0.v = _mm256_fmadd_pd( a47.v, b0.v, c47_0.v );
42 c03_1.v = _mm256_fmadd_pd( a03.v, b1.v, c03_1.v );
43 c47_1.v = _mm256_fmadd_pd( a47.v, b1.v, c47_1.v );
45 b0.v = _mm256_broadcast_sd( b + 2 );
46 b1.v = _mm256_broadcast_sd( b + 3 );
47 c03_2.v = _mm256_fmadd_pd( a03.v, b0.v, c03_2.v );
48 c47_2.v = _mm256_fmadd_pd( a47.v, b0.v, c47_2.v );
49 c03_3.v = _mm256_fmadd_pd( a03.v, b1.v, c03_3.v );
50 c47_3.v = _mm256_fmadd_pd( a47.v, b1.v, c47_3.v );
52 b0.v = _mm256_broadcast_sd( b + 4 );
53 b1.v = _mm256_broadcast_sd( b + 5 );
54 c03_4.v = _mm256_fmadd_pd( a03.v, b0.v, c03_4.v );
55 c47_4.v = _mm256_fmadd_pd( a47.v, b0.v, c47_4.v );
56 c03_5.v = _mm256_fmadd_pd( a03.v, b1.v, c03_5.v );
57 c47_5.v = _mm256_fmadd_pd( a47.v, b1.v, c47_5.v );
59 a03.v = _mm256_load_pd( (
double*)( a + 8 ) );
60 a47.v = _mm256_load_pd( (
double*)( a + 12 ) );
63 __asm__
volatile(
"prefetcht0 512(%0) \n\t" : :
"r"(a) );
65 b0.v = _mm256_broadcast_sd( b + 6 );
66 b1.v = _mm256_broadcast_sd( b + 7 );
67 c03_0.v = _mm256_fmadd_pd( a03.v, b0.v, c03_0.v );
68 c47_0.v = _mm256_fmadd_pd( a47.v, b0.v, c47_0.v );
69 c03_1.v = _mm256_fmadd_pd( a03.v, b1.v, c03_1.v );
70 c47_1.v = _mm256_fmadd_pd( a47.v, b1.v, c47_1.v );
72 b0.v = _mm256_broadcast_sd( b + 8 );
73 b1.v = _mm256_broadcast_sd( b + 9 );
74 c03_2.v = _mm256_fmadd_pd( a03.v, b0.v, c03_2.v );
75 c47_2.v = _mm256_fmadd_pd( a47.v, b0.v, c47_2.v );
76 c03_3.v = _mm256_fmadd_pd( a03.v, b1.v, c03_3.v );
77 c47_3.v = _mm256_fmadd_pd( a47.v, b1.v, c47_3.v );
79 b0.v = _mm256_broadcast_sd( b + 10 );
80 b1.v = _mm256_broadcast_sd( b + 11 );
81 c03_4.v = _mm256_fmadd_pd( a03.v, b0.v, c03_4.v );
82 c47_4.v = _mm256_fmadd_pd( a47.v, b0.v, c47_4.v );
83 c03_5.v = _mm256_fmadd_pd( a03.v, b1.v, c03_5.v );
84 c47_5.v = _mm256_fmadd_pd( a47.v, b1.v, c47_5.v );
86 a03.v = _mm256_load_pd( (
double*)( a + 16 ) );
87 a47.v = _mm256_load_pd( (
double*)( a + 20 ) );
94 for (
int i = 0; i < k_left; ++ i )
98 __asm__
volatile(
"prefetcht0 192(%0) \n\t" : :
"r"(a) );
100 b0.v = _mm256_broadcast_sd( b );
101 b1.v = _mm256_broadcast_sd( b + 1 );
102 c03_0.v = _mm256_fmadd_pd( a03.v, b0.v, c03_0.v );
103 c47_0.v = _mm256_fmadd_pd( a47.v, b0.v, c47_0.v );
104 c03_1.v = _mm256_fmadd_pd( a03.v, b1.v, c03_1.v );
105 c47_1.v = _mm256_fmadd_pd( a47.v, b1.v, c47_1.v );
107 b0.v = _mm256_broadcast_sd( b + 2 );
108 b1.v = _mm256_broadcast_sd( b + 3 );
109 c03_2.v = _mm256_fmadd_pd( a03.v, b0.v, c03_2.v );
110 c47_2.v = _mm256_fmadd_pd( a47.v, b0.v, c47_2.v );
111 c03_3.v = _mm256_fmadd_pd( a03.v, b1.v, c03_3.v );
112 c47_3.v = _mm256_fmadd_pd( a47.v, b1.v, c47_3.v );
114 b0.v = _mm256_broadcast_sd( b + 4 );
115 b1.v = _mm256_broadcast_sd( b + 5 );
116 c03_4.v = _mm256_fmadd_pd( a03.v, b0.v, c03_4.v );
117 c47_4.v = _mm256_fmadd_pd( a47.v, b0.v, c47_4.v );
118 c03_5.v = _mm256_fmadd_pd( a03.v, b1.v, c03_5.v );
119 c47_5.v = _mm256_fmadd_pd( a47.v, b1.v, c47_5.v );
121 a03.v = _mm256_load_pd( (
double*)( a + 8 ) );
122 a47.v = _mm256_load_pd( (
double*)( a + 12 ) );
131 a03.v = _mm256_load_pd( (
double*)( c ) );
132 c03_0.v = _mm256_add_pd( a03.v, c03_0.v );
133 a47.v = _mm256_load_pd( (
double*)( c + 4 ) );
134 c47_0.v = _mm256_add_pd( a47.v, c47_0.v );
136 a03.v = _mm256_load_pd( (
double*)( c + 8 ) );
137 c03_1.v = _mm256_add_pd( a03.v, c03_1.v );
138 a47.v = _mm256_load_pd( (
double*)( c + 12 ) );
139 c47_1.v = _mm256_add_pd( a47.v, c47_1.v );
141 a03.v = _mm256_load_pd( (
double*)( c + 16 ) );
142 c03_2.v = _mm256_add_pd( a03.v, c03_2.v );
143 a47.v = _mm256_load_pd( (
double*)( c + 20 ) );
144 c47_2.v = _mm256_add_pd( a47.v, c47_2.v );
146 a03.v = _mm256_load_pd( (
double*)( c + 24 ) );
147 c03_3.v = _mm256_add_pd( a03.v, c03_3.v );
148 a47.v = _mm256_load_pd( (
double*)( c + 28 ) );
149 c47_3.v = _mm256_add_pd( a47.v, c47_3.v );
151 a03.v = _mm256_load_pd( (
double*)( c + 32 ) );
152 c03_4.v = _mm256_add_pd( a03.v, c03_4.v );
153 a47.v = _mm256_load_pd( (
double*)( c + 36 ) );
154 c47_4.v = _mm256_add_pd( a47.v, c47_4.v );
156 a03.v = _mm256_load_pd( (
double*)( c + 40 ) );
157 c03_5.v = _mm256_add_pd( a03.v, c03_5.v );
158 a47.v = _mm256_load_pd( (
double*)( c + 44 ) );
159 c47_5.v = _mm256_add_pd( a47.v, c47_5.v );
Definition: avx_type.h:13