On Sun, Apr 25, 2010 at 12:06:49PM +0200, Alexander Best wrote: > i was able to pinpoint the > exact function which is causing the problem: > > it's snd_xbytes(). This is an odd-looking function. Its purpose is to compute the size of a target buffer for a block of audio samples that might be sample-rate-converted or format changed. It has a loop to compute the gcd of the second two arguments (from, to), so that it can divide by that common factor so that it can then do v * (to/x) / (from/x). It's not immediately obvious to me why it bothers to find the gcd, since the division by the original from should work anyway, as it's using a 64-bit numerator... The only difference that I can see when this is compiled with cc vs clang on my amd64 system is that the latter uses a divq in the loop and the former uses a divl. I haven't figured out why, yet. Hmm. If the same division logic is being used in the i386 version of clang, then it's possible that this is resulting in a call to an extended precision divide subroutine, which could slow things down a bit. Cheers, -- AndrewReceived on Tue Apr 27 2010 - 02:50:56 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:03 UTC