/* 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 #endif #ifndef __MACTYPES__ #include #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__ */