Grid 0.7.0
Intel512double.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 clearage
29#undef VZERO
30#undef VMOV
31#undef VLOAD
32#undef VSTORE
33#define VZERO(A) VZEROd(A)
34#define VMOV(A,B) VMOVd(A,B)
35#define VLOAD(OFF,PTR,DEST) VLOADd(OFF,PTR,DEST)
36#define VSTORE(OFF,PTR,SRC) VSTOREd(OFF,PTR,SRC)
37
38#undef VADD
39#undef VSUB
40#undef VMUL
41#undef VMADD
42#define VADD(A,B,C) VADDd(A,B,C)
43#define VSUB(A,B,C) VSUBd(A,B,C)
44#define VMUL(Uri,Uir,Chi) VMULd(Uri,Uir,Chi)
45#define VMADD(Uri,Uir,Chi) VMADDd(Uri,Uir,Chi)
46
47
48#undef VTIMESI
49#undef VTIMESI0
50#undef VTIMESI1
51#undef VTIMESI2
52#define VTIMESI(A,B,C) VTIMESId(A,B,C)
53#define VTIMESI0(A,B,C) VTIMESI0d(A,B,C)
54#define VTIMESI1(A,B,C) VTIMESI1d(A,B,C)
55#define VTIMESI2(A,B,C) VTIMESI2d(A,B,C)
56
57#undef VTIMESMINUSI
58#undef VTIMESMINUSI0
59#undef VTIMESMINUSI1
60#undef VTIMESMINUSI2
61#define VTIMESMINUSI(A,B,C) VTIMESMINUSId(A,B,C)
62#define VTIMESMINUSI0(A,B,C) VTIMESMINUSI0d(A,B,C)
63#define VTIMESMINUSI1(A,B,C) VTIMESMINUSI1d(A,B,C)
64#define VTIMESMINUSI2(A,B,C) VTIMESMINUSI2d(A,B,C)
65
66#undef VACCTIMESI
67#undef VACCTIMESI0
68#undef VACCTIMESI1
69#undef VACCTIMESI2
70#define VACCTIMESI(A,B,C) VACCTIMESId(A,B,C)
71#define VACCTIMESI0(A,B,C) VACCTIMESI0d(A,B,C)
72#define VACCTIMESI1(A,B,C) VACCTIMESI1d(A,B,C)
73#define VACCTIMESI2(A,B,C) VACCTIMESI2d(A,B,C)
74
75#undef VACCTIMESMINUSI
76#undef VACCTIMESMINUSI0
77#undef VACCTIMESMINUSI1
78#undef VACCTIMESMINUSI2
79#define VACCTIMESMINUSI(A,B,C) VACCTIMESMINUSId(A,B,C)
80#define VACCTIMESMINUSI0(A,B,C) VACCTIMESMINUSI0d(A,B,C)
81#define VACCTIMESMINUSI1(A,B,C) VACCTIMESMINUSI1d(A,B,C)
82#define VACCTIMESMINUSI2(A,B,C) VACCTIMESMINUSI2d(A,B,C)
83
84#undef VACCTIMESI1MEM
85#undef VACCTIMESI2MEM
86#define VACCTIMESI1MEM(A,ACC,O,P) VACCTIMESI1MEMd(A,ACC,O,P)
87#define VACCTIMESI2MEM(A,ACC,O,P) VACCTIMESI2MEMd(A,ACC,O,P)
88
89#undef VACCTIMESMINUSI1MEM
90#undef VACCTIMESMINUSI2MEM
91#define VACCTIMESMINUSI1MEM(A,ACC,O,P) VACCTIMESMINUSI1MEMd(A,ACC,O,P)
92#define VACCTIMESMINUSI2MEM(A,ACC,O,P) VACCTIMESMINUSI2MEMd(A,ACC,O,P)
93
94#undef VPERM0
95#undef VPERM1
96#undef VPERM2
97#undef VPERM3
98#define VPERM0(A,B) VPERM0d(A,B)
99#define VPERM1(A,B) VPERM1d(A,B)
100#define VPERM2(A,B) VPERM2d(A,B)
101#define VPERM3(A,B) VPERM3d(A,B)
102
103#undef VSHUFMEM
104#undef VADDMEM
105#undef VSUBMEM
106#define VSHUFMEM(OFF,A,DEST) VSHUFMEMd(OFF,A,DEST)
107#define VADDMEM(O,A,B,C) VADDMEMd(O,A,B,C)
108#define VSUBMEM(O,A,B,C) VSUBMEMd(O,A,B,C)
109
110#undef VMOVIDUP
111#undef VMOVRDUP
112#undef VMADDSUB
113#undef VSHUF
114#define VMOVIDUP(A,B,C) VMOVIDUPd(A,B,C)
115#define VMOVRDUP(A,B,C) VMOVRDUPd(A,B,C)
116#define VMADDSUB(A,B,accum) VMADDSUBd(A,B,accum)
117#define VSHUF(A,B) VSHUFd(A,B)
118
119
120#undef ZEND1
121#undef ZEND2
122#undef ZLOAD
123#undef ZMUL
124#undef ZMADD
125#undef ZMULMEM2SP
126#undef ZMADDMEM2SP
127
128#define ZEND1(A,B,C) ZEND1d(A,B,C)
129#define ZEND2(A,B,C) ZEND2d(A,B,C)
130#define ZLOAD(A,B,C,D) ZLOADd(A,B,C,D)
131#define ZMUL(A,B,C,D,E) ZMULd(A,B,C,D,E)
132#define ZMADD(A,B,C,D,E) ZMADDd(A,B,C,D,E)
133#define ZMULMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMULMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)
134#define ZMADDMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMADDMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)
135
136
137#undef VRDUP
138#undef VIDUP
139#undef VMADDSUBMEM
140#undef VMADDMEM
141#undef VMULMEM
142#define VRDUP(SRC,DEST) VRDUPd(SRC,DEST)
143#define VIDUP(SRC,DEST) VIDUPd(SRC,DEST)
144#define VMADDSUBMEM(O,P,B,accum) VMADDSUBMEMd(O,P,B,accum)
145#define VMADDMEM(O,P,B,accum) VMADDMEMd(O,P,B,accum)
146#define VMULMEM(O,P,B,accum) VMULMEMd(O,P,B,accum)
147#undef VMADDRDUP
148#undef VMADDSUBRDUP
149#undef VMADDSUBIDUP
150#undef VMULRDUP
151#undef VMULIDUP
152#define VMADDRDUP(O,P,B,accum) VMADDRDUPd(O,P,B,accum)
153#define VMADDSUBRDUP(O,P,B,accum) VMADDSUBRDUPd(O,P,B,accum)
154#define VMADDSUBIDUP(O,P,B,accum) VMADDSUBIDUPd(O,P,B,accum)
155#define VMULRDUP(O,P,B,accum) VMULRDUPd(O,P,B,accum)
156#define VMULIDUP(O,P,B,accum) VMULIDUPd(O,P,B,accum)