Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2011-08-28 23:14:13 +0400
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2011-09-22 01:50:09 +0400
commita582b028a416a29e60b4748b2ae4221ada11c2b8 (patch)
tree1d555db56fc34278db6edcb584e0c29180016df6 /libswscale
parent5d833dd29985b53789304b350ac229abd4de0ff6 (diff)
Hack around gcc 4.6 breaking asm using call.
gcc 4.6 no longer decrements esp to account for local variables. Thus using call will end up overwriting some local variable. So add an extra one it can safely clobber. This is a huge hack because it's basically pure chance it works, no idea how this is supposed to be done. Fixes trac ticket #397. Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de> (cherry picked from commit c928e9172928f3cddab949b107dd53b6bf79555e)
Diffstat (limited to 'libswscale')
-rw-r--r--libswscale/x86/swscale_template.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/libswscale/x86/swscale_template.c b/libswscale/x86/swscale_template.c
index 25399fadef..e715270714 100644
--- a/libswscale/x86/swscale_template.c
+++ b/libswscale/x86/swscale_template.c
@@ -2240,6 +2240,10 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
#if defined(PIC)
DECLARE_ALIGNED(8, uint64_t, ebxsave);
#endif
+ // HACK: gcc 4.6 no longer decrements esp,
+ // use this to make it reserve space for the call
+ // return address
+ void *dummy;
__asm__ volatile(
#if defined(PIC)
@@ -2291,6 +2295,7 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
#if defined(PIC)
,"m" (ebxsave)
#endif
+ ,"m" (dummy)
: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
#if !defined(PIC)
,"%"REG_b
@@ -2312,6 +2317,10 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
#if defined(PIC)
DECLARE_ALIGNED(8, uint64_t, ebxsave);
#endif
+ // HACK: gcc 4.6 no longer decrements esp,
+ // use this to make it reserve space for the call
+ // return address
+ void *dummy;
__asm__ volatile(
#if defined(PIC)
@@ -2351,6 +2360,7 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
#if defined(PIC)
,"m" (ebxsave)
#endif
+ ,"m" (dummy)
: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
#if !defined(PIC)
,"%"REG_b