riscv64: Add RISC-V target
[platform/upstream/openblas.git] / l2param.h
1 #ifndef GEMV_PARAM_H
2 #define GEMV_PARAM_H
3
4 #ifdef movsd
5 #undef movsd
6 #endif
7
8 #undef  movapd
9 #define movapd movaps
10
11 #ifdef ATHLON
12 #define ALIGNED_ACCESS
13 #define MOVUPS_A        movaps
14 #define MOVUPS_XL       movaps
15 #define MOVUPS_XS       movaps
16 #define MOVUPS_YL       movaps
17 #define MOVUPS_YS       movaps
18 #define PREFETCH        prefetcht0
19 #define PREFETCHSIZE    64 * 3
20 #endif
21
22 #ifdef PENTIUM4
23 #define ALIGNED_ACCESS
24 #define MOVUPS_A        movaps
25 #define MOVUPS_XL       movaps
26 #define MOVUPS_XS       movaps
27 #define MOVUPS_YL       movaps
28 #define MOVUPS_YS       movaps
29 #define PREFETCH        prefetcht0
30 #define PREFETCHSIZE    64 * 2
31 #endif
32
33 #ifdef CORE2
34 #define ALIGNED_ACCESS
35 #define MOVUPS_A        movaps
36 #define MOVUPS_XL       movaps
37 #define MOVUPS_XS       movaps
38 #define MOVUPS_YL       movaps
39 #define MOVUPS_YS       movaps
40 #define PREFETCH        prefetcht0
41 #define PREFETCHSIZE    64 * 4
42 #endif
43
44 #ifdef PENRYN
45 #define ALIGNED_ACCESS
46 #define MOVUPS_A        movaps
47 #define MOVUPS_XL       movaps
48 #define MOVUPS_XS       movaps
49 #define MOVUPS_YL       movaps
50 #define MOVUPS_YS       movaps
51 #define PREFETCH        prefetcht0
52 #define PREFETCHSIZE    64 * 4
53 #endif
54
55 #ifdef NEHALEM
56 #define MOVUPS_A        movups
57 #define MOVUPS_XL       movups
58 #define MOVUPS_XS       movups
59 #define MOVUPS_YL       movups
60 #define MOVUPS_YS       movups
61 #define PREFETCH        prefetcht0
62 #define PREFETCHW       prefetcht0
63 #define PREFETCHSIZE    64 * 3
64 #endif
65
66 #ifdef SANDYBRIDGE
67 #define MOVUPS_A        movups
68 #define MOVUPS_XL       movups
69 #define MOVUPS_XS       movups
70 #define MOVUPS_YL       movups
71 #define MOVUPS_YS       movups
72 #define PREFETCH        prefetcht0
73 #define PREFETCHW       prefetcht0
74 #define PREFETCHSIZE    64 * 3
75 #endif
76
77 #ifdef OPTERON
78 #define PREFETCH        prefetch
79 #define PREFETCHW       prefetchw
80 #ifndef COMPLEX
81 #define PREFETCHSIZE    64 * 1
82 #else
83 #define PREFETCHSIZE    64 * 1
84 #endif
85 #define movsd           movlps
86 #endif
87
88 #if defined(BARCELONA) || defined(SHANGHAI) || defined(BOBCAT) || defined(BARCELONA_OPTIMIZATION)
89 #define ALIGNED_ACCESS
90 #define MOVUPS_A        movaps
91 #define MOVUPS_XL       movaps
92 #define MOVUPS_XS       movaps
93 #define MOVUPS_YL       movaps
94 #define MOVUPS_YS       movaps
95
96 #define PREFETCH        prefetch
97 #define PREFETCHW       prefetchw
98 #ifndef COMPLEX
99 #define PREFETCHSIZE    64 * 2
100 #else
101 #define PREFETCHSIZE    64 * 4
102 #endif
103 #endif
104
105 #ifdef NANO
106 #define ALIGNED_ACCESS
107 #define MOVUPS_A        movaps
108 #define MOVUPS_XL       movaps
109 #define MOVUPS_XS       movaps
110 #define MOVUPS_YL       movaps
111 #define MOVUPS_YS       movaps
112 #define PREFETCH        prefetcht0
113 #ifndef COMPLEX
114 #define PREFETCHSIZE    64 * 1
115 #else
116 #define PREFETCHSIZE    64 * 2
117 #endif
118 #endif
119
120 #ifndef PREOFFSET
121 #ifdef L1_DATA_LINESIZE
122 #define PREOFFSET       (L1_DATA_LINESIZE >> 1)
123 #else
124 #define PREOFFSET       32
125 #endif
126 #endif
127
128 #ifndef  GEMV_UNROLL
129 #define  GEMV_UNROLL 4
130 #endif
131
132 #ifndef ZGEMV_UNROLL
133 #define ZGEMV_UNROLL 4
134 #endif
135
136 /* #define COPY_FORCE       */   /* Always copy X or Y to the buffer */
137 /* #define NOCOPY_UNALIGNED */   /* Not copy if X or Y is not aligned */
138
139 #ifdef MOVUPS_A
140 #define MOVUPS_A1(OFF, ADDR, REGS)              MOVUPS_A        OFF(ADDR), REGS
141 #define MOVUPS_A2(OFF, ADDR, BASE, SCALE, REGS) MOVUPS_A        OFF(ADDR, BASE, SCALE), REGS
142 #else
143 #define MOVUPS_A1(OFF, ADDR, REGS)              movsd   OFF(ADDR), REGS; movhps OFF + 8(ADDR), REGS
144 #define MOVUPS_A2(OFF, ADDR, BASE, SCALE, REGS) movsd   OFF(ADDR, BASE, SCALE), REGS; movhps    OFF + 8(ADDR, BASE, SCALE), REGS
145 #endif
146
147 #define MOVRPS_A1(OFF, ADDR, REGS)              movsd   OFF + 8(ADDR), REGS; movhps     OFF(ADDR), REGS
148 #define MOVRPS_A2(OFF, ADDR, BASE, SCALE, REGS) movsd   OFF + 8(ADDR, BASE, SCALE), REGS; movhps        OFF(ADDR, BASE, SCALE), REGS
149
150 #ifdef MOVUPS_XL
151 #define MOVUPS_XL1(OFF, ADDR, REGS)                     MOVUPS_XL       OFF(ADDR), REGS
152 #else
153 #define MOVUPS_XL1(OFF, ADDR, REGS)                     movsd   OFF(ADDR), REGS; movhps OFF + 8(ADDR), REGS
154 #endif
155
156 #ifdef MOVUPS_XS
157 #define MOVUPS_XS1(OFF, ADDR, REGS)                     MOVUPS_XS       REGS, OFF(ADDR)
158 #else
159 #define MOVUPS_XS1(OFF, ADDR, REGS)                     movsd   REGS, OFF(ADDR); movhps REGS, OFF + 8(ADDR)
160 #endif
161
162 #ifdef MOVUPS_YL
163 #define MOVUPS_YL1(OFF, ADDR, REGS)                     MOVUPS_YL       OFF(ADDR), REGS
164 #else
165 #define MOVUPS_YL1(OFF, ADDR, REGS)                     movsd   OFF(ADDR), REGS; movhps OFF + 8(ADDR), REGS
166 #endif
167
168 #ifdef MOVUPS_YS
169 #define MOVUPS_YS1(OFF, ADDR, REGS)                     MOVUPS_YS       REGS, OFF(ADDR)
170 #else
171 #define MOVUPS_YS1(OFF, ADDR, REGS)                     movsd   REGS, OFF(ADDR); movhps REGS, OFF + 8(ADDR)
172 #endif
173
174
175
176 #endif