Use proper constraints for variables referenced in inline asm instead of using direct symbol references in the assembler code. Also add constraints where missing. The compiler can't see the direct references from inline asm. Although it won't discard the variables since they have the "used" attribute, with LTO they may end up in a different partition and no longer visible to the functions where they are used. --- MPlayer-1.3.0/configure +++ MPlayer-1.3.0/configure @@ -9262,7 +9262,7 @@ #define HAVE_GETHRTIME 0 #define HAVE_INLINE_ASM 1 #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 -#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1 +#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 #define HAVE_INTRINSICS_NEON 0 #define HAVE_ISATTY 0 #define HAVE_LDBRX 0 --- MPlayer-1.3.0/libmpcodecs/vf_ass.c +++ MPlayer-1.3.0/libmpcodecs/vf_ass.c @@ -311,6 +311,7 @@ static void render_frame_yuv422_sse4(vf_ [j] "r" (xmin), [xmax] "g" (xmax), [f] "g" (is_uyvy) + NAMED_CONSTRAINTS_ARRAY_ADD(sse_int32_map_factor,sse_int32_80h) : REG_S ); } @@ -513,6 +514,7 @@ static void render_frame_yuv420p_sse4(vf [alpha] "r" (alpha + i * outw), [src] "S" (src_y + i * outw), [dst] "D" (dst_y + i * stride) + NAMED_CONSTRAINTS_ARRAY_ADD(sse_int32_map_factor,sse_int32_80h) ); } @@ -551,6 +553,7 @@ static void render_frame_yuv420p_sse4(vf [src_v] "g" (src_v + i * outw), [dst_u] "g" (dst_u + i * stride), [dst_v] "g" (dst_v + i * stride) + NAMED_CONSTRAINTS_ARRAY_ADD(sse_int32_map_factor,sse_int32_80h) : REG_S, REG_D ); }