It looks like compiler-generated code always uses `b`, `bl` or `blx` instructions for function calls. These instructions have a 24-bit immediate and therefore can jump anywhere between PC +- 16 MiB.
This hand-written assembly code instead uses `bge` and `beq` for interprocedural jumps. Since these instructions have only a 19-bit immediate (we have less bits for condition code), they can jump only within PC +- 512 KiB. This sometimes causes a "relocation R_ARM_THM_JUMP19 out of range" error when linked with the mold linker. This error can easily be avoided by using `b` instead of `bge` or `beq`. Signed-off-by: Rui Ueyama <rui...@gmail.com> --- libswresample/arm/audio_convert_neon.S | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libswresample/arm/audio_convert_neon.S b/libswresample/arm/audio_convert_neon.S index 085d50aafa..3fe114772c 100644 --- a/libswresample/arm/audio_convert_neon.S +++ b/libswresample/arm/audio_convert_neon.S @@ -133,12 +133,13 @@ endfunc function swri_oldapi_conv_fltp_to_s16_nch_neon, export=1 cmp r3, #2 - itt lt - ldrlt r1, [r1] - blt .L_swri_oldapi_conv_flt_to_s16_neon - beq .L_swri_oldapi_conv_fltp_to_s16_2ch_neon + bgt 2f + beq 1f + ldr r1, [r1] + b .L_swri_oldapi_conv_flt_to_s16_neon +1: b .L_swri_oldapi_conv_fltp_to_s16_2ch_neon - push {r4-r8, lr} +2: push {r4-r8, lr} cmp r3, #4 lsl r12, r3, #1 blt 4f -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".