Message ID | Pine.LNX.4.64.0904060201380.438@cinke.fazekas.hu (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Mon, 6 Apr 2009 02:36:01 +0200 (CEST) Marton Balint <cus@fazekas.hu> wrote: > On Sun, 5 Apr 2009, Mauro Carvalho Chehab wrote: > > > Hi Marton, > > > > I suspect that you will need to use div64 math or some othe way to calculate the freq: > > > > /home/v4l/master/v4l/cx88-dsp.c: In function 'detect_a2_a2m_eiaj': > > /home/v4l/master/v4l/cx88-dsp.c:147: error: SSE register return with SSE disabled > > make[3]: *** [/home/v4l/master/v4l/cx88-dsp.o] Error 1 > > make[3]: *** Waiting for unfinished jobs.... > > Gcc should have optimised away the floating point operations and the > __builtin_remainder function. Hmm, it seems that older gcc's don't do > this. Would you try the attached patch? It uses integer modulo instead > of __builtin_remainder, so only basic floating point operations needs > optimising, hopefully every common gcc version will be able to do it. Worked. I've folded this patch with the previous one, to avoid bisect breakage upstream. Cheers, Mauro -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff -r 119acaa1dee3 -r 5a396f71d463 linux/drivers/media/video/cx88/cx88-dsp.c --- a/linux/drivers/media/video/cx88/cx88-dsp.c Tue Mar 31 23:35:57 2009 +0200 +++ b/linux/drivers/media/video/cx88/cx88-dsp.c Mon Apr 06 02:21:20 2009 +0200 @@ -28,8 +28,11 @@ #define INT_PI ((s32)(3.141592653589 * 32768.0)) +#define compat_remainder(a, b) \ + ((float)(((s32)((a)*100))%((s32)((b)*100)))/100.0) + #define baseband_freq(carrier, srate, tone) ((s32)( \ - (__builtin_remainder(carrier + tone, srate)) / srate * 2 * INT_PI)) + (compat_remainder(carrier + tone, srate)) / srate * 2 * INT_PI)) /* We calculate the baseband frequencies of the carrier and the pilot tones * based on the the sampling rate of the audio rds fifo. */