]> granicus.if.org Git - libx264/commitdiff
drop support for x86_32 PIC.
authorLoren Merritt <pengvado@akuvian.org>
Wed, 20 Aug 2008 11:36:32 +0000 (05:36 -0600)
committerLoren Merritt <pengvado@akuvian.org>
Thu, 21 Aug 2008 10:03:36 +0000 (04:03 -0600)
common/x86/cabac-a.asm
common/x86/dct-32.asm
common/x86/dct-a.asm
common/x86/deblock-a.asm
common/x86/mc-a.asm
common/x86/mc-a2.asm
common/x86/pixel-a.asm
common/x86/predict-a.asm
common/x86/quant-a.asm
common/x86/sad-a.asm
common/x86/x86inc.asm

index 4c884a6cd2854df5c2c611e7f93ec99d668f1fbb..b33c11beb95fb4a7c733508dc2648bb3308418c9 100644 (file)
@@ -63,20 +63,13 @@ struc cb
 endstruc
 
 %macro LOAD_GLOBAL 4
-%ifdef PIC64
+%ifdef PIC
     ; this would be faster if the arrays were declared in asm, so that I didn't have to duplicate the lea
     lea   r11, [%2 GLOBAL]
     %ifnidn %3, 0
     add   r11, %3
     %endif
     movzx %1, byte [r11+%4]
-%elifdef PIC32
-    %ifnidn %3, 0
-    lea   %1, [%3+%4]
-    movzx %1, byte [%2+%1 GLOBAL]
-    %else
-    movzx %1, byte [%2+%3+%4 GLOBAL]
-    %endif
 %else
     movzx %1, byte [%2+%3+%4]
 %endif
@@ -85,7 +78,6 @@ endstruc
 cglobal x264_cabac_encode_decision_asm, 0,7
     movifnidn t0d, r0m
     movifnidn t1d, r1m
-    picgetgot t2
     mov   t5d, [r0+cb.range]
     movzx t3d, byte [r0+cb.state+t1]
     mov   t4d, t5d
@@ -95,22 +87,13 @@ cglobal x264_cabac_encode_decision_asm, 0,7
     sub   t4d, t5d
     mov   t6d, t3d
     shr   t6d, 6
-%ifdef PIC32
-    cmp   t6d, r2m
-%else
     movifnidn t2d, r2m
     cmp   t6d, t2d
-%endif
     mov   t6d, [r0+cb.low]
     lea   t7,  [t6+t4]
     cmovne t4d, t5d
     cmovne t6d, t7d
-%ifdef PIC32
-    mov   t1,  r2m
-    LOAD_GLOBAL t3d, x264_cabac_transition, t1, t3*2
-%else
     LOAD_GLOBAL t3d, x264_cabac_transition, t2, t3*2
-%endif
     movifnidn t1d, r1m
     mov   [r0+cb.state+t1], t3b
 .renorm:
index 9caa4fdd935ece3a4a323d1f8f0570d08c91b8da..be0008acc117ef24d80939697bc53474ccd9e50a 100644 (file)
@@ -378,7 +378,6 @@ global x264_add8x8_idct8_sse2 %+ .skip_prologue
     IDCT8_1D   0,1,2,3,4,5,6,7,r1
     SPILL r1, 6
     TRANSPOSE8x8W 0,1,2,3,4,5,6,7,[r1+0x60],[r1+0x40],1
-    picgetgot  edx
     paddw      m0, [pw_32 GLOBAL]
     SPILL r1, 0
     IDCT8_1D   0,1,2,3,4,5,6,7,r1
index e3b651e19fbbcd0eb38194c77c6f37a718f822c6..459c379ba73e3187b16445bbc0a31558176749f7 100644 (file)
@@ -41,7 +41,7 @@ SECTION .text
 ;-----------------------------------------------------------------------------
 ; void x264_dct4x4dc_mmx( int16_t d[4][4] )
 ;-----------------------------------------------------------------------------
-cglobal x264_dct4x4dc_mmx, 1,1,1
+cglobal x264_dct4x4dc_mmx, 1,1
     movq   m0, [r0+ 0]
     movq   m1, [r0+ 8]
     movq   m2, [r0+16]
@@ -119,7 +119,7 @@ cglobal x264_sub4x4_dct_mmx, 3,3
 ;-----------------------------------------------------------------------------
 ; void x264_add4x4_idct_mmx( uint8_t *p_dst, int16_t dct[4][4] )
 ;-----------------------------------------------------------------------------
-cglobal x264_add4x4_idct_mmx, 2,2,1
+cglobal x264_add4x4_idct_mmx, 2,2
 .skip_prologue:
     movq  m0, [r1+ 0]
     movq  m1, [r1+ 8]
@@ -155,7 +155,7 @@ cglobal x264_sub8x8_dct_sse2, 3,3
     movhps [r0+56], m3
     ret
 
-cglobal x264_add8x8_idct_sse2, 2,2,1
+cglobal x264_add8x8_idct_sse2, 2,2
 .skip_prologue:
     call .8x4
     add  r1, 64
@@ -197,7 +197,7 @@ cglobal %1, 3,3
 ; void x264_add8x8_idct_mmx( uint8_t *pix, int16_t dct[4][4][4] )
 ;-----------------------------------------------------------------------------
 %macro ADD_NxN_IDCT 6
-cglobal %1, 2,2,1
+cglobal %1, 2,2
 .skip_prologue:
     call %2
     add  r0, %4-%5-%6*FDEC_STRIDE
@@ -268,7 +268,6 @@ cglobal x264_zigzag_sub_4x4_frame_ssse3, 3,3
     movd      [r2+1*FDEC_STRIDE], xmm1
     movd      [r2+2*FDEC_STRIDE], xmm2
     movd      [r2+3*FDEC_STRIDE], xmm3
-    picgetgot r1
     punpckldq xmm0, xmm1
     punpckldq xmm2, xmm3
     punpckldq xmm4, xmm5
index 066e4b640d49adc4e5018d18e3845444daeea1da..8b5ef26b8df1d0907a0e30a88f2670d1210437c6 100644 (file)
@@ -373,7 +373,7 @@ cglobal x264_deblock_h_luma_sse2
 ;-----------------------------------------------------------------------------
 ; void x264_deblock_v8_luma_mmxext( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
 ;-----------------------------------------------------------------------------
-cglobal x264_deblock_%2_luma_%1, 5,5,1
+cglobal x264_deblock_%2_luma_%1, 5,5
     lea     r4, [r1*3]
     dec     r2     ; alpha-1
     neg     r4
@@ -609,7 +609,7 @@ DEBLOCK_LUMA sse2, v, 16
 ;-----------------------------------------------------------------------------
 ; void x264_deblock_v_luma_intra_sse2( uint8_t *pix, int stride, int alpha, int beta )
 ;-----------------------------------------------------------------------------
-cglobal x264_deblock_%2_luma_intra_%1, 4,6,1
+cglobal x264_deblock_%2_luma_intra_%1, 4,6
 %ifndef ARCH_X86_64
     sub     esp, 0x60
 %endif
@@ -813,7 +813,6 @@ chroma_inter_body_mmxext:
     movd       m6, [r4] ; tc0
     punpcklbw  m6, m6
     pand       m7, m6
-    picgetgot r4
     DEBLOCK_P0_Q0
     ret
 
@@ -862,7 +861,6 @@ chroma_intra_body_mmxext:
     LOAD_MASK r2d, r3d
     movq   m5, m1
     movq   m6, m2
-    picgetgot r2
     CHROMA_INTRA_P0  m1, m0, m3
     CHROMA_INTRA_P0  m2, m3, m0
     psubb  m1, m5
index 853d676259a1e97b83f576ea2842e136c8454bd9..8773dbf202f367ed8677fa21fc1cc14b2affa783 100644 (file)
@@ -284,17 +284,9 @@ cglobal x264_pixel_avg2_w20_sse2, 6,7
 %macro INIT_SHIFT 2
     and    eax, 7
     shl    eax, 3
-%ifdef PIC32
-    ; both versions work, but picgetgot is slower than gpr->mmx is slower than mem->mmx
-    mov    r2, 64
-    sub    r2, eax
-    movd   %2, eax
-    movd   %1, r2
-%else
     movd   %1, [sw_64 GLOBAL]
     movd   %2, eax
     psubw  %1, %2
-%endif
 %endmacro
 
 %macro AVG_CACHELINE_CHECK 3 ; width, cacheline, instruction set
@@ -316,7 +308,7 @@ cglobal x264_pixel_avg2_w%1_cache%2_%3, 0,0
     INIT_SHIFT mm6, mm7
     mov    eax, r4m
     INIT_SHIFT mm4, mm5
-    PROLOGUE 6,6,0
+    PROLOGUE 6,6
     and    r2, ~7
     and    r4, ~7
     sub    r4, r2
@@ -510,7 +502,6 @@ COPY_W16_SSE2 x264_mc_copy_w16_aligned_sse2, movdqa
 %else
     SPLATW  m4, r4m
 %endif
-    picgetgot r4
     mova    m5, [pw_64 GLOBAL]
     psubw   m5, m4      ; weight_src
     mova    m6, [pw_32 GLOBAL] ; rounding
@@ -530,7 +521,7 @@ INIT_MMX
 ;-----------------------------------------------------------------------------
 ; int x264_pixel_avg_weight_w16_mmxext( uint8_t *dst, int, uint8_t *src, int, int i_weight, int )
 ;-----------------------------------------------------------------------------
-cglobal x264_pixel_avg_weight_4x4_mmxext, 4,4,1
+cglobal x264_pixel_avg_weight_4x4_mmxext, 4,4
     BIWEIGHT_START 0
     BIWEIGHT  [r0     ], [r2     ]
     BIWEIGHT  [r0+r1  ], [r2+r3  ]
@@ -671,7 +662,7 @@ cglobal x264_prefetch_ref_mmxext, 3,3
 ;                             int width, int height )
 ;-----------------------------------------------------------------------------
 %macro MC_CHROMA 1
-cglobal x264_mc_chroma_%1, 0,6,1
+cglobal x264_mc_chroma_%1, 0,6
 %if mmsize == 16
     cmp dword r6m, 4
     jle x264_mc_chroma_mmxext %+ .skip_prologue
@@ -833,7 +824,7 @@ INIT_XMM
 MC_CHROMA sse2
 
 INIT_MMX
-cglobal x264_mc_chroma_ssse3, 0,6,1
+cglobal x264_mc_chroma_ssse3, 0,6
     MC_CHROMA_START
     and       r4d, 7
     and       r5d, 7
index dc2bb550b551c02351f3bdebb0c835540b4bdc21..d2e88354faf054477492cb2a4f8a846bd680c5ff 100644 (file)
@@ -111,7 +111,7 @@ INIT_MMX
 ;-----------------------------------------------------------------------------
 ; void x264_hpel_filter_v_mmxext( uint8_t *dst, uint8_t *src, int16_t *buf, int stride, int width );
 ;-----------------------------------------------------------------------------
-cglobal x264_hpel_filter_v_%1, 5,6,1
+cglobal x264_hpel_filter_v_%1, 5,6
     lea r5, [r1+r3]
     sub r1, r3
     sub r1, r3
@@ -148,7 +148,7 @@ HPEL_V mmxext
 ;-----------------------------------------------------------------------------
 ; void x264_hpel_filter_c_mmxext( uint8_t *dst, int16_t *buf, int width );
 ;-----------------------------------------------------------------------------
-cglobal x264_hpel_filter_c_mmxext, 3,3,1
+cglobal x264_hpel_filter_c_mmxext, 3,3
     add r0, r2
     lea r1, [r1+r2*2]
     neg r2
@@ -177,7 +177,7 @@ cglobal x264_hpel_filter_c_mmxext, 3,3,1
 ;-----------------------------------------------------------------------------
 ; void x264_hpel_filter_h_mmxext( uint8_t *dst, uint8_t *src, int width );
 ;-----------------------------------------------------------------------------
-cglobal x264_hpel_filter_h_mmxext, 3,3,1
+cglobal x264_hpel_filter_h_mmxext, 3,3
     add r0, r2
     add r1, r2
     neg r2
@@ -224,7 +224,7 @@ INIT_XMM
 ;-----------------------------------------------------------------------------
 ; void x264_hpel_filter_c_sse2( uint8_t *dst, int16_t *buf, int width );
 ;-----------------------------------------------------------------------------
-cglobal x264_hpel_filter_c_%1, 3,3,1
+cglobal x264_hpel_filter_c_%1, 3,3
     add r0, r2
     lea r1, [r1+r2*2]
     neg r2
@@ -267,7 +267,7 @@ cglobal x264_hpel_filter_c_%1, 3,3,1
 ;-----------------------------------------------------------------------------
 ; void x264_hpel_filter_h_sse2( uint8_t *dst, uint8_t *src, int width );
 ;-----------------------------------------------------------------------------
-cglobal x264_hpel_filter_h_sse2, 3,3,1
+cglobal x264_hpel_filter_h_sse2, 3,3
     add r0, r2
     add r1, r2
     neg r2
index 022365812f2cdf5ff7d045a813ad844ae0e01688..0782b7833440b044312bf030025bab4a7855af0d 100644 (file)
@@ -481,7 +481,6 @@ SATD_W4 mmxext
 %endmacro
 
 %macro SATD_END_SSE2 0
-    picgetgot ebx
     psrlw   m6, 1
     HADDW   m6, m7
     movd   eax, m6
@@ -643,7 +642,6 @@ cglobal x264_pixel_sa8d_8x8_%1, 4,7
     paddusw m0, m7
     paddusw m5, m4
     pavgw   m0, m5
-    picgetgot ebx
     HADDW   m0, m7
     movd eax, m0
     mov  ecx, eax ; preserve rounding for 16x16
@@ -1220,7 +1218,6 @@ cglobal x264_pixel_ssim_4x4x2_core_sse2, 4,4
 %endrep
     ; PHADDW m1, m2
     ; PHADDD m3, m4
-    picgetgot eax
     movdqa    m7, [pw_1 GLOBAL]
     pshufd    m5, m3, 0xb1
     pmaddwd   m1, m7
@@ -1267,7 +1264,6 @@ cglobal x264_pixel_ssim_end4_sse2, 3,3
     paddd     m1, m2
     paddd     m2, m3
     paddd     m3, m4
-    picgetgot r1
     movdqa    m5, [ssim_c1 GLOBAL]
     movdqa    m6, [ssim_c2 GLOBAL]
     TRANSPOSE4x4D  0, 1, 2, 3, 4
@@ -1298,8 +1294,8 @@ cglobal x264_pixel_ssim_end4_sse2, 3,3
     cmp       r2d, 4
     je .skip ; faster only if this is the common case; remove branch if we use ssim on a macroblock level
     neg       r2
-%ifdef PIC64
-    lea       r3,   [mask_ff + 16 GLOBAL]
+%ifdef PIC
+    lea       r3, [mask_ff + 16 GLOBAL]
     movdqu    m1, [r3 + r2*4]
 %else
     movdqu    m1, [mask_ff + r2*4 + 16 GLOBAL]
index a792a07098dd5ca340bca6d936d98ca3861e1803..0032f72690caf7b5b72a2eb8fad69f987d691a55 100644 (file)
@@ -99,7 +99,7 @@ SECTION .text
 ;-----------------------------------------------------------------------------
 ; void predict_4x4_ddl_mmxext( uint8_t *src )
 ;-----------------------------------------------------------------------------
-cglobal predict_4x4_ddl_mmxext, 1,1,1
+cglobal predict_4x4_ddl_mmxext, 1,1
     sub         r0, FDEC_STRIDE
     movq        mm3, [r0]
     movq        mm1, [r0-1]
@@ -123,7 +123,7 @@ cglobal predict_4x4_ddl_mmxext, 1,1,1
 ;-----------------------------------------------------------------------------
 ; void predict_4x4_vl_mmxext( uint8_t *src )
 ;-----------------------------------------------------------------------------
-cglobal predict_4x4_vl_mmxext, 1,1,1
+cglobal predict_4x4_vl_mmxext, 1,1
     movq        mm1, [r0-FDEC_STRIDE]
     movq        mm3, mm1
     movq        mm2, mm1
@@ -154,7 +154,7 @@ cglobal predict_8x8_v_mmxext, 2,2
 ;-----------------------------------------------------------------------------
 ; void predict_8x8_dc_mmxext( uint8_t *src, uint8_t *edge );
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8_dc_mmxext, 2,2,1
+cglobal predict_8x8_dc_mmxext, 2,2
     pxor        mm0, mm0
     pxor        mm1, mm1
     psadbw      mm0, [r1+7]
@@ -171,7 +171,7 @@ cglobal predict_8x8_dc_mmxext, 2,2,1
 ; void predict_8x8_dc_top_mmxext( uint8_t *src, uint8_t *edge );
 ;-----------------------------------------------------------------------------
 %macro PRED8x8_DC 2
-cglobal %1, 2,2,1
+cglobal %1, 2,2
     pxor        mm0, mm0
     psadbw      mm0, [r1+%2]
     paddw       mm0, [pw_4 GLOBAL]
@@ -192,7 +192,7 @@ PRED8x8_DC predict_8x8_dc_left_mmxext, 7
 ;-----------------------------------------------------------------------------
 ; void predict_8x8_ddl_mmxext( uint8_t *src, uint8_t *edge )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8_ddl_mmxext, 2,2,1
+cglobal predict_8x8_ddl_mmxext, 2,2
     movq        mm5, [r1+16]
     movq        mm2, [r1+17]
     movq        mm3, [r1+23]
@@ -223,7 +223,7 @@ cglobal predict_8x8_ddl_mmxext, 2,2,1
 ;-----------------------------------------------------------------------------
 ; void predict_8x8_ddr_mmxext( uint8_t *src, uint8_t *edge )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8_ddr_mmxext, 2,2,1
+cglobal predict_8x8_ddr_mmxext, 2,2
     movq        mm1, [r1+7]
     movq        mm2, [r1+9]
     movq        mm3, [r1+15]
@@ -254,7 +254,7 @@ cglobal predict_8x8_ddr_mmxext, 2,2,1
 ;-----------------------------------------------------------------------------
 ; void predict_8x8_ddl_sse2( uint8_t *src, uint8_t *edge )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8_ddl_sse2, 2,2,1
+cglobal predict_8x8_ddl_sse2, 2,2
     movdqa      xmm3, [r1+16]
     movdqu      xmm2, [r1+17]
     movdqa      xmm1, xmm3
@@ -272,7 +272,7 @@ cglobal predict_8x8_ddl_sse2, 2,2,1
 ;-----------------------------------------------------------------------------
 ; void predict_8x8_ddr_sse2( uint8_t *src, uint8_t *edge )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8_ddr_sse2, 2,2,1
+cglobal predict_8x8_ddr_sse2, 2,2
     movdqu      xmm3, [r1+8]
     movdqu      xmm1, [r1+7]
     movdqa      xmm2, xmm3
@@ -297,7 +297,7 @@ cglobal predict_8x8_ddr_sse2, 2,2,1
 ;-----------------------------------------------------------------------------
 ; void predict_8x8_vl_sse2( uint8_t *src, uint8_t *edge )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8_vl_sse2, 2,2,1
+cglobal predict_8x8_vl_sse2, 2,2
     movdqa      xmm4, [r1+16]
     movdqa      xmm2, xmm4
     movdqa      xmm1, xmm4
@@ -338,7 +338,7 @@ cglobal predict_8x8_vl_sse2, 2,2,1
 ; 6   .....
 ; 7   ,,,,,
 
-cglobal predict_8x8_vr_core_mmxext, 2,2,1
+cglobal predict_8x8_vr_core_mmxext, 2,2
     movq        mm2, [r1+16]
     movq        mm3, [r1+15]
     movq        mm1, [r1+14]
@@ -370,7 +370,7 @@ cglobal predict_8x8c_v_mmx, 1,1
 ;-----------------------------------------------------------------------------
 ; void predict_8x8c_dc_core_mmxext( uint8_t *src, int s2, int s3 )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8c_dc_core_mmxext, 1,1,1
+cglobal predict_8x8c_dc_core_mmxext, 1,1
     movq        mm0, [r0 - FDEC_STRIDE]
     pxor        mm1, mm1
     pxor        mm2, mm2
@@ -422,7 +422,7 @@ cglobal predict_8x8c_dc_core_mmxext, 1,1,1
 ;-----------------------------------------------------------------------------
 ; void predict_8x8c_p_core_mmxext( uint8_t *src, int i00, int b, int c )
 ;-----------------------------------------------------------------------------
-cglobal predict_8x8c_p_core_mmxext, 1,2,1
+cglobal predict_8x8c_p_core_mmxext, 1,2
     LOAD_PLANE_ARGS
     movq        mm1, mm2
     pmullw      mm2, [pw_3210 GLOBAL]
@@ -450,7 +450,7 @@ ALIGN 4
 ;-----------------------------------------------------------------------------
 ; void predict_16x16_p_core_mmxext( uint8_t *src, int i00, int b, int c )
 ;-----------------------------------------------------------------------------
-cglobal predict_16x16_p_core_mmxext, 1,2,1
+cglobal predict_16x16_p_core_mmxext, 1,2
     LOAD_PLANE_ARGS
     movq        mm5, mm2
     movq        mm1, mm2
@@ -492,7 +492,7 @@ ALIGN 4
 ;-----------------------------------------------------------------------------
 ; void predict_16x16_p_core_sse2( uint8_t *src, int i00, int b, int c )
 ;-----------------------------------------------------------------------------
-cglobal predict_16x16_p_core_sse2, 1,2,1
+cglobal predict_16x16_p_core_sse2, 1,2
     movd        xmm0, r1m
     movd        xmm1, r2m
     movd        xmm2, r3m
@@ -568,7 +568,7 @@ cglobal predict_16x16_dc_core_mmxext, 1,2
 %endif
     REP_RET
 
-cglobal predict_16x16_dc_top_mmxext, 1,2,1
+cglobal predict_16x16_dc_top_mmxext, 1,2
     PRED16x16_DC [pw_8 GLOBAL], 4
     REP_RET
 
@@ -594,7 +594,7 @@ cglobal predict_16x16_dc_core_sse2, 1,2
     PRED16x16_DC_SSE2 xmm2, 5
     REP_RET
 
-cglobal predict_16x16_dc_top_sse2, 1,2,1
+cglobal predict_16x16_dc_top_sse2, 1,2
     PRED16x16_DC_SSE2 [pw_8 GLOBAL], 4
     REP_RET
 
index b840f8f818fae49030bdfd89bed6c00b4455febd..eb692b4f71013206a7b410f4872beb8ea45225bb 100644 (file)
@@ -270,7 +270,6 @@ cglobal x264_dequant_%2x%2_%1, 0,3
 .rshift32:
     neg   t0d
     movd  m5, t0d
-    picgetgot t0d
     mova  m6, [pd_1 GLOBAL]
     pxor  m7, m7
     pslld m6, m5
@@ -290,12 +289,11 @@ cglobal x264_dequant_%2x%2_flat16_%1, 0,3
     sub  t2d, t1d
     sub  t2d, t1d   ; i_mf = i_qp % 6
     shl  t2d, %3
-%ifdef PIC64
+%ifdef PIC
     lea  r1, [dequant%2_scale GLOBAL]
     add  r1, t2
 %else
-    picgetgot r0
-    lea  r1, [t2 + dequant%2_scale GLOBAL]
+    lea  r1, [dequant%2_scale + t2 GLOBAL]
 %endif
     movifnidn r0d, r0m
     movd m7, t0d
index ab28dd2562a6c21dc41084d1d0659e2c15297d7f..a95450067ea6e4e1c5a59180113114c4395b31f6 100644 (file)
@@ -694,7 +694,7 @@ cglobal x264_pixel_sad_16x%2_cache64_%1, 0,0
     and     eax, 0x37
     cmp     eax, 0x30
     jle x264_pixel_sad_16x%2_sse2
-    PROLOGUE 4,6,0
+    PROLOGUE 4,6
     mov     r4d, r2d
     and     r4d, 15
 %ifidn %1, ssse3
@@ -704,11 +704,10 @@ cglobal x264_pixel_sad_16x%2_cache64_%1, 0,0
     shl     r4d, 4  ; code size = 80
 %endif
 %define sad_w16_addr (sad_w16_align1_%1 + (sad_w16_align1_%1 - sad_w16_align2_%1))
-%ifdef PIC64
+%ifdef PIC
     lea     r5, [sad_w16_addr GLOBAL]
     add     r5, r4
 %else
-    picgetgot r5
     lea     r5, [sad_w16_addr + r4 GLOBAL]
 %endif
     and     r2, ~15
@@ -728,18 +727,10 @@ cglobal x264_pixel_sad_16x%2_cache64_%1, 0,0
     jle x264_pixel_sad_%1x%2_mmxext
     and    eax, 7
     shl    eax, 3
-%ifdef PIC32
-    ; both versions work, but picgetgot is slower than gpr->mmx is slower than mem->mmx
-    mov    r2, 64
-    sub    r2, eax
-    movd   mm7, eax
-    movd   mm6, r2
-%else
     movd   mm6, [sw_64 GLOBAL]
     movd   mm7, eax
     psubw  mm6, mm7
-%endif
-    PROLOGUE 4,5,0
+    PROLOGUE 4,5
     and    r2, ~7
     mov    r4d, %3
     pxor   mm0, mm0
index c2c380d79f5735880f0b477760735ff44c7144bb..dc06e7c56b91beb347d62fb6ccefd2f17836a2e5 100644 (file)
     %endif
 %endmacro
 
-; PIC support macros. All these macros are totally harmless when PIC is
-; not defined but can ruin everything if misused in PIC mode. On x86_32, shared
-; objects cannot directly access global variables by address, they need to
-; go through the GOT (global offset table). Most OSes do not care about it
-; and let you load non-shared .so objects (Linux, Win32...). However, OS X
-; requires PIC code in its .dylib objects.
-;
-; - GLOBAL should be used as a suffix for global addressing, eg.
-;     picgetgot ebx
+; PIC support macros.
+; x86_64 can't fit 64bit address literals in most instruction types,
+; so shared objects (under the assumption that they might be anywhere
+; in memory) must use an address mode that does fit.
+; So all accesses to global variables must use this macro, e.g.
 ;     mov eax, [foo GLOBAL]
-;   instead of
+; instead of
 ;     mov eax, [foo]
 ;
-; - picgetgot computes the GOT address into the given register in PIC
-;   mode, otherwise does nothing. You need to do this before using GLOBAL.
-;   Before in both execution order and compiled code order (so GLOBAL knows
-;   which register the GOT is in).
+; x86_32 doesn't require PIC.
+; Some distros prefer shared objects to be PIC, but nothing breaks if
+; the code contains a few textrels, so we'll skip that complexity.
 
-%ifndef PIC
-    %define GLOBAL
-    %macro picgetgot 1
-    %endmacro
-%elifdef ARCH_X86_64
-    %define PIC64
+%ifndef ARCH_X86_64
+    %undef PIC
+%endif
+%ifdef PIC
     %define GLOBAL wrt rip
-    %macro picgetgot 1
-    %endmacro
 %else
-    %define PIC32
-    %ifidn __OUTPUT_FORMAT__,macho
-        ; There is no real global offset table on OS X, but we still
-        ; need to reference our variables by offset.
-        %macro picgetgot 1
-            call %%getgot
-          %%getgot:
-            pop %1
-            add %1, $$ - %%getgot
-            %undef GLOBAL
-            %define GLOBAL + %1 - fakegot
-        %endmacro
-    %else ; elf
-        extern _GLOBAL_OFFSET_TABLE_
-        %macro picgetgot 1
-            call %%getgot
-          %%getgot:
-            pop %1
-            add %1, _GLOBAL_OFFSET_TABLE_ + $$ - %%getgot wrt ..gotpc
-            %undef GLOBAL
-            %define GLOBAL + %1 wrt ..gotoff
-        %endmacro
-    %endif
+    %define GLOBAL
 %endif
 
 ; Macros to eliminate most code duplication between x86_32 and x86_64:
 
 ; PROLOGUE:
 ; %1 = number of arguments. loads them from stack if needed.
-; %2 = number of registers used, not including PIC. pushes callee-saved regs if needed.
-; %3 = whether global constants are used in this function. inits x86_32 PIC if needed.
-; %4 = list of names to define to registers
+; %2 = number of registers used. pushes callee-saved regs if needed.
+; %3 = list of names to define to registers
 ; PROLOGUE can also be invoked by adding the same options to cglobal
 
 ; e.g.
-; cglobal foo, 2,3,0, dst, src, tmp
-; declares a function (foo), taking two args (dst and src), one local variable (tmp), and not using globals
+; cglobal foo, 2,3, dst, src, tmp
+; declares a function (foo), taking two args (dst and src) and one local variable (tmp)
 
 ; TODO Some functions can use some args directly from the stack. If they're the
 ; last args then you can just not declare them, but if they're in the middle
@@ -240,12 +208,12 @@ DECLARE_REG 6, rax, eax, ax,  al,  [rsp + stack_offset + 8]
     %endif
 %endmacro
 
-%macro PROLOGUE 2-4+ 0 ; #args, #regs, pic, arg_names...
+%macro PROLOGUE 2-3+ ; #args, #regs, arg_names...
     ASSERT %2 >= %1
     ASSERT %2 <= 7
     %assign stack_offset 0
     LOAD_IF_USED 6, %1
-    DEFINE_ARGS %4
+    DEFINE_ARGS %3
 %endmacro
 
 %macro RET 0
@@ -288,15 +256,10 @@ DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28]
     %endif
 %endmacro
 
-%macro PROLOGUE 2-4+ 0 ; #args, #regs, pic, arg_names...
+%macro PROLOGUE 2-3+ ; #args, #regs, arg_names...
     ASSERT %2 >= %1
     %assign stack_offset 0
     %assign regs_used %2
-    %ifdef PIC
-    %if %3
-        %assign regs_used regs_used+1
-    %endif
-    %endif
     ASSERT regs_used <= 7
     PUSH_IF_USED 3
     PUSH_IF_USED 4
@@ -309,10 +272,7 @@ DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28]
     LOAD_IF_USED 4, %1
     LOAD_IF_USED 5, %1
     LOAD_IF_USED 6, %1
-    %if %3
-        picgetgot r%2
-    %endif
-    DEFINE_ARGS %4
+    DEFINE_ARGS %3
 %endmacro
 
 %macro RET 0