diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /common/quicktime_win32/vDSP.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'common/quicktime_win32/vDSP.h')
| -rw-r--r-- | common/quicktime_win32/vDSP.h | 3177 |
1 files changed, 3177 insertions, 0 deletions
diff --git a/common/quicktime_win32/vDSP.h b/common/quicktime_win32/vDSP.h new file mode 100644 index 0000000..1aef66e --- /dev/null +++ b/common/quicktime_win32/vDSP.h @@ -0,0 +1,3177 @@ +/* + File: vDSP.h + + Contains: AltiVec DSP Interfaces + + Version: QuickTime 7.3 + + Copyright: (c) 2007 (c) 2000-2001 by Apple Computer, Inc., all rights reserved. + + Bugs?: For bug reports, consult the following page on + the World Wide Web: + + http://developer.apple.com/bugreporter/ + +*/ +#ifndef __VDSP__ +#define __VDSP__ + +#ifndef __CONDITIONALMACROS__ +#include <ConditionalMacros.h> +#endif + +#ifndef __MACTYPES__ +#include <MacTypes.h> +#endif + + + +#if PRAGMA_ONCE +#pragma once +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if PRAGMA_IMPORT +#pragma import on +#endif + +#if PRAGMA_STRUCT_ALIGN + #pragma options align=mac68k +#elif PRAGMA_STRUCT_PACKPUSH + #pragma pack(push, 2) +#elif PRAGMA_STRUCT_PACK + #pragma pack(2) +#endif + +struct DSPComplex { + float real; + float imag; +}; +typedef struct DSPComplex DSPComplex; +struct DSPSplitComplex { + float * realp; + float * imagp; +}; +typedef struct DSPSplitComplex DSPSplitComplex; +struct DSPDoubleComplex { + double real; + double imag; +}; +typedef struct DSPDoubleComplex DSPDoubleComplex; +struct DSPDoubleSplitComplex { + double * realp; + double * imagp; +}; +typedef struct DSPDoubleSplitComplex DSPDoubleSplitComplex; +typedef struct OpaqueFFTSetup* FFTSetup; +typedef struct OpaqueFFTSetupD* FFTSetupD; +typedef SInt32 FFTDirection; +enum { + kFFTDirection_Forward = 1, + kFFTDirection_Inverse = -1 +}; + +typedef SInt32 FFTRadix; +enum { + kFFTRadix2 = 0, + kFFTRadix3 = 1, + kFFTRadix5 = 2 +}; + +/* +------------------------------------------------------------------------------- + The criteria to invoke the PowerPC vector implementation is subject to + change and become less restrictive in the future. +------------------------------------------------------------------------------- +*/ + +/* +------------------------------------------------------------------------------- + Functions create_fftsetup and destroy_fftsetup. + create_fftsetupD and destroy_fftsetupD. + + create_fftsetup will allocate memory and setup a weight array used by + the FFT. The call destroy_fftsetup will free the array. +------------------------------------------------------------------------------- +*/ +/* + * create_fftsetup() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( FFTSetup ) +create_fftsetup( + UInt32 log2n, + FFTRadix radix); + + +/* + * destroy_fftsetup() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +destroy_fftsetup(FFTSetup setup); + + +/* + * create_fftsetupD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( FFTSetupD ) +create_fftsetupD( + UInt32 log2n, + FFTRadix radix); + + +/* + * destroy_fftsetupD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +destroy_fftsetupD(FFTSetupD setup); + + + +/* +------------------------------------------------------------------------------- + Functions ctoz and ztoc. + ctozD and ztocD. + + ctoz converts a complex array to a complex-split array + ztoc converts a complex-split array to a complex array + + Criteria to invoke PowerPC vector code: + 1. size > 3 + 2. strideC = 2 + 3. strideZ = 1 + 4. C is 16-byte aligned and Z.realp and Z.imagp are 16-byte aligned. +------------------------------------------------------------------------------- +*/ +/* + * ctoz() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +ctoz( + const DSPComplex C[], + SInt32 strideC, + DSPSplitComplex * Z, + SInt32 strideZ, + UInt32 size); + + +/* + * ztoc() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +ztoc( + const DSPSplitComplex * Z, + SInt32 strideZ, + DSPComplex C[], + SInt32 strideC, + UInt32 size); + + +/* + * ctozD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +ctozD( + const DSPDoubleComplex C[], + SInt32 strideC, + DSPDoubleSplitComplex * Z, + SInt32 strideZ, + UInt32 size); + + +/* + * ztocD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +ztocD( + const DSPDoubleSplitComplex * Z, + SInt32 strideZ, + DSPDoubleComplex C[], + SInt32 strideC, + UInt32 size); + + + +/* +------------------------------------------------------------------------------- + Functions fft_zip and fft_zipt + fft_zipD and fft_ziptD + + In-place Split Complex Fourier Transform with or without temporary memory. + + Criteria to invoke PowerPC vector code: + + 1. ioData.realp and ioData.imagp must be 16-byte aligned. + 2. stride = 1 + 3. 2 <= log2n <= 20 + 4. bufferTemp.realp and bufferTemp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. Direction can be either + kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft_zip() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zip( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 stride, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zipt() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zipt( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 stride, + DSPSplitComplex * bufferTemp, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zipD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zipD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 stride, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_ziptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_ziptD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 stride, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2n, + FFTDirection direction); + + + +/* +------------------------------------------------------------------------------- + Functions fft_zop and fft_zopt + fft_zopD and fft_zoptD + + Out-of-place Split Complex Fourier Transform with or without temporary + memory + + Criteria to invoke PowerPC vector code: + + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1 + 3. result.realp and result.imagp must be 16-byte aligned. + 4. strideResult = 1 + 5. 2 <= log2n <= 20 + 6. bufferTemp.realp and bufferTemp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. Direction can be either + kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft_zop() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zopt() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zopt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * result, + SInt32 strideResult, + DSPSplitComplex * bufferTemp, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zopD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zopD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zoptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zoptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2n, + FFTDirection direction); + + + +/* +------------------------------------------------------------------------------- + Functions fft_zrip and fft_zript + fft_zripD and fft_zriptD + + In-Place Real Fourier Transform with or without temporary memory, + split Complex Format + + Criteria to invoke PowerPC vector code: + 1. ioData.realp and ioData.imagp must be 16-byte aligned. + 2. stride = 1 + 3. 3 <= log2n <= 13 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. Direction can be either + kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft_zrip() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zrip( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 stride, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zript() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zript( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 stride, + DSPSplitComplex * bufferTemp, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zripD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zripD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 stride, + UInt32 log2n, + FFTDirection flag); + + +/* + * fft_zriptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zriptD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 stride, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2n, + SInt32 flag); + + + +/* +------------------------------------------------------------------------------- + Functions fft_zrop and fft_zropt + fft_zropD and fft_zroptD + + Out-of-Place Real Fourier Transform with or without temporary memory, + split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1 + 3. result.realp and result.imagp must be be 16-byte aligned. + 4. strideResult = 1 + 5. 3 <= log2n <= 13 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. Direction can be either + kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft_zrop() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zrop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zropt() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft_zropt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * result, + SInt32 strideResult, + DSPSplitComplex * bufferTemp, + UInt32 log2n, + FFTDirection direction); + + +/* + * fft_zropD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zropD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 log2n, + SInt32 flag); + + +/* + * fft_zroptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft_zroptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2n, + SInt32 flag); + + + +/* +------------------------------------------------------------------------------- + Functions fft2d_zip and fft2d_zipt + fft2d_zipD and fft2d_ziptD + + In-place two dimensional Split Complex Fourier Transform with or without + temporary memory + + Criteria to invoke PowerPC vector code: + 1. ioData.realp and ioData.imagp must be 16-byte aligned. + 2. strideInRow = 1; + 3. strideInCol must be a multiple of 4 + 4. 2 <= log2nInRow <= 12 + 5. 2 <= log2nInCol <= 12 + 6. bufferTemp.realp and bufferTemp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. ( log2n = log2nInRow + log2nInCol ) + Direction can be either kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft2d_zip() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zip( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 strideInRow, + SInt32 strideInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + FFTDirection direction); + + +/* + * fft2d_zipt() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zipt( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 strideInRow, + SInt32 strideInCol, + DSPSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + FFTDirection direction); + + +/* + * fft2d_zipD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zipD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 strideInRow, + SInt32 strideInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + FFTDirection direction); + + +/* + * fft2d_ziptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_ziptD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 strideInRow, + SInt32 strideInCol, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + FFTDirection direction); + + + +/* +------------------------------------------------------------------------------- + Functions fft2d_zop and fft2d_zopt + fft2d_zopD and fft2d_zoptD + + Out-of-Place two dimemsional Split Complex Fourier Transform with or + without temporary memory + + Criteria to invoke PowerPC vector code: + + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStrideInRow = 1; + 3. signalStrideInCol must be a multiple of 4 + 4. result.realp and result.imagp must be 16-byte aligned. + 5. strideResultInRow = 1; + 6. strideResultInCol must be a multiple of 4 + 7. 2 <= log2nInRow <= 12 + 8. 2 <= log2nInCol <= 12 + 9. bufferTemp.realp and bufferTemp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. ( log2n = log2nInRow + log2nInCol ) + Direction can be either kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft2d_zop() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStrideInRow, + SInt32 signalStrideInCol, + DSPSplitComplex * result, + SInt32 strideResultInRow, + SInt32 strideResultInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + +/* + * fft2d_zopt() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zopt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStrideInRow, + SInt32 signalStrideInCol, + DSPSplitComplex * result, + SInt32 strideResultInRow, + SInt32 strideResultInCol, + DSPSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + +/* + * fft2d_zopD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zopD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStrideInRow, + SInt32 signalStrideInCol, + DSPDoubleSplitComplex * result, + SInt32 strideResultInRow, + SInt32 strideResultInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + +/* + * fft2d_zoptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zoptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStrideInRow, + SInt32 signalStrideInCol, + DSPDoubleSplitComplex * result, + SInt32 strideResultInRow, + SInt32 strideResultInCol, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + + +/* +------------------------------------------------------------------------------- + Functions fft2d_zrip and fft2d_zript + fft2d_zripD and fft2d_zriptD + + In-place two dimensional Real Fourier Transform with or without temporary + memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. ioData.realp and ioData.imagp must be 16-byte aligned. + 2. strideInRow = 1; + 3. strideInCol must be a multiple of 4 + 4. 3 <= log2nInRow <= 12 + 5. 3 <= log2nInCol <= 13 + 6. bufferTemp.realp and bufferTemp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. ( log2n = log2nInRow + log2nInCol ) + Direction can be either kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft2d_zrip() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zrip( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 strideInRow, + SInt32 strideInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + FFTDirection direction); + + +/* + * fft2d_zript() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zript( + FFTSetup setup, + DSPSplitComplex * ioData, + SInt32 strideInRow, + SInt32 strideInCol, + DSPSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + FFTDirection direction); + + +/* + * fft2d_zripD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zripD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 strideInRow, + SInt32 strideInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + +/* + * fft2d_zriptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zriptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 strideInRow, + SInt32 strideInCol, + DSPDoubleSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + + +/* +------------------------------------------------------------------------------- + Functions fft2d_zrop and fft2d_zropt + fft2d_zropD and fft2d_zroptD + + Out-of-Place Two-Dimemsional Real Fourier Transform with or without + temporary memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStrideInRow = 1; + 3. signalStrideInCol must be a multiple of 4 + 4. result.realp and result.imagp must be 16-byte aligned. + 5. strideResultInRow = 1; + 6. strideResultInCol must be a multiple of 4 + 7. 3 <= log2nInRow <= 12 + 8. 3 <= log2nInCol <= 13 + 9. bufferTemp.realp and bufferTemp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The size of temporary memory for each part + is the lower value of 4*n and 16k. ( log2n = log2nInRow + log2nInCol ) + Direction can be either kFFTDirection_Forward or kFFTDirection_Inverse. +------------------------------------------------------------------------------- +*/ +/* + * fft2d_zrop() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zrop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStrideInRow, + SInt32 signalStrideInCol, + DSPSplitComplex * result, + SInt32 strideResultInRow, + SInt32 strideResultInCol, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + +/* + * fft2d_zropt() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +fft2d_zropt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStrideInRow, + SInt32 signalStrideInCol, + DSPSplitComplex * result, + SInt32 strideResultInRow, + SInt32 strideResultInCol, + DSPSplitComplex * bufferTemp, + UInt32 log2nInCol, + UInt32 log2nInRow, + SInt32 flag); + + +/* + * fft2d_zropD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zropD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 Kr, + SInt32 Kc, + DSPDoubleSplitComplex * ioData2, + SInt32 Ir, + SInt32 Ic, + UInt32 log2nc, + UInt32 log2nr, + SInt32 flag); + + +/* + * fft2d_zroptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft2d_zroptD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 Kr, + SInt32 Kc, + DSPDoubleSplitComplex * ioData2, + SInt32 Ir, + SInt32 Ic, + DSPDoubleSplitComplex * temp, + UInt32 log2nc, + UInt32 log2nr, + SInt32 flag); + + + +/* +________________________________________________________________________________ + Functions fftm_zip and fftm_zipt + fftm_zipD and fftm_ziptD + + In-Place multiple One_Dimensional Complex Fourier Transform with or + without temporary memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1; + 3. fftStride must be a multiple of 4 + 4. 2 <= log2n <= 12 + 5. temp.realp and temp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +________________________________________________________________________________ +*/ +/* + * fftm_zip() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zip( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zipt() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zipt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zipD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zipD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_ziptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_ziptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPDoubleSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + + +/* +________________________________________________________________________________ + Functions fftm_zop and fftm_zopt + fftm_zopD and fftm_zoptD + + Out-Of-Place multiple One_Dimensional Complex Fourier Transform with or + without temporary memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1; + 3. fftStride must be a multiple of 4 + 4. result.realp and result.imagp must be 16-byte aligned. + 5. resultStride = 1; + 6. rfftStride must be a multiple of 4 + 7. 2 <= log2n <= 12 + 8. temp.realp and temp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +________________________________________________________________________________ +*/ +/* + * fftm_zop() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zopt() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zopt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + DSPSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zopD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zopD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPDoubleSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zoptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zoptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPDoubleSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + DSPDoubleSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + + +/* +________________________________________________________________________________ + Functions fftm_zrip and fftm_zript + fftm_zripD and fftm_zriptD + + In-Place multiple One_Dimensional Real Fourier Transform with or + without temporary memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1; + 3. fftStride must be a multiple of 4 + 4. 3 <= log2n <= 13 + 5. temp.realp and temp.imagp must be 16-byte aligned. + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +________________________________________________________________________________ +*/ +/* + * fftm_zrip() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zrip( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zript() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zript( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zripD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zripD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zriptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zriptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPDoubleSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + + +/* +________________________________________________________________________________ + Functions fftm_zrop and fftm_zropt + fftm_zropD and fftm_zroptD + + Out-Of-Place multiple One_Dimensional Real Fourier Transform with or + without temporary memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1; + 3. fftStride must be a multiple of 4 + 4. result.realp and result.imagp must be 16-byte aligned. + 5. resultStride = 1; + 6. rfftStride must be a multiple of 4 + 7. 3 <= log2n <= 13 + 8. temp.realp and temp.imagp must be 16-byte aligned. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +________________________________________________________________________________ +*/ +/* + * fftm_zrop() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zrop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zropt() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zropt( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + DSPSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zropD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zropD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPDoubleSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + +/* + * fftm_zroptD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fftm_zroptD( + FFTSetupD setup, + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + SInt32 fftStride, + DSPDoubleSplitComplex * result, + SInt32 resultStride, + SInt32 rfftStride, + DSPDoubleSplitComplex * temp, + UInt32 log2n, + UInt32 numFFT, + SInt32 flag); + + + +/* +________________________________________________________________________________ + Functions fft3_zop and fft5_zop + fft3_zopD and fft5_zopD + + Out-Of-Place One_Dimensional Complex Fourier Transform in base-3 and + base-5 with or without temporary memory, Split Complex Format + + Criteria to invoke PowerPC vector code: + 1. signal.realp and signal.imagp must be 16-byte aligned. + 2. signalStride = 1; + 3. result.realp and result.imagp must be 16-byte aligned. + 4. resultStride = 1; + 5. 3 <= log2n + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +________________________________________________________________________________ +*/ +/* + * fft3_zop() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft3_zop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * result, + SInt32 resultStride, + UInt32 log2n, + SInt32 flag); + + +/* + * fft5_zop() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft5_zop( + FFTSetup setup, + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * result, + SInt32 resultStride, + UInt32 log2n, + SInt32 flag); + + +/* + * fft3_zopD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft3_zopD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 K, + DSPDoubleSplitComplex * ioData2, + SInt32 L, + UInt32 log2n, + SInt32 flag); + + +/* + * fft5_zopD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +fft5_zopD( + FFTSetupD setup, + DSPDoubleSplitComplex * ioData, + SInt32 K, + DSPDoubleSplitComplex * ioData2, + SInt32 L, + UInt32 log2n, + SInt32 flag); + + + +/* +------------------------------------------------------------------------------- + Function conv + convD + + Floating Point Convolution and Correlation in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. signal and result must have relative alignement. + 2. 4 <= lenFilter <= 256 + 3. lenResult > 36 + 4. signalStride = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. strideFilter can be positive for + correlation or negative for convolution. +------------------------------------------------------------------------------- +*/ +/* + * conv() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +conv( + const float signal[], + SInt32 signalStride, + const float filter[], + SInt32 strideFilter, + float result[], + SInt32 strideResult, + SInt32 lenResult, + SInt32 lenFilter); + + +/* + * convD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +convD( + const double signal[], + SInt32 signalStride, + const double filter[], + SInt32 strideFilter, + double result[], + SInt32 strideResult, + SInt32 lenResult, + SInt32 lenFilter); + + +/* +_______________________________________________________________________________ + Functions f3x3, f5x5, and imgfir + f3x3D, f5x5D and imgfirD + + Filter, 3x3, 5x5, MxN Single and Double Precision Convolution + + Criteria to invoke PowerPC vector code: + 1. signal, filter, and result must have relative alignment and + be 16-byte aligned. + 2. for f3x3, NC >= 18 + 3. for f5x5, NC >= 20 + 4. for imgfir, NC >= 20 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +_______________________________________________________________________________ +*/ +/* + * f3x3() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +f3x3( + float * signal, + SInt32 rowStride, + SInt32 colStride, + float * filter, + float * result); + + +/* + * f3x3D() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +f3x3D( + double * signal, + SInt32 rowStride, + SInt32 colStride, + double * filter, + double * result); + + +/* + * f5x5() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +f5x5( + float * signal, + SInt32 rowStride, + SInt32 colStride, + float * filter, + float * result); + + +/* + * f5x5D() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +f5x5D( + double * signal, + SInt32 rowStride, + SInt32 colStride, + double * filter, + double * result); + + +/* + * imgfir() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +imgfir( + float * signal, + SInt32 numRow, + SInt32 numCol, + float * filter, + float * result, + SInt32 fnumRow, + SInt32 fnumCol); + + +/* + * imgfirD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +imgfirD( + double * signal, + SInt32 numRow, + SInt32 numCol, + double * filter, + double * result, + SInt32 fnumRow, + SInt32 fnumCol); + + + +/* +_______________________________________________________________________________ + Function mtrans + mtransD + + Single and Double Precision Matrix Transpose + + Criteria to invoke PowerPC vector code: + 1. a = c + 2. a and c must be 16-byte aligned. + 3. M must be a multiple of 8. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +_______________________________________________________________________________ +*/ +/* + * mtrans() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +mtrans( + float * a, + SInt32 aStride, + float * c, + SInt32 cStride, + SInt32 M, + SInt32 N); + + +/* + * mtransD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +mtransD( + double * a, + SInt32 aStride, + double * c, + SInt32 cStride, + SInt32 M, + SInt32 N); + + +/* +_______________________________________________________________________________ + Function mmul + mmulD + + Single and Double Precision Matrix Multiply + + Criteria to invoke PowerPC vector code: + 1. a, b, c must be 16-byte aligned. + 2. M >= 8. + 3. N >= 32. + 4. P is a multiple of 8. + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +_______________________________________________________________________________ +*/ +/* + * mmul() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +mmul( + float * a, + SInt32 aStride, + float * b, + SInt32 bStride, + float * c, + SInt32 cStride, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * mmulD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +mmulD( + double * a, + SInt32 aStride, + double * b, + SInt32 bStride, + double * c, + SInt32 cStride, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* +_______________________________________________________________________________ + Function zmma, zmms, zmsm, and zmmul + zmmaD, zmmsD, zmsmD, and zmmulD + + Single and Double Precision Complex Split Matrix mul/add, mul/sub, sub/mul, + and mul + + Criteria to invoke PowerPC vector code: + 1. a, b, c, and d must be 16-byte aligned. + 2. N is a multiple of 4. + 3. P is a multiple of 4. + 4. I, J, K, L = 1; + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +_______________________________________________________________________________ +*/ +/* + * zmma() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmma( + DSPSplitComplex * a, + SInt32 i, + DSPSplitComplex * b, + SInt32 j, + DSPSplitComplex * c, + SInt32 k, + DSPSplitComplex * d, + SInt32 l, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmmaD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmmaD( + DSPDoubleSplitComplex * a, + SInt32 i, + DSPDoubleSplitComplex * b, + SInt32 j, + DSPDoubleSplitComplex * c, + SInt32 k, + DSPDoubleSplitComplex * d, + SInt32 l, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmms() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmms( + DSPSplitComplex * a, + SInt32 i, + DSPSplitComplex * b, + SInt32 j, + DSPSplitComplex * c, + SInt32 k, + DSPSplitComplex * d, + SInt32 l, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmmsD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmmsD( + DSPDoubleSplitComplex * a, + SInt32 i, + DSPDoubleSplitComplex * b, + SInt32 j, + DSPDoubleSplitComplex * c, + SInt32 k, + DSPDoubleSplitComplex * d, + SInt32 l, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmsm() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmsm( + DSPSplitComplex * a, + SInt32 i, + DSPSplitComplex * b, + SInt32 j, + DSPSplitComplex * c, + SInt32 k, + DSPSplitComplex * d, + SInt32 l, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmsmD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmsmD( + DSPDoubleSplitComplex * a, + SInt32 i, + DSPDoubleSplitComplex * b, + SInt32 j, + DSPDoubleSplitComplex * c, + SInt32 k, + DSPDoubleSplitComplex * d, + SInt32 l, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmmul() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmmul( + DSPSplitComplex * a, + SInt32 i, + DSPSplitComplex * b, + SInt32 j, + DSPSplitComplex * c, + SInt32 k, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* + * zmmulD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zmmulD( + DSPDoubleSplitComplex * a, + SInt32 i, + DSPDoubleSplitComplex * b, + SInt32 j, + DSPDoubleSplitComplex * c, + SInt32 k, + SInt32 M, + SInt32 N, + SInt32 P); + + +/* +------------------------------------------------------------------------------- + Function vadd + vaddD + + Floating Point Add in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1 and input2 and result are all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vadd() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vadd( + const float input1[], + SInt32 stride1, + const float input2[], + SInt32 stride2, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vaddD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vaddD( + const double input1[], + SInt32 stride1, + const double input2[], + SInt32 stride2, + double result[], + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function vsub + vsubD + + Floating Point Substract in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1 and input2 and result are all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vsub() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vsub( + const float input1[], + SInt32 stride1, + const float input2[], + SInt32 stride2, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vsubD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vsubD( + const double input1[], + SInt32 stride1, + const double input2[], + SInt32 stride2, + double result[], + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function vmul + vmulD + + Floating Point Multiply in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1 and input2 and result must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vmul() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vmul( + const float input1[], + SInt32 stride1, + const float input2[], + SInt32 stride2, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vmulD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vmulD( + const double input1[], + SInt32 stride1, + const double input2[], + SInt32 stride2, + double result[], + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function vsmul + vsmulD + + Floating Point - Scalar Multiply in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1 and result are all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vsmul() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vsmul( + const float input1[], + SInt32 stride1, + const float * input2, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vsmulD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vsmulD( + const double input1[], + SInt32 stride1, + const double * input2, + double result[], + SInt32 strideResult, + UInt32 size); + + + +/* +------------------------------------------------------------------------------- + Function vsq + vsqD + + Floating Point Square in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input and result are relatively aligned. + 2. size >= 8 + 3. strideInput = 1 + 4. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vsq() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vsq( + const float input[], + SInt32 strideInput, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vsqD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vsqD( + const double input[], + SInt32 strideInput, + double result[], + SInt32 strideResult, + UInt32 size); + + + +/* +------------------------------------------------------------------------------- + Function vssq + vssqD + + Floating Point Signed Square in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input and result must be all relatively aligned. + 2. size >= 8 + 3. strideInput = 1 + 4. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vssq() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vssq( + const float input[], + SInt32 strideInput, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vssqD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vssqD( + const double input[], + SInt32 strideInput, + double result[], + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function dotpr + dotprD + + Floating Point Dot product in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1 and input2 are relatively aligned. + 2. size >= 20 + 3. stride1 = 1 + 4. stride2 = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * dotpr() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +dotpr( + const float input1[], + SInt32 stride1, + const float input2[], + SInt32 stride2, + float * result, + UInt32 size); + + +/* + * dotprD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +dotprD( + const double input1[], + SInt32 stride1, + const double input2[], + SInt32 stride2, + double * result, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function vam + vamD + + Floating Point vadd and Multiply in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1, input2, input_3 and result are all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. stride_3 = 1 + 6. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * vam() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +vam( + const float input1[], + SInt32 stride1, + const float input2[], + SInt32 stride2, + const float input3[], + SInt32 stride3, + float result[], + SInt32 strideResult, + UInt32 size); + + +/* + * vamD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +vamD( + const double input1[], + SInt32 stride1, + const double input2[], + SInt32 stride2, + const double input3[], + SInt32 stride3, + double result[], + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zconv + zconvD + + Split Complex Convolution and Correlation in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. signal->realp, signal->imagp, result->realp, result->imagp + must be relatively aligned. + 2. 4 <= lenFilter <= 128 + 3. lenResult > 20 + 4. signalStride = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. strideFilter can be positive for correlation + or negative for convolution +------------------------------------------------------------------------------- +*/ +/* + * zconv() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zconv( + DSPSplitComplex * signal, + SInt32 signalStride, + DSPSplitComplex * filter, + SInt32 strideFilter, + DSPSplitComplex * result, + SInt32 strideResult, + SInt32 lenResult, + SInt32 lenFilter); + + +/* + * zconvD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zconvD( + DSPDoubleSplitComplex * signal, + SInt32 signalStride, + DSPDoubleSplitComplex * filter, + SInt32 strideFilter, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + SInt32 lenResult, + SInt32 lenFilter); + + +/* +------------------------------------------------------------------------------- + Function zvadd + zvaddD + + Split Complex vadd in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2.realp, input2.imagp, + result.realp, result.imagp must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zvadd() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zvadd( + DSPSplitComplex * input1, + SInt32 stride1, + DSPSplitComplex * input2, + SInt32 stride2, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* + * zvaddD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zvaddD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + DSPDoubleSplitComplex * input2, + SInt32 stride2, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zvsub + zvsubD + + Split Complex Substract in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2.realp, input2.imagp, + result.realp, result.imagp must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zvsub() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zvsub( + DSPSplitComplex * input1, + SInt32 stride1, + DSPSplitComplex * input2, + SInt32 stride2, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* + * zvsubD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zvsubD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + DSPDoubleSplitComplex * input2, + SInt32 stride2, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zvmul + zvmulD + + Split Complex Multiply in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2.realp, input2.imagp, + result.realp, result.imagp must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. The conjugate value can be 1 or -1. +------------------------------------------------------------------------------- +*/ +/* + * zvmul() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zvmul( + DSPSplitComplex * input1, + SInt32 stride1, + DSPSplitComplex * input2, + SInt32 stride2, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size, + SInt32 conjugate); + + +/* + * zvmulD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zvmulD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + DSPDoubleSplitComplex * input2, + SInt32 stride2, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size, + SInt32 conjugate); + + +/* +------------------------------------------------------------------------------- + Function zdotpr + zdotprD + + Split Complex Dot product in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2.realp, input2.imagp are all + relatively aligned. + 2. size >= 20 + 3. stride1 = 1 + 4. stride2 = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zdotpr() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zdotpr( + DSPSplitComplex * input1, + SInt32 stride1, + DSPSplitComplex * input2, + SInt32 stride2, + DSPSplitComplex * result, + UInt32 size); + + +/* + * zdotprD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zdotprD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + DSPDoubleSplitComplex * input2, + SInt32 stride2, + DSPDoubleSplitComplex * result, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zidotpr + zidotprD + + Split Complex Inner Dot product in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2.realp, input2.imagp must be + all relatively aligned. + 2. size >= 20 + 3. stride1 = 1 + 4. stride2 = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zidotpr() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zidotpr( + DSPSplitComplex * input1, + SInt32 stride1, + DSPSplitComplex * input2, + SInt32 stride2, + DSPSplitComplex * result, + UInt32 size); + + +/* + * zidotprD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zidotprD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + DSPDoubleSplitComplex * input2, + SInt32 stride2, + DSPDoubleSplitComplex * result, + UInt32 size); + + + +/* +------------------------------------------------------------------------------- + Function zrdotpr + zrdotprD + + Split Complex - Real Dot product in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2 are must be relatively aligned. + 2. size >= 16 + 3. stride1 = 1 + 4. stride2 = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zrdotpr() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zrdotpr( + DSPSplitComplex * input1, + SInt32 stride1, + const float input2[], + SInt32 stride2, + DSPSplitComplex * result, + UInt32 size); + + +/* + * zrdotprD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zrdotprD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + const double input2[], + SInt32 stride2, + DSPDoubleSplitComplex * result, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zvcma + zvcmaD + + Split Complex Conjugate Multiply And vadd in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2.realp, input2.imagp, + input_3.realp, input_3.imagp, result.realp, result.imagp + must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. stride_3 = 1 + 6. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zvcma() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zvcma( + DSPSplitComplex * input1, + SInt32 stride1, + DSPSplitComplex * input2, + SInt32 stride2, + DSPSplitComplex * input3, + SInt32 stride3, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* + * zvcmaD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zvcmaD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + DSPDoubleSplitComplex * input2, + SInt32 stride2, + DSPDoubleSplitComplex * input3, + SInt32 stride3, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zrvadd + zrvaddD + + Split Complex - Real Add in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2, result.realp, result.imagp + are all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zrvadd() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zrvadd( + DSPSplitComplex * input1, + SInt32 stride1, + const float input2[], + SInt32 stride2, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* + * zrvaddD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zrvaddD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + const double input2[], + SInt32 stride2, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zrvsub + zrvsubD + + Split Complex - Real Substract in Single and Double Precision + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2, result.realp, result.imagp + must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zrvsub() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zrvsub( + DSPSplitComplex * input1, + SInt32 stride1, + const float input2[], + SInt32 stride2, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* + * zrvsubD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zrvsubD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + const double input2[], + SInt32 stride2, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* +------------------------------------------------------------------------------- + Function zrvmul + zrvmulD + + Split Complex - Real Multiply + + Criteria to invoke PowerPC vector code: + 1. input1.realp, input1.imagp, input2, result.realp, result.imagp + must be all relatively aligned. + 2. size >= 8 + 3. stride1 = 1 + 4. stride2 = 1 + 5. strideResult = 1 + + If any of the above criteria are not satisfied, the PowerPC scalar code + implementation will be used. +------------------------------------------------------------------------------- +*/ +/* + * zrvmul() + * + * Availability: + * Non-Carbon CFM: in vecLib 1.0 and later + * CarbonLib: not in Carbon, but vecLib is compatible with CarbonLib + * Mac OS X: in version 10.0 and later + */ +EXTERN_API_C( void ) +zrvmul( + DSPSplitComplex * input1, + SInt32 stride1, + const float input2[], + SInt32 stride2, + DSPSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + +/* + * zrvmulD() + * + * Availability: + * Non-Carbon CFM: not available + * CarbonLib: not available + * Mac OS X: in version 10.2 and later + */ +EXTERN_API_C( void ) +zrvmulD( + DSPDoubleSplitComplex * input1, + SInt32 stride1, + const double input2[], + SInt32 stride2, + DSPDoubleSplitComplex * result, + SInt32 strideResult, + UInt32 size); + + + +#ifndef USE_NON_APPLE_STANDARD_DATATYPES +#define USE_NON_APPLE_STANDARD_DATATYPES 1 +#endif /* !defined(USE_NON_APPLE_STANDARD_DATATYPES) */ + +#if USE_NON_APPLE_STANDARD_DATATYPES +enum { + FFT_FORWARD = kFFTDirection_Forward, + FFT_INVERSE = kFFTDirection_Inverse +}; + +enum { + FFT_RADIX2 = kFFTRadix2, + FFT_RADIX3 = kFFTRadix3, + FFT_RADIX5 = kFFTRadix5 +}; + + +typedef DSPComplex COMPLEX; +typedef DSPSplitComplex COMPLEX_SPLIT; +typedef DSPDoubleComplex DOUBLE_COMPLEX; +typedef DSPDoubleSplitComplex DOUBLE_COMPLEX_SPLIT; +#endif /* USE_NON_APPLE_STANDARD_DATATYPES */ + + +#if PRAGMA_STRUCT_ALIGN + #pragma options align=reset +#elif PRAGMA_STRUCT_PACKPUSH + #pragma pack(pop) +#elif PRAGMA_STRUCT_PACK + #pragma pack() +#endif + +#ifdef PRAGMA_IMPORT_OFF +#pragma import off +#elif PRAGMA_IMPORT +#pragma import reset +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __VDSP__ */ + |