// /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1 -quiet -I. -I. -I.. -I../common/include -I../include -I../src/arch/i386 -I/usr/include/alsa -I/usr/kde/3.5/include/artsc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/SDL -I/usr/include/smpeg -I/usr/include/SDL -MD .libs/libopenal_la-x86_floatmul.d -MF .deps/libopenal_la-x86_floatmul.Tpo -MP -MT libopenal_la-x86_floatmul.lo -MQ .libs/libopenal_la-x86_floatmul.o -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=6 -D_REENTRANT -DHAVE_CONFIG_H -D_REENTRANT -D_REENTRANT -DPIC arch/i386/x86_floatmul.c -quiet -dumpbase x86_floatmul.c -march=athlon-xp -ansi -auxbase-strip .libs/libopenal_la-x86_floatmul.o -O3 -Wall -pedantic -ansi -finline-functions -ffast-math -fomit-frame-pointer -fPIC -o - -frandom-seed=0 # 1 "arch/i386/x86_floatmul.c" # 1 "" # 1 "" # 1 "arch/i386/x86_floatmul.c" # 21 "arch/i386/x86_floatmul.c" # 1 "al_siteconfig.h" 1 # 11 "al_siteconfig.h" # 1 "../config.h" 1 # 12 "al_siteconfig.h" 2 # 22 "arch/i386/x86_floatmul.c" 2 # 1 "../common/include/AL/al.h" 1 # 70 "../common/include/AL/al.h" typedef char ALboolean; typedef char ALchar; typedef char ALbyte; typedef unsigned char ALubyte; typedef short ALshort; typedef unsigned short ALushort; typedef int ALint; typedef unsigned int ALuint; typedef int ALsizei; typedef int ALenum; typedef float ALfloat; typedef double ALdouble; typedef void ALvoid; # 386 "../common/include/AL/al.h" extern void alEnable( ALenum capability ); extern void alDisable( ALenum capability ); extern ALboolean alIsEnabled( ALenum capability ); extern const ALchar* alGetString( ALenum param ); extern void alGetBooleanv( ALenum param, ALboolean* data ); extern void alGetIntegerv( ALenum param, ALint* data ); extern void alGetFloatv( ALenum param, ALfloat* data ); extern void alGetDoublev( ALenum param, ALdouble* data ); extern ALboolean alGetBoolean( ALenum param ); extern ALint alGetInteger( ALenum param ); extern ALfloat alGetFloat( ALenum param ); extern ALdouble alGetDouble( ALenum param ); extern ALenum alGetError( void ); extern ALboolean alIsExtensionPresent( const ALchar* extname ); extern void* alGetProcAddress( const ALchar* fname ); extern ALenum alGetEnumValue( const ALchar* ename ); # 450 "../common/include/AL/al.h" extern void alListenerf( ALenum param, ALfloat value ); extern void alListener3f( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); extern void alListenerfv( ALenum param, const ALfloat* values ); extern void alListeneri( ALenum param, ALint value ); extern void alListener3i( ALenum param, ALint value1, ALint value2, ALint value3 ); extern void alListeneriv( ALenum param, const ALint* values ); extern void alGetListenerf( ALenum param, ALfloat* value ); extern void alGetListener3f( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 ); extern void alGetListenerfv( ALenum param, ALfloat* values ); extern void alGetListeneri( ALenum param, ALint* value ); extern void alGetListener3i( ALenum param, ALint *value1, ALint *value2, ALint *value3 ); extern void alGetListeneriv( ALenum param, ALint* values ); # 512 "../common/include/AL/al.h" extern void alGenSources( ALsizei n, ALuint* sources ); extern void alDeleteSources( ALsizei n, const ALuint* sources ); extern ALboolean alIsSource( ALuint sid ); extern void alSourcef( ALuint sid, ALenum param, ALfloat value ); extern void alSource3f( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); extern void alSourcefv( ALuint sid, ALenum param, const ALfloat* values ); extern void alSourcei( ALuint sid, ALenum param, ALint value ); extern void alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); extern void alSourceiv( ALuint sid, ALenum param, const ALint* values ); extern void alGetSourcef( ALuint sid, ALenum param, ALfloat* value ); extern void alGetSource3f( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); extern void alGetSourcefv( ALuint sid, ALenum param, ALfloat* values ); extern void alGetSourcei( ALuint sid, ALenum param, ALint* value ); extern void alGetSource3i( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3); extern void alGetSourceiv( ALuint sid, ALenum param, ALint* values ); extern void alSourcePlayv( ALsizei ns, const ALuint *sids ); extern void alSourceStopv( ALsizei ns, const ALuint *sids ); extern void alSourceRewindv( ALsizei ns, const ALuint *sids ); extern void alSourcePausev( ALsizei ns, const ALuint *sids ); extern void alSourcePlay( ALuint sid ); extern void alSourceStop( ALuint sid ); extern void alSourceRewind( ALuint sid ); extern void alSourcePause( ALuint sid ); extern void alSourceQueueBuffers( ALuint sid, ALsizei numEntries, const ALuint *bids ); extern void alSourceUnqueueBuffers( ALuint sid, ALsizei numEntries, ALuint *bids ); # 606 "../common/include/AL/al.h" extern void alGenBuffers( ALsizei n, ALuint* buffers ); extern void alDeleteBuffers( ALsizei n, const ALuint* buffers ); extern ALboolean alIsBuffer( ALuint bid ); extern void alBufferData( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq ); extern void alBufferf( ALuint bid, ALenum param, ALfloat value ); extern void alBuffer3f( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); extern void alBufferfv( ALuint bid, ALenum param, const ALfloat* values ); extern void alBufferi( ALuint bid, ALenum param, ALint value ); extern void alBuffer3i( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ); extern void alBufferiv( ALuint bid, ALenum param, const ALint* values ); extern void alGetBufferf( ALuint bid, ALenum param, ALfloat* value ); extern void alGetBuffer3f( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); extern void alGetBufferfv( ALuint bid, ALenum param, ALfloat* values ); extern void alGetBufferi( ALuint bid, ALenum param, ALint* value ); extern void alGetBuffer3i( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3); extern void alGetBufferiv( ALuint bid, ALenum param, ALint* values ); extern void alDopplerFactor( ALfloat value ); extern void alDopplerVelocity( ALfloat value ); extern void alSpeedOfSound( ALfloat value ); extern void alDistanceModel( ALenum distanceModel ); typedef void ( *LPALENABLE)( ALenum capability ); typedef void ( *LPALDISABLE)( ALenum capability ); typedef ALboolean ( *LPALISENABLED)( ALenum capability ); typedef const ALchar* ( *LPALGETSTRING)( ALenum param ); typedef void ( *LPALGETBOOLEANV)( ALenum param, ALboolean* data ); typedef void ( *LPALGETINTEGERV)( ALenum param, ALint* data ); typedef void ( *LPALGETFLOATV)( ALenum param, ALfloat* data ); typedef void ( *LPALGETDOUBLEV)( ALenum param, ALdouble* data ); typedef ALboolean ( *LPALGETBOOLEAN)( ALenum param ); typedef ALint ( *LPALGETINTEGER)( ALenum param ); typedef ALfloat ( *LPALGETFLOAT)( ALenum param ); typedef ALdouble ( *LPALGETDOUBLE)( ALenum param ); typedef ALenum ( *LPALGETERROR)( void ); typedef ALboolean ( *LPALISEXTENSIONPRESENT)(const ALchar* extname ); typedef void* ( *LPALGETPROCADDRESS)( const ALchar* fname ); typedef ALenum ( *LPALGETENUMVALUE)( const ALchar* ename ); typedef void ( *LPALLISTENERF)( ALenum param, ALfloat value ); typedef void ( *LPALLISTENER3F)( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); typedef void ( *LPALLISTENERFV)( ALenum param, const ALfloat* values ); typedef void ( *LPALLISTENERI)( ALenum param, ALint value ); typedef void ( *LPALLISTENER3I)( ALenum param, ALint value1, ALint value2, ALint value3 ); typedef void ( *LPALLISTENERIV)( ALenum param, const ALint* values ); typedef void ( *LPALGETLISTENERF)( ALenum param, ALfloat* value ); typedef void ( *LPALGETLISTENER3F)( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 ); typedef void ( *LPALGETLISTENERFV)( ALenum param, ALfloat* values ); typedef void ( *LPALGETLISTENERI)( ALenum param, ALint* value ); typedef void ( *LPALGETLISTENER3I)( ALenum param, ALint *value1, ALint *value2, ALint *value3 ); typedef void ( *LPALGETLISTENERIV)( ALenum param, ALint* values ); typedef void ( *LPALGENSOURCES)( ALsizei n, ALuint* sources ); typedef void ( *LPALDELETESOURCES)( ALsizei n, const ALuint* sources ); typedef ALboolean ( *LPALISSOURCE)( ALuint sid ); typedef void ( *LPALSOURCEF)( ALuint sid, ALenum param, ALfloat value); typedef void ( *LPALSOURCE3F)( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); typedef void ( *LPALSOURCEFV)( ALuint sid, ALenum param, const ALfloat* values ); typedef void ( *LPALSOURCEI)( ALuint sid, ALenum param, ALint value); typedef void ( *LPALSOURCE3I)( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 ); typedef void ( *LPALSOURCEIV)( ALuint sid, ALenum param, const ALint* values ); typedef void ( *LPALGETSOURCEF)( ALuint sid, ALenum param, ALfloat* value ); typedef void ( *LPALGETSOURCE3F)( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); typedef void ( *LPALGETSOURCEFV)( ALuint sid, ALenum param, ALfloat* values ); typedef void ( *LPALGETSOURCEI)( ALuint sid, ALenum param, ALint* value ); typedef void ( *LPALGETSOURCE3I)( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3); typedef void ( *LPALGETSOURCEIV)( ALuint sid, ALenum param, ALint* values ); typedef void ( *LPALSOURCEPLAYV)( ALsizei ns, const ALuint *sids ); typedef void ( *LPALSOURCESTOPV)( ALsizei ns, const ALuint *sids ); typedef void ( *LPALSOURCEREWINDV)( ALsizei ns, const ALuint *sids ); typedef void ( *LPALSOURCEPAUSEV)( ALsizei ns, const ALuint *sids ); typedef void ( *LPALSOURCEPLAY)( ALuint sid ); typedef void ( *LPALSOURCESTOP)( ALuint sid ); typedef void ( *LPALSOURCEREWIND)( ALuint sid ); typedef void ( *LPALSOURCEPAUSE)( ALuint sid ); typedef void ( *LPALSOURCEQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, const ALuint *bids ); typedef void ( *LPALSOURCEUNQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, ALuint *bids ); typedef void ( *LPALGENBUFFERS)( ALsizei n, ALuint* buffers ); typedef void ( *LPALDELETEBUFFERS)( ALsizei n, const ALuint* buffers ); typedef ALboolean ( *LPALISBUFFER)( ALuint bid ); typedef void ( *LPALBUFFERDATA)( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq ); typedef void ( *LPALBUFFERF)( ALuint bid, ALenum param, ALfloat value); typedef void ( *LPALBUFFER3F)( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 ); typedef void ( *LPALBUFFERFV)( ALuint bid, ALenum param, const ALfloat* values ); typedef void ( *LPALBUFFERI)( ALuint bid, ALenum param, ALint value); typedef void ( *LPALBUFFER3I)( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 ); typedef void ( *LPALBUFFERIV)( ALuint bid, ALenum param, const ALint* values ); typedef void ( *LPALGETBUFFERF)( ALuint bid, ALenum param, ALfloat* value ); typedef void ( *LPALGETBUFFER3F)( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3); typedef void ( *LPALGETBUFFERFV)( ALuint bid, ALenum param, ALfloat* values ); typedef void ( *LPALGETBUFFERI)( ALuint bid, ALenum param, ALint* value ); typedef void ( *LPALGETBUFFER3I)( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3); typedef void ( *LPALGETBUFFERIV)( ALuint bid, ALenum param, ALint* values ); typedef void ( *LPALDOPPLERFACTOR)( ALfloat value ); typedef void ( *LPALDOPPLERVELOCITY)( ALfloat value ); typedef void ( *LPALSPEEDOFSOUND)( ALfloat value ); typedef void ( *LPALDISTANCEMODEL)( ALenum distanceModel ); # 24 "arch/i386/x86_floatmul.c" 2 # 1 "al_cpu_caps.h" 1 void _alDetectCPUCaps(void); # 1 "arch/i386/x86_cpu_caps_prk.h" 1 # 23 "arch/i386/x86_cpu_caps_prk.h" struct x86cpu_caps_s { int mmx; int sse; int sse2; int sse3; int amd_3dnow; int amd_3dnowext; int amd_sse_mmx; int cyrix_mmxext; }; extern struct x86cpu_caps_s x86cpu_caps; extern struct x86cpu_caps_s x86cpu_caps_use; static __inline int _alHaveMMX(void); static __inline int _alHaveSSE(void); static __inline int _alHaveSSE2(void); static __inline int _alHaveSSE3(void); static __inline int _alHave3DNOW(void); static __inline int _alHave3DNOWEXT(void); static __inline int _alHaveSSEMMX(void); static __inline int _alHaveMMX(void) { return x86cpu_caps.mmx & x86cpu_caps_use.mmx; } static __inline int _alHaveSSE(void) { return x86cpu_caps.sse & x86cpu_caps_use.sse; } static __inline int _alHaveSSE2(void) { return x86cpu_caps.sse2 & x86cpu_caps_use.sse2; } static __inline int _alHaveSSE3(void) { return x86cpu_caps.sse3 & x86cpu_caps_use.sse3; } static __inline int _alHave3DNOW(void) { return x86cpu_caps.amd_3dnow & x86cpu_caps_use.amd_3dnow; } static __inline int _alHave3DNOWEXT(void) { return x86cpu_caps.amd_3dnowext & x86cpu_caps_use.amd_3dnowext; } static __inline int _alHaveSSEMMX(void) { return x86cpu_caps.amd_sse_mmx & x86cpu_caps_use.amd_sse_mmx; } # 8 "al_cpu_caps.h" 2 # 25 "arch/i386/x86_floatmul.c" 2 # 1 "arch/i386/x86_simd_support_prk.h" 1 # 30 "arch/i386/x86_simd_support_prk.h" typedef short v4hi __attribute__ ((__mode__(__V4HI__))); typedef int v2si __attribute__ ((__mode__(__V2SI__))); typedef int di __attribute__ ((__mode__(__DI__))); typedef unsigned long aint; # 26 "arch/i386/x86_floatmul.c" 2 void _alFloatMul(ALshort *bpt, ALfloat sa, ALuint len); void _alFloatMul(ALshort *bpt, ALfloat sa, ALuint len) { ALint scaled_sa = sa * (1 << 16); ALint iter; if (_alHaveMMX()) { union { short s[4]; v4hi v; } v_sa __attribute__((aligned(16))); ALuint samples_main; ALuint samples_pre; ALuint samples_post; v4hi temp; samples_pre = 8 - (aint)bpt % 8; samples_pre /= sizeof(ALshort); samples_main = len - samples_pre; samples_post = samples_main % 8; samples_main = samples_main / 8; len = samples_post; while(samples_pre--) { iter = *bpt; iter *= scaled_sa; iter >>= 16; *bpt = iter; ++bpt; } if (scaled_sa < (1 << 15)) { v_sa.s[0] = scaled_sa; v_sa.s[1] = v_sa.s[0]; v_sa.s[2] = scaled_sa; v_sa.s[3] = v_sa.s[0]; while (samples_main--) { *(v4hi*)bpt = __builtin_ia32_pmulhw(*(v4hi*)bpt, v_sa.v); bpt += 4; *(v4hi*)bpt = __builtin_ia32_pmulhw(*(v4hi*)bpt, v_sa.v); bpt += 4; } } else { v_sa.s[0] = scaled_sa >> 1; v_sa.s[1] = v_sa.s[0]; v_sa.s[2] = v_sa.s[0]; v_sa.s[3] = v_sa.s[0]; while (samples_main--) { temp = __builtin_ia32_pmulhw(*(v4hi*)bpt, v_sa.v); *(v4hi*)bpt = __builtin_ia32_psllw(temp, 1LL); bpt += 4; temp = __builtin_ia32_pmulhw(*(v4hi*)bpt, v_sa.v); *(v4hi*)bpt = __builtin_ia32_psllw(temp, 1LL); bpt += 4; } } __builtin_ia32_emms(); } while(len--) { iter = *bpt; iter *= scaled_sa; iter >>= 16; *bpt = iter; ++bpt; } }