I've create a blueprint covering the basic functions in libav that are implemented as inline assembly: https://blueprints.launchpad.net/gcc-linaro/+spec/investigate-libav-inline-a...
These are a mix of multiplies, clipping, byte swap, and unaligned access. We do OK on half of them but at least byte swap and 32x32 -> top half of 64 aren't as good as they could be.
Let's discuss the investigation at the next performance meeting.
-- Michael
On 20 March 2012 22:59, Michael Hope michael.hope@linaro.org wrote:
I've create a blueprint covering the basic functions in libav that are implemented as inline assembly: https://blueprints.launchpad.net/gcc-linaro/+spec/investigate-libav-inline-a...
These are a mix of multiplies, clipping, byte swap, and unaligned access. We do OK on half of them but at least byte swap and 32x32 -> top half of 64 aren't as good as they could be.
Some of those are OK in recent gcc versions but horrible in older ones. For example, the byte swap inline asm is only enabled for gcc older than 4.5. If you find any others where gcc has improved recently, let us know so we can make them conditional.
On 22 March 2012 00:28, Mans Rullgard mans.rullgard@linaro.org wrote:
On 20 March 2012 22:59, Michael Hope michael.hope@linaro.org wrote:
I've create a blueprint covering the basic functions in libav that are implemented as inline assembly: https://blueprints.launchpad.net/gcc-linaro/+spec/investigate-libav-inline-a...
These are a mix of multiplies, clipping, byte swap, and unaligned access. We do OK on half of them but at least byte swap and 32x32 -> top half of 64 aren't as good as they could be.
Some of those are OK in recent gcc versions but horrible in older ones. For example, the byte swap inline asm is only enabled for gcc older than 4.5. If you find any others where gcc has improved recently, let us know so we can make them conditional.
Yip, I saw AV_GCC_VERSION_AT_LEAST() in a few places. We'll check each of the inline routines and report back.
-- Michael
linaro-toolchain@lists.linaro.org