| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  | // Copyright 2009-2021 Intel Corporation
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  | // SPDX-License-Identifier: Apache-2.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "../sys/platform.h"
 | 
					
						
							|  |  |  | #include "../sys/intrinsics.h"
 | 
					
						
							|  |  |  | #include "../math/constants.h"
 | 
					
						
							|  |  |  | #include "../sys/alloc.h"
 | 
					
						
							|  |  |  | #include "varying.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "vboolf16_avx512.h"
 | 
					
						
							|  |  |  | #include "vint16_avx512.h"
 | 
					
						
							|  |  |  | #include "vuint16_avx512.h"
 | 
					
						
							|  |  |  | #include "vfloat16_avx512.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "vboold8_avx512.h"
 | 
					
						
							|  |  |  | #include "vllong8_avx512.h"
 | 
					
						
							|  |  |  | #include "vdouble8_avx512.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace embree | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   ////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  |   /// Prefetching
 | 
					
						
							|  |  |  |   ////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PFHINT_L1   0
 | 
					
						
							|  |  |  | #define PFHINT_L2   1
 | 
					
						
							|  |  |  | #define PFHINT_NT   2
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   template<const unsigned int mode> | 
					
						
							|  |  |  |     __forceinline void prefetch(const void * __restrict__ const m) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     if (mode == PFHINT_L1) | 
					
						
							|  |  |  |       _mm_prefetch((const char*)m,_MM_HINT_T0);  | 
					
						
							|  |  |  |     else if (mode == PFHINT_L2)  | 
					
						
							|  |  |  |       _mm_prefetch((const char*)m,_MM_HINT_T1);  | 
					
						
							|  |  |  |     else if (mode == PFHINT_NT)  | 
					
						
							|  |  |  |       _mm_prefetch((const char*)m,_MM_HINT_NTA);  | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |