10#include "VectorVM.generated.h"
13#define VM_FORCEINLINE FORCENOINLINE
15#define VM_FORCEINLINE FORCEINLINE
22 struct FVectorVMExecContext;
23 struct FVectorVMRuntimeContext;
24 struct FVectorVMState;
28#define VECTOR_WIDTH (128)
29#define VECTOR_WIDTH_BYTES (16)
30#define VECTOR_WIDTH_FLOATS (4)
50#define VVM_OP_XM_LIST \
51 VVM_OP_XM( done , Other , 0 , 0 , done , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
52 VVM_OP_XM( add , Op , 2 , 1 , f , 0 , 2 , VVM_INS_PARAM_FFFFFF) \
53 VVM_OP_XM( sub , Op , 2 , 1 , f , 2 , 3 , VVM_INS_PARAM_FFFFFF) \
54 VVM_OP_XM( mul , Op , 2 , 1 , f , 5 , 8 , VVM_INS_PARAM_FFFFFF) \
55 VVM_OP_XM( div , Op , 2 , 1 , f , 13 , 3 , VVM_INS_PARAM_FFFFFF) \
56 VVM_OP_XM( mad , Op , 3 , 1 , f , 16 , 7 , VVM_INS_PARAM_FFFFFF) \
57 VVM_OP_XM( lerp , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
58 VVM_OP_XM( rcp , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
59 VVM_OP_XM( rsq , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
60 VVM_OP_XM( sqrt , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
61 VVM_OP_XM( neg , Op , 1 , 1 , f , 23 , 1 , VVM_INS_PARAM_FFFFFF) \
62 VVM_OP_XM( abs , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
63 VVM_OP_XM( exp , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
64 VVM_OP_XM( exp2 , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
65 VVM_OP_XM( log , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
66 VVM_OP_XM( log2 , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
67 VVM_OP_XM( sin , Op , 1 , 1 , f , 24 , 1 , VVM_INS_PARAM_FFFFFF) \
68 VVM_OP_XM( cos , Op , 1 , 1 , f , 25 , 1 , VVM_INS_PARAM_FFFFFF) \
69 VVM_OP_XM( tan , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
70 VVM_OP_XM( asin , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
71 VVM_OP_XM( acos , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
72 VVM_OP_XM( atan , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
73 VVM_OP_XM( atan2 , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
74 VVM_OP_XM( ceil , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
75 VVM_OP_XM( floor , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
76 VVM_OP_XM( fmod , Op , 2 , 1 , f , 26 , 1 , VVM_INS_PARAM_FFFFFF) \
77 VVM_OP_XM( frac , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
78 VVM_OP_XM( trunc , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
79 VVM_OP_XM( clamp , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
80 VVM_OP_XM( min , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
81 VVM_OP_XM( max , Op , 2 , 1 , f , 27 , 1 , VVM_INS_PARAM_FFFFFF) \
82 VVM_OP_XM( pow , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
83 VVM_OP_XM( round , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
84 VVM_OP_XM( sign , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
85 VVM_OP_XM( step , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
86 VVM_OP_XM( random , Op , 1 , 1 , null , 28 , 2 , VVM_INS_PARAM_FFFFFF) \
87 VVM_OP_XM( noise , Op , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
88 VVM_OP_XM( cmplt , Op , 2 , 1 , f , 30 , 3 , VVM_INS_PARAM_FFFIFF) \
89 VVM_OP_XM( cmple , Op , 2 , 1 , f , 33 , 3 , VVM_INS_PARAM_FFFIFF) \
90 VVM_OP_XM( cmpgt , Op , 2 , 1 , f , 36 , 2 , VVM_INS_PARAM_FFFIFF) \
91 VVM_OP_XM( cmpge , Op , 2 , 1 , f , 38 , 2 , VVM_INS_PARAM_FFFIFF) \
92 VVM_OP_XM( cmpeq , Op , 2 , 1 , f , 40 , 3 , VVM_INS_PARAM_FFFIFF) \
93 VVM_OP_XM( cmpneq , Op , 2 , 1 , f , 43 , 2 , VVM_INS_PARAM_FFFIFF) \
94 VVM_OP_XM( select , Op , 3 , 1 , f , 45 , 2 , VVM_INS_PARAM_FFFFFI) \
95 VVM_OP_XM( addi , Op , 2 , 1 , i , 47 , 2 , VVM_INS_PARAM_FFIIII) \
96 VVM_OP_XM( subi , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
97 VVM_OP_XM( muli , Op , 2 , 1 , i , 49 , 1 , VVM_INS_PARAM_FFIIII) \
98 VVM_OP_XM( divi , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
99 VVM_OP_XM( clampi , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
100 VVM_OP_XM( mini , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
101 VVM_OP_XM( maxi , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
102 VVM_OP_XM( absi , Op , 1 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
103 VVM_OP_XM( negi , Op , 1 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
104 VVM_OP_XM( signi , Op , 1 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
105 VVM_OP_XM( randomi , Op , 1 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFIIII) \
106 VVM_OP_XM( cmplti , Op , 2 , 1 , i , 50 , 3 , VVM_INS_PARAM_FFIIII) \
107 VVM_OP_XM( cmplei , Op , 2 , 1 , i , 53 , 3 , VVM_INS_PARAM_FFIIII) \
108 VVM_OP_XM( cmpgti , Op , 2 , 1 , i , 59 , 2 , VVM_INS_PARAM_FFIIII) \
109 VVM_OP_XM( cmpgei , Op , 2 , 1 , i , 61 , 2 , VVM_INS_PARAM_FFIIII) \
110 VVM_OP_XM( cmpeqi , Op , 2 , 1 , i , 56 , 3 , VVM_INS_PARAM_FFIIII) \
111 VVM_OP_XM( cmpneqi , Op , 2 , 1 , i , 63 , 2 , VVM_INS_PARAM_FFIIII) \
112 VVM_OP_XM( bit_and , Op , 2 , 1 , i , 65 , 1 , VVM_INS_PARAM_FFIIII) \
113 VVM_OP_XM( bit_or , Op , 2 , 1 , i , 66 , 1 , VVM_INS_PARAM_FFIIII) \
114 VVM_OP_XM( bit_xor , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
115 VVM_OP_XM( bit_not , Op , 1 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
116 VVM_OP_XM( bit_lshift , Op , 2 , 1 , i , 67 , 1 , VVM_INS_PARAM_FFIIII) \
117 VVM_OP_XM( bit_rshift , Op , 2 , 1 , i , 68 , 1 , VVM_INS_PARAM_FFIIII) \
118 VVM_OP_XM( logic_and , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
119 VVM_OP_XM( logic_or , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
120 VVM_OP_XM( logic_xor , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
121 VVM_OP_XM( logic_not , Op , 1 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFIIII) \
122 VVM_OP_XM( f2i , Op , 1 , 1 , i , 74 , 3 , VVM_INS_PARAM_FFFFFI) \
123 VVM_OP_XM( i2f , Op , 1 , 1 , f , 69 , 5 , VVM_INS_PARAM_FFFFIF) \
124 VVM_OP_XM( f2b , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFI) \
125 VVM_OP_XM( b2f , Op , 1 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFIF) \
126 VVM_OP_XM( i2b , Op , 1 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFFFII) \
127 VVM_OP_XM( b2i , Op , 1 , 1 , i , 77 , 1 , VVM_INS_PARAM_FFFFII) \
128 VVM_OP_XM( inputdata_float , Input , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
129 VVM_OP_XM( inputdata_int32 , Input , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
130 VVM_OP_XM( inputdata_half , Input , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
131 VVM_OP_XM( inputdata_noadvance_float , Input , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
132 VVM_OP_XM( inputdata_noadvance_int32 , Input , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
133 VVM_OP_XM( inputdata_noadvance_half , Input , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
134 VVM_OP_XM( outputdata_float , Output , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFI) \
135 VVM_OP_XM( outputdata_int32 , Output , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFIII) \
136 VVM_OP_XM( outputdata_half , Output , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFI) \
137 VVM_OP_XM( acquireindex , IndexGen , 1 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFII) \
138 VVM_OP_XM( external_func_call , ExtFnCall , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
139 VVM_OP_XM( exec_index , Op , 1 , 1 , null , 78 , 2 , VVM_INS_PARAM_FFFFFI) \
140 VVM_OP_XM( noise2D , Other , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
141 VVM_OP_XM( noise3D , Other , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
142 VVM_OP_XM( enter_stat_scope , Stat , 1 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
143 VVM_OP_XM( exit_stat_scope , Stat , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
144 VVM_OP_XM( update_id , RWBuffer , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
145 VVM_OP_XM( acquire_id , RWBuffer , 1 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
146 VVM_OP_XM( half_to_float , Op , 1 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
147 VVM_OP_XM( fasi , Op , 1 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
148 VVM_OP_XM( iasf , Op , 1 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFFFFI) \
153 VVM_OP_XM( exec_indexf , Op , 1 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFIIIF) \
154 VVM_OP_XM( exec_index_addi , Op , 1 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFIIII) \
155 VVM_OP_XM( cmplt_select , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
156 VVM_OP_XM( cmple_select , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
157 VVM_OP_XM( cmpeq_select , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
158 VVM_OP_XM( cmplti_select , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
159 VVM_OP_XM( cmplei_select , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
160 VVM_OP_XM( cmpeqi_select , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
161 VVM_OP_XM( cmplt_logic_and , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFII) \
162 VVM_OP_XM( cmple_logic_and , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFII) \
163 VVM_OP_XM( cmpgt_logic_and , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFII) \
164 VVM_OP_XM( cmpge_logic_and , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFII) \
165 VVM_OP_XM( cmpeq_logic_and , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFII) \
166 VVM_OP_XM( cmpne_logic_and , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFII) \
167 VVM_OP_XM( cmplti_logic_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFII) \
168 VVM_OP_XM( cmplei_logic_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFII) \
169 VVM_OP_XM( cmpgti_logic_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFII) \
170 VVM_OP_XM( cmpgei_logic_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFIF) \
171 VVM_OP_XM( cmpeqi_logic_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFIF) \
172 VVM_OP_XM( cmpnei_logic_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFIF) \
173 VVM_OP_XM( cmplt_logic_or , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
174 VVM_OP_XM( cmple_logic_or , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
175 VVM_OP_XM( cmpgt_logic_or , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
176 VVM_OP_XM( cmpge_logic_or , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
177 VVM_OP_XM( cmpeq_logic_or , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
178 VVM_OP_XM( cmpne_logic_or , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
179 VVM_OP_XM( cmplti_logic_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
180 VVM_OP_XM( cmplei_logic_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
181 VVM_OP_XM( cmpgti_logic_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
182 VVM_OP_XM( cmpgei_logic_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
183 VVM_OP_XM( cmpeqi_logic_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
184 VVM_OP_XM( cmpnei_logic_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FIIFFF) \
185 VVM_OP_XM( mad_add , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
186 VVM_OP_XM( mad_sub0 , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
187 VVM_OP_XM( mad_sub1 , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
188 VVM_OP_XM( mad_mul , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
189 VVM_OP_XM( mad_sqrt , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
190 VVM_OP_XM( mad_mad0 , Op , 5 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
191 VVM_OP_XM( mad_mad1 , Op , 5 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
192 VVM_OP_XM( mul_mad0 , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
193 VVM_OP_XM( mul_mad1 , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
194 VVM_OP_XM( mul_add , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
195 VVM_OP_XM( mul_sub0 , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
196 VVM_OP_XM( mul_sub1 , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
197 VVM_OP_XM( mul_mul , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
198 VVM_OP_XM( mul_max , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
199 VVM_OP_XM( mul_2x , Op , 2 , 2 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
200 VVM_OP_XM( add_mad1 , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
201 VVM_OP_XM( add_add , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
202 VVM_OP_XM( sub_cmplt1 , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFIFFF) \
203 VVM_OP_XM( sub_neg , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
204 VVM_OP_XM( sub_mul , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
205 VVM_OP_XM( div_mad0 , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
206 VVM_OP_XM( div_f2i , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFFFFI) \
207 VVM_OP_XM( div_mul , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
208 VVM_OP_XM( muli_addi , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_IIIIII) \
209 VVM_OP_XM( addi_bit_rshift , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_IIIIII) \
210 VVM_OP_XM( addi_muli , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_IIIIII) \
211 VVM_OP_XM( b2i_2x , Op , 1 , 2 , i , 0 , 0 , VVM_INS_PARAM_IIIIII) \
212 VVM_OP_XM( i2f_div0 , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
213 VVM_OP_XM( i2f_div1 , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
214 VVM_OP_XM( i2f_mul , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
215 VVM_OP_XM( i2f_mad0 , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
216 VVM_OP_XM( i2f_mad1 , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
217 VVM_OP_XM( f2i_select1 , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_IIFIII) \
218 VVM_OP_XM( f2i_maxi , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_IIIFII) \
219 VVM_OP_XM( f2i_addi , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_IIIFII) \
220 VVM_OP_XM( fmod_add , Op , 3 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
221 VVM_OP_XM( bit_and_i2f , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
222 VVM_OP_XM( bit_rshift_bit_and , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
223 VVM_OP_XM( neg_cmplt , Op , 2 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
224 VVM_OP_XM( bit_or_muli , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
225 VVM_OP_XM( bit_lshift_bit_or , Op , 3 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
226 VVM_OP_XM( random_add , Op , 2 , 1 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
227 VVM_OP_XM( random_2x , Op , 1 , 2 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
228 VVM_OP_XM( max_f2i , Op , 2 , 1 , i , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
229 VVM_OP_XM( select_mul , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
230 VVM_OP_XM( select_add , Op , 4 , 1 , f , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
231 VVM_OP_XM( sin_cos , Op , 1 , 2 , null , 0 , 0 , VVM_INS_PARAM_FFFFFF) \
232 VVM_OP_XM( outputdata_float_from_half , Output , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFI) \
233 VVM_OP_XM( outputdata_half_from_half , Output , 0 , 0 , null , 0 , 0 , VVM_INS_PARAM_FFFFFI)
235#define VVM_OP_XM(n, ...) n,
392 : StatId(InObj.StatId)
402 #define VVM_EXT_FUNC_INPUT_LOC_BIT (unsigned short)(1<<15)
403 #define VVM_EXT_FUNC_INPUT_LOC_MASK (unsigned short)~VVM_EXT_FUNC_INPUT_LOC_BIT
414 check(AdvanceOffset == 0);
435 const T*
RESTRICT InputPtr =
nullptr;
436 const T*
RESTRICT StartPtr =
nullptr;
437 int32 AdvanceOffset = 0;
449 InputPtr = (T*)
Context.GetNextRegister(&AdvanceOffset);
450 InputPtr +=
Context.PerInstanceFnInstanceIdx * AdvanceOffset;
457 inline void Reset(){ InputPtr = StartPtr; }
459 inline const T
Get() {
return *InputPtr; }
460 inline const T*
GetDest() {
return InputPtr; }
464 const T* Ret = InputPtr;
465 InputPtr += AdvanceOffset;
470 const T* Ret = InputPtr;
471 InputPtr += AdvanceOffset;
481 int32 AdvanceOffset = 0;
491 inline bool IsValid()
const {
return AdvanceOffset > 0; }
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:48
FRDGImportedBuffer Register(FRDGBuilder &GraphBuilder, const FRDGExternalBuffer &In, ERDGImportedBufferFlags Flags, ERDGUnorderedAccessViewFlags UAVFlags)
Definition HairStrandsInterface.cpp:94
#define UENUM(...)
Definition ObjectMacros.h:749
EVectorVMBaseTypes
Definition VectorVM.h:34
#define VVM_OP_XM_LIST
Definition VectorVM.h:50
EVectorVMOperandLocation
Definition VectorVM.h:43
#define VM_FORCEINLINE
Definition VectorVM.h:15
EVectorVMOp
Definition VectorVM.h:237
Definition VectorVM.h:316
FRandomStream & GetRandStream()
Definition VectorVM.h:346
int NumUserPtrs
Definition VectorVM.h:330
int32 * GetRandCounters()
Definition VectorVM.h:338
int StartInstance
Definition VectorVM.h:324
int RegReadCount
Definition VectorVM.h:321
VM_FORCEINLINE int32 GetNumInstances() const
Definition VectorVM.h:337
int32 GetNumLoops() const
Definition VectorVM.h:348
VM_FORCEINLINE int32 GetStartInstance() const
Definition VectorVM.h:336
FRandomStream * RandStream
Definition VectorVM.h:332
float * GetNextRegister(int32 *OutAdvanceOffset)
Definition VectorVM.h:350
int NumInstances
Definition VectorVM.h:325
TArrayView< FDataSetMeta > DataSets
Definition VectorVM.h:334
int32 ** RandCounters
Definition VectorVM.h:333
int NumRegisters
Definition VectorVM.h:322
uint8 * RegInc
Definition VectorVM.h:319
int NumLoops
Definition VectorVM.h:326
void * GetUserPtrTable(int32 UserPtrIdx)
Definition VectorVM.h:347
void ** UserPtrTable
Definition VectorVM.h:329
int PerInstanceFnInstanceIdx
Definition VectorVM.h:327
MS_ALIGN(32) uint32 **RegisterData GCC_ALIGN(32)
Definition ArrayView.h:139
EVectorVMFlags
Definition VectorVM.h:530
@ VVMFlag_HasRandInstruction
Definition VectorVM.h:534
@ VVMFlag_OptSaveIntermediateState
Definition VectorVM.h:531
@ VVMFlag_LargeScript
Definition VectorVM.h:533
@ VVMFlag_OptOmitStats
Definition VectorVM.h:532
@ VVMFlag_DataMapCacheSetup
Definition VectorVM.h:535
Definition VectorVMRuntime.cpp:31
Definition VectorVM.cpp:19
uint8 GetNumOpCodes()
Definition VectorVM.cpp:21
void Init()
Definition VectorVM.cpp:71
uint8 CreateSrcOperandMask(EVectorVMOperandLocation Type0, EVectorVMOperandLocation Type1, EVectorVMOperandLocation Type2)
Definition VectorVM.cpp:58
Definition RandomStream.h:20
Definition VectorVM.h:361
int32 NumOutputs
Definition VectorVM.h:364
const FVMExternalFunction * Function
Definition VectorVM.h:362
int32 NumInputs
Definition VectorVM.h:363
Definition LightweightStats.h:416
Definition VectorVM.h:512
FExternalFuncConstHandler(FVectorVMExternalFunctionContext &Context)
Definition VectorVM.h:515
VM_FORCEINLINE const T & GetAndAdvance()
Definition VectorVM.h:525
VM_FORCEINLINE const T & Get()
Definition VectorVM.h:524
VM_FORCEINLINE void Advance()
Definition VectorVM.h:526
T Constant
Definition VectorVM.h:513
Definition VectorVM.h:478
FExternalFuncRegisterHandler(FVectorVMExternalFunctionContext &Context)
Definition VectorVM.h:483
void Advance()
Definition VectorVM.h:494
bool IsValid() const
Definition VectorVM.h:491
const T GetAndAdvance()
Definition VectorVM.h:496
void Advance(int32 Count)
Definition VectorVM.h:495
const T Get()
Definition VectorVM.h:492
T * GetDestAndAdvance()
Definition VectorVM.h:502
T * GetDest()
Definition VectorVM.h:493
Definition VectorVM.h:407
VM_FORCEINLINE const T * operator->() const
Definition VectorVM.h:425
VM_FORCEINLINE T * operator->()
Definition VectorVM.h:421
VM_FORCEINLINE T * Get()
Definition VectorVM.h:420
int32 UserPtrIdx
Definition VectorVM.h:408
VM_FORCEINLINE const T * Get() const
Definition VectorVM.h:424
FUserPtrHandler(FVectorVMExternalFunctionContext &Context)
Definition VectorVM.h:410
T * Ptr
Definition VectorVM.h:409