diff options
author | Mans Rullgard <mans@mansr.com> | 2012-06-29 13:35:08 +0100 |
---|---|---|
committer | Mans Rullgard <mans@mansr.com> | 2012-07-01 11:25:06 +0100 |
commit | 62634158b7cd39ad1e330a87153a97bf3dc6f8de (patch) | |
tree | 3b5bb36649f0e08a5675c474b29200c5f0b155b7 /libavcodec | |
parent | ceabc13f129cd6344b1eebdbe10119083fe5520e (diff) | |
download | ffmpeg-62634158b7cd39ad1e330a87153a97bf3dc6f8de.tar.gz |
ARM: generate position independent code to access data symbols
This creates proper position independent code when accessing
data symbols if CONFIG_PIC is set.
References to external symbols should now use the movrelx macro.
Some additional code changes are required since this macro may
need a register to hold the GOT pointer.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/arm/ac3dsp_armv6.S | 4 | ||||
-rw-r--r-- | libavcodec/arm/fft_fixed_neon.S | 2 | ||||
-rw-r--r-- | libavcodec/arm/fft_neon.S | 4 | ||||
-rw-r--r-- | libavcodec/arm/sbrdsp_neon.S | 4 | ||||
-rw-r--r-- | libavcodec/arm/vp3dsp_neon.S | 3 | ||||
-rw-r--r-- | libavcodec/arm/vp8_armv6.S | 4 |
6 files changed, 10 insertions, 11 deletions
diff --git a/libavcodec/arm/ac3dsp_armv6.S b/libavcodec/arm/ac3dsp_armv6.S index 7e2f40edf0..f6f297a532 100644 --- a/libavcodec/arm/ac3dsp_armv6.S +++ b/libavcodec/arm/ac3dsp_armv6.S @@ -26,8 +26,8 @@ function ff_ac3_bit_alloc_calc_bap_armv6, export=1 beq 4f push {r4-r11,lr} add r5, sp, #40 - movrel r4, X(ff_ac3_bin_to_band_tab) - movrel lr, X(ff_ac3_band_start_tab) + movrelx r4, X(ff_ac3_bin_to_band_tab), r11 + movrelx lr, X(ff_ac3_band_start_tab) ldm r5, {r5-r7} ldrb r4, [r4, r2] add r1, r1, r2, lsl #1 @ psd + start diff --git a/libavcodec/arm/fft_fixed_neon.S b/libavcodec/arm/fft_fixed_neon.S index 4d891ba1a4..faddc0095a 100644 --- a/libavcodec/arm/fft_fixed_neon.S +++ b/libavcodec/arm/fft_fixed_neon.S @@ -214,7 +214,7 @@ function fft\n\()_neon bl fft\n4\()_neon mov r0, r4 pop {r4, lr} - movrel r1, X(ff_cos_\n\()_fixed) + movrelx r1, X(ff_cos_\n\()_fixed) mov r2, #\n4/2 b fft_pass_neon endfunc diff --git a/libavcodec/arm/fft_neon.S b/libavcodec/arm/fft_neon.S index aa06e6daa7..c4d89189ea 100644 --- a/libavcodec/arm/fft_neon.S +++ b/libavcodec/arm/fft_neon.S @@ -143,7 +143,7 @@ function fft16_neon vswp d29, d30 @ q14{r12,i12,i14,r15} q15{r13,i13,i15,r14} vadd.f32 q0, q12, q13 @ {t1,t2,t5,t6} vadd.f32 q1, q14, q15 @ {t1a,t2a,t5a,t6a} - movrel r2, X(ff_cos_16) + movrelx r2, X(ff_cos_16) vsub.f32 q13, q12, q13 @ {t3,t4,t7,t8} vrev64.32 d1, d1 vsub.f32 q15, q14, q15 @ {t3a,t4a,t7a,t8a} @@ -290,7 +290,7 @@ function fft\n\()_neon bl fft\n4\()_neon mov r0, r4 pop {r4, lr} - movrel r1, X(ff_cos_\n) + movrelx r1, X(ff_cos_\n) mov r2, #\n4/2 b fft_pass_neon endfunc diff --git a/libavcodec/arm/sbrdsp_neon.S b/libavcodec/arm/sbrdsp_neon.S index 4b681bfe6a..610397f9e2 100644 --- a/libavcodec/arm/sbrdsp_neon.S +++ b/libavcodec/arm/sbrdsp_neon.S @@ -307,8 +307,8 @@ function ff_sbr_hf_apply_noise_0_neon, export=1 vmov.i32 d3, #0 .Lhf_apply_noise_0: push {r4,lr} + movrelx r4, X(ff_sbr_noise_table) ldr r12, [sp, #12] - movrel r4, X(ff_sbr_noise_table) add r3, r3, #1 bfc r3, #9, #23 sub r12, r12, #1 @@ -355,8 +355,8 @@ function ff_sbr_hf_apply_noise_1_neon, export=1 eor lr, r12, #1<<31 vmov d3, r12, lr .Lhf_apply_noise_1: + movrelx r4, X(ff_sbr_noise_table) ldr r12, [sp, #12] - movrel r4, X(ff_sbr_noise_table) add r3, r3, #1 bfc r3, #9, #23 sub r12, r12, #1 diff --git a/libavcodec/arm/vp3dsp_neon.S b/libavcodec/arm/vp3dsp_neon.S index 8d22d00038..2a9b25f34e 100644 --- a/libavcodec/arm/vp3dsp_neon.S +++ b/libavcodec/arm/vp3dsp_neon.S @@ -116,9 +116,8 @@ function vp3_idct_start_neon vadd.s16 q1, q8, q12 vsub.s16 q8, q8, q12 vld1.64 {d28-d31}, [r2,:128]! -endfunc -function vp3_idct_core_neon +vp3_idct_core_neon: vmull.s16 q2, d18, xC1S7 // (ip[1] * C1) << 16 vmull.s16 q3, d19, xC1S7 vmull.s16 q4, d2, xC4S4 // ((ip[0] + ip[4]) * C4) << 16 diff --git a/libavcodec/arm/vp8_armv6.S b/libavcodec/arm/vp8_armv6.S index 1fa6d15617..1b668bcd2a 100644 --- a/libavcodec/arm/vp8_armv6.S +++ b/libavcodec/arm/vp8_armv6.S @@ -65,7 +65,7 @@ T orrcs \cw, \cw, \t1 function ff_decode_block_coeffs_armv6, export=1 push {r0,r1,r4-r11,lr} - movrel lr, X(ff_vp56_norm_shift) + movrelx lr, X(ff_vp56_norm_shift) ldrd r4, r5, [sp, #44] @ token_prob, qmul cmp r3, #0 ldr r11, [r5] @@ -206,7 +206,7 @@ A orrcs r8, r8, r10, lsl r6 mov r9, #8 it ge addge r12, r12, #1 - movrel r4, X(ff_vp8_dct_cat_prob) + movrelx r4, X(ff_vp8_dct_cat_prob), r1 lsl r9, r9, r12 ldr r4, [r4, r12, lsl #2] add r12, r9, #3 |