Grid 0.7.0
Intel512single.h
Go to the documentation of this file.
1/*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5 Source file: ./lib/simd/Avx512Asm.h
6
7 Copyright (C) 2015
8
9Author: paboyle <paboyle@ph.ed.ac.uk>
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License along
22 with this program; if not, write to the Free Software Foundation, Inc.,
23 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24
25 See the full license in the file "LICENSE" in the top level distribution directory
26*************************************************************************************/
27/* END LEGAL */
28// No guard can be multiply included as undef clearge of macros
29#undef VZERO
30#undef VMOV
31#undef VLOAD
32#undef VSTORE
33#define VZERO(A) VZEROf(A)
34#define VMOV(A,B) VMOVf(A,B)
35#define VLOAD(OFF,PTR,DEST) VLOADf(OFF,PTR,DEST)
36#define VSTORE(OFF,PTR,SRC) VSTOREf(OFF,PTR,SRC)
37
38#undef VADD
39#undef VSUB
40#undef VMUL
41#undef VMADD
42#define VADD(A,B,C) VADDf(A,B,C)
43#define VSUB(A,B,C) VSUBf(A,B,C)
44#define VMUL(Uri,Uir,Chi) VMULf(Uri,Uir,Chi)
45#define VMADD(Uri,Uir,Chi) VMADDf(Uri,Uir,Chi)
46
47
48#undef VTIMESI
49#undef VTIMESI0
50#undef VTIMESI1
51#undef VTIMESI2
52#define VTIMESI(A,B,C) VTIMESIf(A,B,C)
53#define VTIMESI0(A,B,C) VTIMESI0f(A,B,C)
54#define VTIMESI1(A,B,C) VTIMESI1f(A,B,C)
55#define VTIMESI2(A,B,C) VTIMESI2f(A,B,C)
56
57#undef VTIMESMINUSI
58#undef VTIMESMINUSI0
59#undef VTIMESMINUSI1
60#undef VTIMESMINUSI2
61#define VTIMESMINUSI(A,B,C) VTIMESMINUSIf(A,B,C)
62#define VTIMESMINUSI0(A,B,C) VTIMESMINUSI0f(A,B,C)
63#define VTIMESMINUSI1(A,B,C) VTIMESMINUSI1f(A,B,C)
64#define VTIMESMINUSI2(A,B,C) VTIMESMINUSI2f(A,B,C)
65
66#undef VACCTIMESI
67#undef VACCTIMESI0
68#undef VACCTIMESI1
69#undef VACCTIMESI2
70#define VACCTIMESI(A,B,C) VACCTIMESIf(A,B,C)
71#define VACCTIMESI0(A,B,C) VACCTIMESI0f(A,B,C)
72#define VACCTIMESI1(A,B,C) VACCTIMESI1f(A,B,C)
73#define VACCTIMESI2(A,B,C) VACCTIMESI2f(A,B,C)
74
75#undef VACCTIMESMINUSI
76#undef VACCTIMESMINUSI0
77#undef VACCTIMESMINUSI1
78#undef VACCTIMESMINUSI2
79#define VACCTIMESMINUSI(A,B,C) VACCTIMESMINUSIf(A,B,C)
80#define VACCTIMESMINUSI0(A,B,C) VACCTIMESMINUSI0f(A,B,C)
81#define VACCTIMESMINUSI1(A,B,C) VACCTIMESMINUSI1f(A,B,C)
82#define VACCTIMESMINUSI2(A,B,C) VACCTIMESMINUSI2f(A,B,C)
83
84#undef VACCTIMESI1MEM
85#undef VACCTIMESI2MEM
86#define VACCTIMESI1MEM(A,ACC,O,P) VACCTIMESI1MEMf(A,ACC,O,P)
87#define VACCTIMESI2MEM(A,ACC,O,P) VACCTIMESI2MEMf(A,ACC,O,P)
88
89#undef VACCTIMESMINUSI1MEM
90#undef VACCTIMESMINUSI2MEM
91#define VACCTIMESMINUSI1MEM(A,ACC,O,P) VACCTIMESMINUSI1MEMf(A,ACC,O,P)
92#define VACCTIMESMINUSI2MEM(A,ACC,O,P) VACCTIMESMINUSI2MEMf(A,ACC,O,P)
93
94#undef VPERM0
95#undef VPERM1
96#undef VPERM2
97#undef VPERM3
98#define VPERM0(A,B) VPERM0f(A,B)
99#define VPERM1(A,B) VPERM1f(A,B)
100#define VPERM2(A,B) VPERM2f(A,B)
101#define VPERM3(A,B) VPERM3f(A,B)
102
103#undef VSHUFMEM
104#undef VADDMEM
105#undef VSUBMEM
106#define VSHUFMEM(OFF,A,DEST) VSHUFMEMf(OFF,A,DEST)
107#define VADDMEM(O,A,B,C) VADDMEMf(O,A,B,C)
108#define VSUBMEM(O,A,B,C) VSUBMEMf(O,A,B,C)
109
110#undef VMOVIDUP
111#undef VMOVRDUP
112#undef VMADDSUB
113#undef VSHUF
114#define VMOVIDUP(A,B,C) VMOVIDUPf(A,B,C)
115#define VMOVRDUP(A,B,C) VMOVRDUPf(A,B,C)
116#define VMADDSUB(A,B,accum) VMADDSUBf(A,B,accum)
117#define VSHUF(A,B) VSHUFf(A,B)
118
119#undef ZEND1
120#undef ZEND2
121#undef ZLOAD
122#undef ZMUL
123#undef ZMADD
124#undef ZMULMEM2SP
125#undef ZMADDMEM2SP
126
127#define ZEND1(A,B,C) ZEND1f(A,B,C)
128#define ZEND2(A,B,C) ZEND2f(A,B,C)
129#define ZLOAD(A,B,C,D) ZLOADf(A,B,C,D)
130#define ZMUL(A,B,C,D,E) ZMULf(A,B,C,D,E)
131#define ZMADD(A,B,C,D,E) ZMADDf(A,B,C,D,E)
132#define ZMULMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMULMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)
133#define ZMADDMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMADDMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)
134
135#undef VRDUP
136#undef VIDUP
137#undef VMADDSUBMEM
138#undef VMADDMEM
139#undef VMULMEM
140
141#define VRDUP(SRC,DEST) VRDUPf(SRC,DEST)
142#define VIDUP(SRC,DEST) VIDUPf(SRC,DEST)
143#define VMADDSUBMEM(O,P,B,accum) VMADDSUBMEMf(O,P,B,accum)
144#define VMADDMEM(O,P,B,accum) VMADDMEMf(O,P,B,accum)
145#define VMULMEM(O,P,B,accum) VMULMEMf(O,P,B,accum)
146
147#undef VMADDRDUP
148#undef VMADDSUBRDUP
149#undef VMADDSUBIDUP
150#undef VMULRDUP
151#undef VMULIDUP
152#define VMADDRDUP(O,P,B,accum) VMADDRDUPf(O,P,B,accum)
153#define VMADDSUBRDUP(O,P,B,accum) VMADDSUBRDUPf(O,P,B,accum)
154#define VMADDSUBIDUP(O,P,B,accum) VMADDSUBIDUPf(O,P,B,accum)
155#define VMULRDUP(O,P,B,accum) VMULRDUPf(O,P,B,accum)
156#define VMULIDUP(O,P,B,accum) VMULIDUPf(O,P,B,accum)
157