Go to the documentation of this file.
28#ifndef GRID_ASM_AV512_H
29#define GRID_ASM_AV512_H
35#define ZLOADf(OFF,PTR,ri,ir) VLOADf(OFF,PTR,ir) VSHUFf(ir,ri)
36#define ZLOADd(OFF,PTR,ri,ir) VLOADd(OFF,PTR,ir) VSHUFd(ir,ri)
38#define ZMULf(Ari,Air,B,Criir,Ciirr) VMULf(Ari,B,Criir) VMULf(Air,B,Ciirr)
39#define ZMULd(Ari,Air,B,Criir,Ciirr) VMULd(Ari,B,Criir) VMULd(Air,B,Ciirr)
41#define ZMADDf(Ari,Air,B,Criir,Ciirr) VMADDf(Ari,B,Criir) VMADDf(Air,B,Ciirr)
42#define ZMADDd(Ari,Air,B,Criir,Ciirr) VMADDd(Ari,B,Criir) VMADDd(Air,B,Ciirr)
44#define ZENDf(Criir,Ciirr, tmp) ZEND1f(Criir,Ciirr, tmp) ZEND2f(Criir,Ciirr, tmp)
45#define ZENDd(Criir,Ciirr, tmp) ZEND1d(Criir,Ciirr, tmp) ZEND2d(Criir,Ciirr, tmp)
47#define ZMULMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)\
49 VMULMEMf(O,P,B,Biirr) \
50 VMULMEMf(O,P,C,Ciirr) \
54#define ZMULMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)\
56 VMULMEMd(O,P,B,Biirr) \
57 VMULMEMd(O,P,C,Ciirr) \
61#define ZMADDMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)\
63 VMADDMEMf(O,P,B,Biirr) \
64 VMADDMEMf(O,P,C,Ciirr) \
68#define ZMADDMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) \
70 VMADDMEMd(O,P,B,Biirr) \
71 VMADDMEMd(O,P,C,Ciirr) \
76#define ZEND1f(Criir,Ciirr, tmp) "vshufps $0xb1," #Criir "," #Criir "," #tmp ";\n"\
77 "vaddps " #tmp "," #Criir "," #Criir"{%k6}" ";\n"
79#define ZEND2f(Criir,Ciirr, tmp) "vshufps $0xb1," #Ciirr "," #Ciirr "," #tmp ";\n"\
80 "vsubps " #tmp "," #Ciirr "," #Criir"{%k7}" ";\n"
82#define ZEND1d(Criir,Ciirr, tmp) "vshufpd $0x55," #Criir "," #Criir "," #tmp ";\n"\
83 "vaddps " #tmp "," #Criir "," #Criir"{%k6}" ";\n"
85#define ZEND2d(Criir,Ciirr, tmp) "vshufpd $0x55," #Ciirr "," #Ciirr "," #tmp ";\n"\
86 "vsubpd " #tmp "," #Ciirr "," #Criir"{%k7};\n"
88#define VMOVRDUPd(OFF,A,DEST) "vpshufd $0x44," #OFF "*64(" #A ")," #DEST ";\n"
89#define VMOVIDUPd(OFF,A,DEST) "vpshufd $0xee," #OFF "*64(" #A ")," #DEST ";\n"
90#define VMOVRDUPf(OFF,PTR,DEST) "vmovsldup " #OFF "*64(" #PTR "), " #DEST ";\n"
91#define VMOVIDUPf(OFF,PTR,DEST) "vmovshdup " #OFF "*64(" #PTR "), " #DEST ";\n"
93#define VRDUPd(SRC,DEST) "vpshufd $0x44," #SRC"," #DEST ";\n"
94#define VRDUPf(SRC,DEST) "vmovsldup " #SRC ", " #DEST ";\n"
95#define VIDUPd(SRC,DEST) "vpshufd $0xee," #SRC"," #DEST ";\n"
96#define VIDUPf(SRC,DEST) "vmovshdup " #SRC ", " #DEST ";\n"
98#define VBCASTRDUPd(OFF,A,DEST) "vbroadcastsd (" #OFF "*16+0)(" #A ")," #DEST ";\n"
99#define VBCASTIDUPd(OFF,A,DEST) "vbroadcastsd (" #OFF "*16+8)(" #A ")," #DEST ";\n"
100#define VBCASTRDUPf(OFF,PTR,DEST) "vbroadcastss (" #OFF "*8 +0)(" #PTR "), " #DEST ";\n"
101#define VBCASTIDUPf(OFF,PTR,DEST) "vbroadcastss (" #OFF "*8 +4)(" #PTR "), " #DEST ";\n"
102#define VBCASTCDUPf(OFF,A,DEST) "vbroadcastsd (" #OFF "*64 )(" #A ")," #DEST ";\n"
103#define VBCASTZDUPf(OFF,A,DEST) "vbroadcastf32x4 (" #OFF "*64 )(" #A ")," #DEST ";\n"
104#define VBCASTCDUP(OFF,A,DEST) VBCASTCDUPf(OFF,A,DEST)
105#define VBCASTZDUP(OFF,A,DEST) VBCASTZDUPf(OFF,A,DEST)
107#define VMADDSUBf(A,B,accum) "vfmaddsub231ps " #A "," #B "," #accum ";\n"
108#define VMADDSUBd(A,B,accum) "vfmaddsub231pd " #A "," #B "," #accum ";\n"
109#define VMADDSUBMEMf(O,P,B,accum) "vfmaddsub231ps " #O"*64("#P "),"#B "," #accum ";\n"
110#define VMADDSUBMEMd(O,P,B,accum) "vfmaddsub231pd " #O"*64("#P "),"#B "," #accum ";\n"
113#define VMADDRDUPf(O,P,B,accum) "vfmadd231ps (" #O"*8+0)("#P "){1to16},"#B "," #accum ";\n"
114#define VMADDIDUPf(O,P,B,accum) "vfmadd231ps (" #O"*8+4)("#P "){1to16},"#B "," #accum ";\n"
115#define VMADDSUBRDUPf(O,P,B,accum) "vfmaddsub231ps (" #O"*8+0)("#P "){1to16},"#B "," #accum ";\n"
116#define VMADDSUBIDUPf(O,P,B,accum) "vfmaddsub231ps (" #O"*8+4)("#P "){1to16},"#B "," #accum ";\n"
117#define VMULRDUPf(O,P,B,accum) "vmulps (" #O"*8+0)("#P "){1to16},"#B "," #accum ";\n"
118#define VMULIDUPf(O,P,B,accum) "vmulps (" #O"*8+4)("#P "){1to16},"#B "," #accum ";\n"
120#define VMADDRDUPd(O,P,B,accum) "vfmadd231pd (" #O"*16+0)("#P "){1to8},"#B "," #accum ";\n"
121#define VMADDIDUPd(O,P,B,accum) "vfmadd231pd (" #O"*16+8)("#P "){1to8},"#B "," #accum ";\n"
122#define VMADDSUBRDUPd(O,P,B,accum) "vfmaddsub231pd (" #O"*16+0)("#P "){1to8},"#B "," #accum ";\n"
123#define VMADDSUBIDUPd(O,P,B,accum) "vfmaddsub231pd (" #O"*16+8)("#P "){1to8},"#B "," #accum ";\n"
124#define VMULRDUPd(O,P,B,accum) "vmulpd (" #O"*16+0)("#P "){1to8},"#B "," #accum ";\n"
125#define VMULIDUPd(O,P,B,accum) "vmulpd (" #O"*16+8)("#P "){1to8},"#B "," #accum ";\n"
131#define VTIMESI0f(A,DEST, Z) VSHUFf(A,DEST)
132#define VTIMESI1f(A,DEST, Z) "vaddps " #DEST "," #Z "," #DEST"{%k6}" ";\n"
133#define VTIMESI2f(A,DEST, Z) "vsubps " #DEST "," #Z "," #DEST"{%k7}" ";\n"
135#define VTIMESI0d(A,DEST, Z) VSHUFd(A,DEST)
136#define VTIMESI1d(A,DEST, Z) "vaddpd " #DEST "," #Z "," #DEST"{%k6}" ";\n"
137#define VTIMESI2d(A,DEST, Z) "vsubpd " #DEST "," #Z "," #DEST"{%k7}" ";\n"
139#define VTIMESMINUSI0f(A,DEST,Z) VSHUFf(A,DEST)
140#define VTIMESMINUSI1f(A,DEST,Z) "vsubps " #DEST "," #Z "," #DEST"{%k6}" ";\n"
141#define VTIMESMINUSI2f(A,DEST,Z) "vaddps " #DEST "," #Z "," #DEST"{%k7}" ";\n"
143#define VTIMESMINUSI0d(A,DEST,Z) VSHUFd(A,DEST)
144#define VTIMESMINUSI1d(A,DEST,Z) "vsubpd " #DEST "," #Z "," #DEST"{%k6}" ";\n"
145#define VTIMESMINUSI2d(A,DEST,Z) "vaddpd " #DEST "," #Z "," #DEST"{%k7}" ";\n"
149#define VACCTIMESMINUSI0f(A,ACC,tmp) VSHUFf(A,tmp)
150#define VACCTIMESMINUSI1f(A,ACC,tmp) "vsubps " #tmp "," #ACC "," #ACC"{%k6}" ";\n"
151#define VACCTIMESMINUSI2f(A,ACC,tmp) "vaddps " #tmp "," #ACC "," #ACC"{%k7}" ";\n"
153#define VACCTIMESMINUSI0d(A,ACC,tmp) VSHUFd(A,tmp)
154#define VACCTIMESMINUSI1d(A,ACC,tmp) "vsubpd " #tmp "," #ACC "," #ACC"{%k6}" ";\n"
155#define VACCTIMESMINUSI2d(A,ACC,tmp) "vaddpd " #tmp "," #ACC "," #ACC"{%k7}" ";\n"
157#define VACCTIMESI0f(A,ACC,tmp) VSHUFf(A,tmp)
158#define VACCTIMESI1f(A,ACC,tmp) "vaddps " #tmp "," #ACC "," #ACC"{%k6}" ";\n"
159#define VACCTIMESI2f(A,ACC,tmp) "vsubps " #tmp "," #ACC "," #ACC"{%k7}" ";\n"
161#define VACCTIMESI0d(A,ACC,tmp) VSHUFd(A,tmp)
162#define VACCTIMESI1d(A,ACC,tmp) "vaddpd " #tmp "," #ACC "," #ACC"{%k6}" ";\n"
163#define VACCTIMESI2d(A,ACC,tmp) "vsubpd " #tmp "," #ACC "," #ACC"{%k7}" ";\n"
172#define VACCTIMESMINUSI0f(A,ACC,tmp) VSHUFf(A,tmp)
173#define VACCTIMESMINUSI1f(A,ACC,tmp) VMADDMEMf(1,%r10,tmp,ACC)
174#define VACCTIMESMINUSI2f(A,ACC,tmp)
177#define VACCTIMESMINUSI0d(A,ACC,tmp) VSHUFd(A,tmp)
178#define VACCTIMESMINUSI1d(A,ACC,tmp) VMADDMEMd(1,%r10,tmp,ACC)
179#define VACCTIMESMINUSI2d(A,ACC,tmp)
184#define VACCTIMESI0f(A,ACC,tmp) VSHUFf(A,tmp)
185#define VACCTIMESI1f(A,ACC,tmp) VMADDMEMf(0,%r10,tmp,ACC)
186#define VACCTIMESI2f(A,ACC,tmp)
188#define VACCTIMESI0d(A,ACC,tmp) VSHUFd(A,tmp)
189#define VACCTIMESI1d(A,ACC,tmp) VMADDMEMd(0,%r10,tmp,ACC)
190#define VACCTIMESI2d(A,ACC,tmp)
194#define VPERM0f(A,B) "vshuff32x4 $0x4e," #A "," #B "," #B ";\n"
195#define VPERM1f(A,B) "vshuff32x4 $0xb1," #A "," #B "," #B ";\n"
196#define VPERM2f(A,B) "vshufps $0x4e," #A "," #B "," #B ";\n"
197#define VPERM3f(A,B) "vshufps $0xb1," #A "," #B "," #B ";\n"
199#define VPERM0d(A,B) "vshuff64x2 $0x4e," #A "," #B "," #B ";\n"
200#define VPERM1d(A,B) "vshuff64x2 $0xb1," #A "," #B "," #B ";\n"
201#define VPERM2d(A,B) "vshufpd $0x55," #A "," #B "," #B ";\n"
202#define VPERM3d(A,B) VMOVd(A,B)