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
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |