shithub: openh264

Download patch

ref: 36ee29037b3ebc36e848561392c05bbf2cb4cab8
parent: 659ff14af50bc184bac74dd058010143cf9e5734
author: Sindre Aamås <[email protected]>
date: Tue Mar 7 09:22:32 EST 2017

[Encoder/x86] Simplify sample_sc X86_32_PICASM handling

Utilize program counter-relative offsets to simplify X86_32_PICASM
code.

In order for this to work with nasm, data constants are placed in
the text segment.

--- a/codec/encoder/core/x86/sample_sc.asm
+++ b/codec/encoder/core/x86/sample_sc.asm
@@ -34,7 +34,11 @@
 ;***********************************************************************
 ; Local Data (Read Only)
 ;***********************************************************************
+%ifdef X86_32_PICASM
+SECTION .text align=16
+%else
 SECTION .rodata align=16
+%endif
 
 ALIGN 16
 mv_x_inc_x4     dw  0x10, 0x10, 0x10, 0x10
@@ -696,26 +700,12 @@
     mov     ebx,    [height]
     mov     [i_height], ebx
 
-%ifdef X86_32_PICASM
-    push    r0
-    mov     r0, esp
-    and     esp, 0xfffffff0
-    push    0x00100010                  ;mv_x_inc_x4
-    push    0x00100010
-    push    0x00040004                  ;mv_y_inc_x4
-    push    0x00040004
-    push    0x000c0008                  ;mx_x_offset_x4
-    push    0x00040000
-    movq    xmm7,   [esp+16]            ; x_qpel inc
-    movq    xmm6,   [esp+8]             ; y_qpel inc
-    movq    xmm5,   [esp]               ; x_qpel vector
-    mov     esp,    r0
-    pop     r0
-%else
-    movq    xmm7,   [mv_x_inc_x4]       ; x_qpel inc
-    movq    xmm6,   [mv_y_inc_x4]       ; y_qpel inc
-    movq    xmm5,   [mx_x_offset_x4]    ; x_qpel vector
-%endif
+    %assign push_num 5
+    INIT_X86_32_PIC_NOPRESERVE ecx
+    movq    xmm7,   [pic(mv_x_inc_x4)]     ; x_qpel inc
+    movq    xmm6,   [pic(mv_y_inc_x4)]     ; y_qpel inc
+    movq    xmm5,   [pic(mx_x_offset_x4)]  ; x_qpel vector
+    DEINIT_X86_32_PIC
     pxor    xmm4,   xmm4
     pxor    xmm3,   xmm3                ; y_qpel vector
 HASH_HEIGHT_LOOP_SSE2:
@@ -1415,24 +1405,9 @@
     push r13
     mov     r12,    r2
 
-%ifdef X86_32_PICASM
-    push    r0
-    mov     r0, esp
-    and     esp, 0xfffffff0
-    push    0x00100010                  ;mv_x_inc_x4
-    push    0x00100010
-    push    0x00040004                  ;mv_y_inc_x4
-    push    0x00040004
-    push    0x000c0008                  ;mx_x_offset_x4
-    push    0x00040000
-    movq    xmm7,   [esp+16]            ; x_qpel inc
-    movq    xmm6,   [esp+8]             ; y_qpel inc
-    movq    xmm5,   [esp]               ; x_qpel vector
-%else
     movq    xmm7,   [mv_x_inc_x4]       ; x_qpel inc
     movq    xmm6,   [mv_y_inc_x4]       ; y_qpel inc
     movq    xmm5,   [mx_x_offset_x4]    ; x_qpel vector
-%endif
     pxor    xmm4,   xmm4
     pxor    xmm3,   xmm3                ; y_qpel vector
 HASH_HEIGHT_LOOP_SSE2: