Code reviewer needed.
Thansk
Margot
Modified by: [EMAIL PROTECTED]
Reviewed by: NEEDED
Date: 10:06:05
Project: Support for Solaris X86 in math64.h
Synopsis:
Add Solaris X86 support in math64.h to fix
MulShiftN unreference symbol error.
Overview:
Built using:
[0] Set BIF branch (hxclient_1_5_0_cayenne_restricted)
[1] Set Target(s) (splay)
[2] Set Profile (/build1/building/build/umakepf/helix-client-all-defines)
When running splay with an rm file from ContentSuite_1.0/rm-
NatureRF_rvG2SVT-cbr_30fps_352x288_100k_cook23.rm - get
error of
clntcore.so: symbol MulShiftN referenced: not found
This comes from audio/limiter/rel:
brion% nm audlimiter.a | grep MulS
[14] | 0| 0|FUNC |GLOB |0 |UNDEF |MulShiftN
brion%
Specifically, limiter.c.
Now limiter.c uses MulShiftN in two functions, limiterMono and
limiterStereo in this hxclient_1_5_0_cayenne_restriced branch.
I noticed in the realplayer_gtk_stable branch, limiter.c doesn't
use these two functions, therefore doesn't run into this MulShiftN
problem- ifdef'ed with HAVE_PLATFORM_MACROS.
audio/fixptuil/pub/math64.h did not have a MulShiftN for
Solaris X86. At the end of math64.h, there are a bunch of
Mul* C functions for HPUX, that look appropriate for
Solaris X86.
As a result, the fix for this problem is to:
- Use the HPUX block of code for Solaris X86 by adding
the correct defines for Solaris X86:
#elif defined(_HPUX) || (defined (_SOLARIS) && !defined (__GNUC__) &&
defined(_SOLARISX86))
- Delete the block of code that has similar functions
that the HPUX block of code already has.
The block of code being deleted was:
#if (defined(__SVR4) && defined(__i386) && (defined(_NO_GNU_AS) ||
!defined(__GNUC__)) )
/* No 64bit, no asm provided in some other file..
* need normal funcs for sun forte CC + 386
* However... forte's inline assembly for MulShift32 is just as good
* as the "hand tuned" gcc version, if you use
* cc -fast
*/
....
- Structure the code to be #if ... #elif ....#elif from
#if ... #if ... #if...
Files Added:
[File 1] - NONE
Files Modified:
[File 3] - math64.h
Image Size and Heap Use impact (Client -Only):
<Description of image size and heaps size impact. >
Platforms and Profiles Affected:
Tested on X86 with helix-client-all-defines profile
Distribution Libraries Affected:
<List of distribution libraries affected>
Distribution library impact and planned action:
<Is an update required and if so when will it occur>
Platforms and Profiles Build Verified:
Platform - x86.
brion% uname -a
SunOS brion 5.10 Generic i86pc i386 i86pc
brion%
Profile:helix-client-all-defines
Platforms and Profiles Functionality verified:
Same as above
Branch: <code branch(es) change is for>
HEAD and hxclient_1_5_0_cayenne
Copyright assignment: <MUST be one of the following statements >
3. My company SUN is bound by the terms
of a commercial contribution agreement with RealNetworks,
and I am authorized to contribute this code under said agreement.
QA Instructions:
Full test suites run on an X86 and Sparc machines running Solaris 10.
Index: math64.h
===================================================================
RCS file: /cvsroot/audio/fixptutil/pub/math64.h,v
retrieving revision 1.26.2.1
diff -u -r1.26.2.1 math64.h
--- math64.h 2 May 2005 20:17:22 -0000 1.26.2.1
+++ math64.h 7 Oct 2005 03:38:57 -0000
@@ -118,13 +118,12 @@
#endif // TIMING
#pragma warning(default:4035)
-#endif // (defined(_M_IX86) && defined(_MSC_VER)) || (defined(__WINS__) &&
defined(_SYMBIAN))
///////////////////////////////////////////////////////////////////////////////////////
// GCC / i386
///////////////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUC__) && (defined(__i386__) || defined(__amd64__)) &&
!defined(_NO_GNU_AS)
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__amd64__)) &&
!defined(_NO_GNU_AS)
#define HAVE_PLATFORM_MACROS
@@ -199,13 +198,12 @@
#ifdef DEBUG
#define ASSERT(x) if (!(x)) __asm__ __volatile ("int $3" :: )
#endif
-#endif // defined(__GNUC__) && defined(__i386__)
///////////////////////////////////////////////////////////////////////////////////////
// Sun native compiler / Sparc
///////////////////////////////////////////////////////////////////////////////////////
-#if defined(__sparc)
+#elif defined(__sparc)
// the macros definitions come from an il file here.
#define HAVE_PLATFORM_MACROS
@@ -248,51 +246,13 @@
#include <assert.h>
#define ASSERT(x) assert(x)
#endif
-#endif // defined(__sparc)
-#if (defined(__SVR4) && defined(__i386) && (defined(_NO_GNU_AS) ||
!defined(__GNUC__)) )
-/* No 64bit, no asm provided in some other file..
- * need normal funcs for sun forte CC + 386
- * However... forte's inline assembly for MulShift32 is just as good
- * as the "hand tuned" gcc version, if you use
- * cc -fast
- */
-static inline int MulDiv64(int a, int b, int c)
-{
- long long t = (long long)((long long)a * (long long)b) ;
- return (int)(t / c) ;
-}
-/* Compute (a * b) >> 32, using 64-bit intermediate result */
-static inline int MulShift32(int a, int b)
-{
- long long res ;
- res = (long long)((long long)a * (long long)b);
- return (res>>32);
-}
-
-/* Compute (a * b) >> 31, using 64-bit intermediate result */
-static inline int MulShift31(int a, int b)
-{
- long long res ;
- res = (long long)((long long)a * (long long)b);
- return (res>>31);
-}
-
-/* Compute (a * b) >> 30, using 64-bit intermediate result */
-static inline int MulShift30(int a, int b)
-{
- long long res ;
- res = (long long)((long long)a * (long long)b);
- return (res>>30);
-}
-
-#endif
///////////////////////////////////////////////////////////////////////////////////////
// Codewarrior / PowerPC
///////////////////////////////////////////////////////////////////////////////////////
-#if defined(__MWERKS__) && defined(__POWERPC__)
+#elif defined(__MWERKS__) && defined(__POWERPC__)
/*if your compiler can compile 64-bit instructions, define this. CW 8 cannot */
/* #define USE_64BIT_INSNS */
@@ -407,14 +367,13 @@
#endif // TIMING
-#endif // defined(__MWERKS__) && defined(__POWERPC__)
///////////////////////////////////////////////////////////////////////////////////////
// GCC / PowerPC
///////////////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUC__) && (defined(__POWERPC__) || defined(__powerpc__))
+#elif defined(__GNUC__) && (defined(__POWERPC__) || defined(__powerpc__))
/*if your compiler can compile 64-bit instructions, and your CPU has them,
define this. */
@@ -509,13 +468,12 @@
#endif // TIMING
-#endif // defined(__GNUC__) && defined(__POWERPC__)
///////////////////////////////////////////////////////////////////////////////////////
// EVC3.0 / ARM
///////////////////////////////////////////////////////////////////////////////////////
-#if (defined(_ARM) && defined(_MSC_VER))
+#elif (defined(_ARM) && defined(_MSC_VER))
/* EVC does not allow us to use inline assembly. Thus, you'll only see
prototypes here.
*/
@@ -544,13 +502,12 @@
}
#endif // __cplusplus
-#endif // (defined(_ARM) && defined(_MSC_VER))
///////////////////////////////////////////////////////////////////////////////////////
// GNUC / ARM
///////////////////////////////////////////////////////////////////////////////////////
-#if (defined(_ARM) && defined(__GNUC__))
+#elif (defined(_ARM) && defined(__GNUC__))
#define HAVE_PLATFORM_MACROS
@@ -679,13 +636,12 @@
#endif // defined(__MARM_THUMB__)
-#endif // (defined(_ARM) && defined(__GNUC__))
///////////////////////////////////////////////////////////////////////////////////////
// ARM_ADS / ARM
///////////////////////////////////////////////////////////////////////////////////////
-#if defined(ARM_ADS)
+#elif defined(ARM_ADS)
#ifdef __cplusplus
extern "C" {
@@ -768,12 +724,13 @@
return x;
}
-#endif // defined(ARM_ADS)
///////////////////////////////////////////////////////////////////////////////////////
// platform independent implementations
///////////////////////////////////////////////////////////////////////////////////////
+#elif defined(_HPUX) || (defined (_SOLARIS) && !defined (__GNUC__) &&
defined(_SOLARISX86))
+
#ifndef ASSERT
#define ASSERT(x)
#endif
@@ -786,7 +743,6 @@
#define TOCK(nsamples) 1
#endif
-#if defined(_HPUX)
#define HAVE_PLATFORM_MACROS
static __inline int MulDiv64(int a, int b, int c)
{
_______________________________________________
Audio-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/audio-dev