vec Common Interface

The SIMD toolkit common interface is a work in progress. We’ve implemented many types and functions already, but many more remain to be done. Care to contribute?

Specification

For each function, we compare the return values of the vector functions against the return values of their scalar equivalents. Any runtime denormal handling should be on. You can run these tests yourself in the vectest executable.

For integral functions, both sets of values shall match over the domain of the function.

For floating point functions, either: both values are not-a-number, or both values have the same sign and are either infinite or differ by at most 5 ulp. The domain shall be all numbers, except if the compiler finite math option is on, then it shall be all finite numbers.

Stages

Given the specification above, there are four stages of implementation:

These are the SIMD types implemented:

These are the common interface functions implemented:

Altivec Implementation
types U8x16 I8x16 B8x16 U16x8 I16x8 B16x8 U32x4 I32x4 F32x4 B32x4 C64x2 B64x2
summarizers
sum                        
max                        
min                        
unary operators
operator-                        
operator~                        
operator!                        
binary operators
operator*                        
operator/                        
operator%                        
operator+                        
operator-                        
operator&                        
operator|                        
operator^                        
operator<<                        
operator>>                        
operator==                        
operator!=                        
operator<                        
operator>                        
operator<=                        
operator>=                        
operator&&                        
operator||                        
transcendental functions
abs                        
acos                        
asin                        
atan                        
atan2                        
cos                        
cosh                        
exp                        
log                        
max                        
min                        
pow                        
sin                        
sinh                        
sqrt                        
tan                        
tanh                        

As you can see, Altivec has the most complete implementation. Only some float and complex transcendentals need to be filled in.

SSE/SSE2/SSE3 Implementation
types U8x16 I8x16 B8x16 U16x8 I16x8 B16x8 U32x4 I32x4 B32x4 F32x4 F32Bx4 U64x2 I64x2 B64x2 F64x2 F64Bx2
summarizers
sum                                
max                                
min                                
unary operators
operator-                                
operator~                                
operator!                                
binary operators
operator*                                
operator/                                
operator%                                
operator+                                
operator-                                
operator&                                
operator|                                
operator^                                
operator<<                                
operator>>                                
operator==                                
operator!=                                
operator<                                
operator>                                
operator<=                                
operator>=                                
operator&&                                
operator||                                
transcendental functions
abs                                
acos                                
asin                                
atan                                
atan2                                
cos                                
cosh                                
exp                                
log                                
max                                
min                                
pow                                
sin                                
sinh                                
sqrt                                
tan                                
tanh                                

SSE/SSE2/SSE3 has a workable but incomplete implementation. The summarizers, multiplicative and shift functions are largely unimplemented, as are long long, float and double functions.

Mon, 31 Jan 2005. © Pixelglow Software.
» mach
Search
Download
Purchase
Discuss