61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Vectorial - vector math library
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Motivation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    I couldn't find an open source math library that was usable and
							 | 
						||
| 
								 | 
							
								    supported simd - especially the ARM NEON variant.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Features
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Supports NEON, SSE, scalar and generic gcc vector extension.
							 | 
						||
| 
								 | 
							
								    Most basic vector and matrix math is available, but not quite
							 | 
						||
| 
								 | 
							
								    yet full featured.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Design
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Vectorial consists of two main parts, pure-C wrapper around
							 | 
						||
| 
								 | 
							
								    platform-specific vector instructions in the simd*.h files
							 | 
						||
| 
								 | 
							
								    and C++ classes for common uses, the vec*.h and mat*.h
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    The config.h autodetects approriate vector instructions to use.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    The platform-specific support is done with intrisincs only,
							 | 
						||
| 
								 | 
							
								    allowing the compiler to have a full view of the code, hopefully
							 | 
						||
| 
								 | 
							
								    resulting in better optimizations especially with reordering etc.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Installation / Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Add vectorial/include to your include path
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #include "vectorial/simd4f.h"  
							 | 
						||
| 
								 | 
							
								    for C-only simd wrapper, using it looks like this:
							 | 
						||
| 
								 | 
							
								      simd4f v = simd4f_normalize( simd4f_add( simd4f_create(1,2,3,4), y) );
							 | 
						||
| 
								 | 
							
								      float z = simd4f_get_z(v);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #include "vectorial/vectorial.h"
							 | 
						||
| 
								 | 
							
								    for C++ classes. They reside in vectorial namespace, you might
							 | 
						||
| 
								 | 
							
								    want to alias them to your own namespace
							 | 
						||
| 
								 | 
							
								      namespace myproject {
							 | 
						||
| 
								 | 
							
								        using namespace ::vectorial;
							 | 
						||
| 
								 | 
							
								        // if you like different name: typedef vec3f Vector3;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      using myproject::vec4f;
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								      vec4f v = normalize( vec4f(1,2,3,4) + y );
							 | 
						||
| 
								 | 
							
								      float z = v.z();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    2-clause BSD. See LICENSE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |