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 c928e91729)
			
			
This commit is contained in:
		
				
					committed by
					
						
						Carl Eugen Hoyos
					
				
			
			
				
	
			
			
			
						parent
						
							5d833dd299
						
					
				
				
					commit
					a582b028a4
				
			@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user