[svn] / trunk / xvidcore / src / image / x86_asm / colorspace_yuv_mmx.asm Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/x86_asm/colorspace_yuv_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1540, Sun Aug 29 10:02:38 2004 UTC revision 1844, Thu Dec 4 14:41:50 2008 UTC
# Line 3  Line 3 
3  ; *  XVID MPEG-4 VIDEO CODEC  ; *  XVID MPEG-4 VIDEO CODEC
4  ; *  - MMX and XMM YV12->YV12 conversion -  ; *  - MMX and XMM YV12->YV12 conversion -
5  ; *  ; *
6  ; *  Copyright(C) 2001 Michael Militzer <isibaar@xvid.org>  ; *  Copyright(C) 2001-2008 Michael Militzer <michael@xvid.org>
7  ; *  ; *
8  ; *  This program is free software; you can redistribute it and/or modify it  ; *  This program is free software; you can redistribute it and/or modify it
9  ; *  under the terms of the GNU General Public License as published by  ; *  under the terms of the GNU General Public License as published by
# Line 19  Line 19 
19  ; *  along with this program; if not, write to the Free Software  ; *  along with this program; if not, write to the Free Software
20  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ; *  ; *
22  ; * $Id: colorspace_yuv_mmx.asm,v 1.5 2004-08-29 10:02:38 edgomez Exp $  ; * $Id: colorspace_yuv_mmx.asm,v 1.13 2008-12-04 14:41:50 Isibaar Exp $
23  ; *  ; *
24  ; ***************************************************************************/  ; ***************************************************************************/
25    
26  BITS 32  %include "nasm.inc"
   
 %macro cglobal 1  
         %ifdef PREFIX  
                 %ifdef MARK_FUNCS  
                         global _%1:function %1.endfunc-%1  
                         %define %1 _%1:function %1.endfunc-%1  
                 %else  
                         global _%1  
                         %define %1 _%1  
                 %endif  
         %else  
                 %ifdef MARK_FUNCS  
                         global %1:function %1.endfunc-%1  
                 %else  
                         global %1  
                 %endif  
         %endif  
 %endmacro  
27    
28  ;=============================================================================  ;=============================================================================
29  ; Helper macros  ; Helper macros
30  ;=============================================================================  ;=============================================================================
31    
32    %macro _MOVQ        3
33    %if %1 == 1
34            movntq  %2, %3      ; xmm
35    %else
36            movq    %2, %3      ; plain mmx
37    %endif
38    %endmacro
39    
40  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
41  ; PLANE_COPY ( DST, DST_DIF, SRC, SRC_DIF, WIDTH, HEIGHT, OPT )  ; PLANE_COPY ( DST, DST_STRIDE, SRC, SRC_STRIDE, WIDTH, HEIGHT, OPT )
42  ; DST           dst buffer  ; DST           dst buffer
43  ; DST_DIF       dst stride difference (e.g. stride - width)  ; DST_STRIDE    dst stride
44  ; SRC           src destination buffer  ; SRC           src destination buffer
45  ; SRC_DIF       src stride difference (e.g. stride - width)  ; SRC_STRIDE    src stride
46  ; WIDTH         width  ; WIDTH         width
47  ; HEIGHT        height  ; HEIGHT        height
48  ; OPT           0=plain mmx, 1=xmm  ; OPT           0=plain mmx, 1=xmm
49    ;
50    ;
51    ; Trashes: DST, SRC, WIDTH, HEIGHT, _EBX, _ECX, _EDX
52  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
53    
54  %macro  PLANE_COPY      7  %macro  PLANE_COPY      7
55  %define DST                     %1  %define DST                     %1
56  %define DST_DIF         %2  %define DST_STRIDE              %2
57  %define SRC                     %3  %define SRC                     %3
58  %define SRC_DIF         %4  %define SRC_STRIDE              %4
59  %define WIDTH           %5  %define WIDTH           %5
60  %define HEIGHT          %6  %define HEIGHT          %6
61  %define OPT                     %7  %define OPT                     %7
62    
63    mov eax, WIDTH    mov _EBX, WIDTH
64    mov ebp, HEIGHT           ; $ebp$ = height    shr WIDTH, 6              ; $_EAX$ = width / 64
65    mov esi, SRC    and _EBX, 63              ; remainder = width % 64
66    mov edi, DST    mov _EDX, _EBX
67      shr _EBX, 4               ; $_EBX$ = remainder / 16
68    mov ebx, eax    and _EDX, 15              ; $_EDX$ = remainder % 16
69    shr eax, 6                ; $eax$ = width / 64  
70    and ebx, 63               ; remainder = width % 64  %%loop64_start_pc:
71    mov edx, ebx    push DST
72    shr ebx, 4                ; $ebx$ = remainder / 16    push SRC
73    and edx, 15               ; $edx$ = remainder % 16  
74      mov  _ECX, WIDTH          ; width64
75  %%loop64_start    test WIDTH, WIDTH
76    or eax, eax    jz %%loop16_start_pc
77    jz %%loop16_start  
78    mov ecx, eax              ; width64  %%loop64_pc:
 %%loop64:  
79  %if OPT == 1                ; xmm  %if OPT == 1                ; xmm
80    prefetchnta [esi + 64]    ; non temporal prefetch    prefetchnta [SRC + 64]    ; non temporal prefetch
81    prefetchnta [esi + 96]    prefetchnta [SRC + 96]
 %endif  
   movq mm1, [esi]           ; read from src  
   movq mm2, [esi + 8]  
   movq mm3, [esi + 16]  
   movq mm4, [esi + 24]  
   movq mm5, [esi + 32]  
   movq mm6, [esi + 40]  
   movq mm7, [esi + 48]  
   movq mm0, [esi + 56]  
   
 %if OPT == 0                ; plain mmx  
   movq [edi], mm1           ; write to y_out  
   movq [edi + 8], mm2  
   movq [edi + 16], mm3  
   movq [edi + 24], mm4  
   movq [edi + 32], mm5  
   movq [edi + 40], mm6  
   movq [edi + 48], mm7  
   movq [edi + 56], mm0  
 %else  
   movntq [edi], mm1         ; write to y_out  
   movntq [edi + 8], mm2  
   movntq [edi + 16], mm3  
   movntq [edi + 24], mm4  
   movntq [edi + 32], mm5  
   movntq [edi + 40], mm6  
   movntq [edi + 48], mm7  
   movntq [edi + 56], mm0  
82  %endif  %endif
83      movq mm1, [SRC     ]      ; read from src
84      movq mm2, [SRC +  8]
85      movq mm3, [SRC + 16]
86      movq mm4, [SRC + 24]
87      movq mm5, [SRC + 32]
88      movq mm6, [SRC + 40]
89      movq mm7, [SRC + 48]
90      movq mm0, [SRC + 56]
91    
92      _MOVQ OPT, [DST     ], mm1      ; write to y_out
93      _MOVQ OPT, [DST +  8], mm2
94      _MOVQ OPT, [DST + 16], mm3
95      _MOVQ OPT, [DST + 24], mm4
96      _MOVQ OPT, [DST + 32], mm5
97      _MOVQ OPT, [DST + 40], mm6
98      _MOVQ OPT, [DST + 48], mm7
99      _MOVQ OPT, [DST + 56], mm0
100    
101      add SRC, 64
102      add DST, 64
103      loop %%loop64_pc
104    
105    %%loop16_start_pc:
106      mov  _ECX, _EBX           ; width16
107      test _EBX, _EBX
108      jz %%loop1_start_pc
109    
110    %%loop16_pc:
111      movq mm1, [SRC]
112      movq mm2, [SRC + 8]
113    
114      _MOVQ OPT, [DST], mm1
115      _MOVQ OPT, [DST + 8], mm2
116    
117      add SRC, 16
118      add DST, 16
119      loop %%loop16_pc
120    
121    add esi, 64  %%loop1_start_pc:
122    add edi, 64    mov _ECX, _EDX
123    dec ecx    rep movsb
124    jnz %%loop64  
125      pop SRC
126      pop DST
127  %%loop16_start  
128    or ebx, ebx  %ifdef ARCH_IS_X86_64
129    jz %%loop1_start    XVID_MOVSX _ECX, SRC_STRIDE
130    mov ecx, ebx              ; width16    add SRC, _ECX
131  %%loop16:    mov ecx, DST_STRIDE
132    movq mm1, [esi]    add DST, _ECX
   movq mm2, [esi + 8]  
 %if OPT == 0                ; plain mmx  
   movq [edi], mm1  
   movq [edi + 8], mm2  
133  %else  %else
134    movntq [edi], mm1    add SRC, SRC_STRIDE
135    movntq [edi + 8], mm2    add DST, DST_STRIDE
136  %endif  %endif
137    
138    add esi, 16    dec HEIGHT
139    add edi, 16    jg near %%loop64_start_pc
   dec ecx  
   jnz %%loop16  
140    
141    %undef DST
142    %undef DST_STRIDE
143    %undef SRC
144    %undef SRC_STRIDE
145    %undef WIDTH
146    %undef HEIGHT
147    %undef OPT
148    %endmacro
149    
150  %%loop1_start  ;------------------------------------------------------------------------------
151    mov ecx, edx  ; PLANE_FILL ( DST, DST_STRIDE, WIDTH, HEIGHT, OPT )
152    rep movsb  ; DST           dst buffer
153    ; DST_STRIDE    dst stride
154    ; WIDTH         width
155    ; HEIGHT        height
156    ; OPT           0=plain mmx, 1=xmm
157    ;
158    ; Trashes: DST, WIDTH, HEIGHT, _EBX, _ECX, _EDX, _EAX
159    ;------------------------------------------------------------------------------
160    
161    %macro  PLANE_FILL      5
162    %define DST             %1
163    %define DST_STRIDE      %2
164    %define WIDTH           %3
165    %define HEIGHT          %4
166    %define OPT             %5
167    
168      mov _EAX, 0x80808080
169      mov _EBX, WIDTH
170      shr WIDTH, 6               ; $_ESI$ = width / 64
171      and _EBX, 63               ; _EBX = remainder = width % 64
172      movd mm0, eax
173      mov _EDX, _EBX
174      shr _EBX, 4                ; $_EBX$ = remainder / 16
175      and _EDX, 15               ; $_EDX$ = remainder % 16
176      punpckldq mm0, mm0
177    
178    %%loop64_start_pf:
179      push DST
180      mov  _ECX, WIDTH           ; width64
181      test WIDTH, WIDTH
182      jz %%loop16_start_pf
183    
184    %%loop64_pf:
185    
186      _MOVQ OPT, [DST     ], mm0      ; write to y_out
187      _MOVQ OPT, [DST +  8], mm0
188      _MOVQ OPT, [DST + 16], mm0
189      _MOVQ OPT, [DST + 24], mm0
190      _MOVQ OPT, [DST + 32], mm0
191      _MOVQ OPT, [DST + 40], mm0
192      _MOVQ OPT, [DST + 48], mm0
193      _MOVQ OPT, [DST + 56], mm0
194    
195      add DST, 64
196      loop %%loop64_pf
197    
198    %%loop16_start_pf:
199      mov  _ECX, _EBX            ; width16
200      test _EBX, _EBX
201      jz %%loop1_start_pf
202    
203    %%loop16_pf:
204      _MOVQ OPT, [DST    ], mm0
205      _MOVQ OPT, [DST + 8], mm0
206    
207      add DST, 16
208      loop %%loop16_pf
209    
210    %%loop1_start_pf:
211      mov _ECX, _EDX
212      rep stosb
213    
214      pop DST
215    
216    %ifdef ARCH_IS_X86_64
217      mov ecx, DST_STRIDE
218      add DST, _ECX
219    %else
220      add DST, DST_STRIDE
221    %endif
222    
223    add esi, SRC_DIF    dec HEIGHT
224    add edi, DST_DIF    jg near %%loop64_start_pf
225    dec ebp  
226    jnz near %%loop64_start  %undef DST
227    %undef DST_STRIDE
228    %undef WIDTH
229    %undef HEIGHT
230    %undef OPT
231  %endmacro  %endmacro
232    
233  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
# Line 167  Line 243 
243  ;------------------------------------------------------------------------------  ;------------------------------------------------------------------------------
244  %macro  MAKE_YV12_TO_YV12       2  %macro  MAKE_YV12_TO_YV12       2
245  %define NAME            %1  %define NAME            %1
246  %define OPT                     %2  %define XMM_OPT         %2
247  ALIGN 16  ALIGN SECTION_ALIGN
248  cglobal NAME  cglobal NAME
249  NAME:  NAME:
 %define pushsize        16  
 %define localsize       24  
250    
251  %define vflip                   esp + localsize + pushsize + 52    push _EBX     ;       _ESP + localsize + 3*PTR_SIZE
252  %define height                  esp + localsize + pushsize + 48  
253  %define width           esp + localsize + pushsize + 44  %define localsize       2*4
 %define uv_src_stride   esp + localsize + pushsize + 40  
 %define y_src_stride    esp + localsize + pushsize + 36  
 %define v_src                   esp     + localsize + pushsize + 32  
 %define u_src                   esp + localsize + pushsize + 28  
 %define y_src               esp + localsize + pushsize + 24  
 %define uv_dst_stride   esp + localsize + pushsize + 20  
 %define y_dst_stride    esp + localsize + pushsize + 16  
 %define v_dst                   esp     + localsize + pushsize + 12  
 %define u_dst                   esp + localsize + pushsize + 8  
 %define y_dst               esp + localsize + pushsize + 4  
 %define _ip                             esp + localsize + pushsize + 0  
   
   push ebx      ;       esp + localsize + 16  
   push esi      ;       esp + localsize + 8  
   push edi      ;       esp + localsize + 4  
   push ebp      ;       esp + localsize + 0  
   
 %define width2                  esp + localsize - 4  
 %define height2                 esp + localsize - 8  
 %define y_src_dif               esp + localsize - 12  
 %define y_dst_dif               esp + localsize - 16  
 %define uv_src_dif              esp + localsize - 20  
 %define uv_dst_dif              esp + localsize - 24  
254    
255    sub esp, localsize  %ifdef ARCH_IS_X86_64
256    
257    mov eax, [width]  %ifndef WINDOWS
258    mov ebx, [height]  %define pushsize        2*PTR_SIZE
259    %define shadow          0
260    %else
261    %define pushsize        4*PTR_SIZE
262    %define shadow          32 + 2*PTR_SIZE
263    %endif
264    
265    %define prm_vflip               dword [_ESP + localsize + pushsize + shadow + 7*PTR_SIZE]
266    %define prm_height              dword [_ESP + localsize + pushsize + shadow + 6*PTR_SIZE]
267    %define prm_width               dword [_ESP + localsize + pushsize + shadow + 5*PTR_SIZE]
268    %define prm_uv_src_stride       dword [_ESP + localsize + pushsize + shadow + 4*PTR_SIZE]
269    %define prm_y_src_stride        dword [_ESP + localsize + pushsize + shadow + 3*PTR_SIZE]
270    %define prm_v_src                     [_ESP + localsize + pushsize + shadow + 2*PTR_SIZE]
271    %define prm_u_src                     [_ESP + localsize + pushsize + shadow + 1*PTR_SIZE]
272    
273    %ifdef WINDOWS
274      push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
275      push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
276      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
277    
278      sub _ESP, localsize
279    
280    %define prm_y_src               _ESI
281    %define prm_uv_dst_stride       TMP0d
282    %define prm_y_dst_stride        prm4d
283    %define prm_v_dst               prm3
284    %define prm_u_dst               TMP1
285    %define prm_y_dst               _EDI
286    
287      mov _EDI, prm1
288      mov TMP1, prm2
289    
290      mov _ESI, [_ESP + localsize + pushsize + shadow + 0*PTR_SIZE]
291      mov TMP0d, dword [_ESP + localsize + pushsize + shadow - 1*PTR_SIZE]
292    
293    %else
294      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
295    
296      sub _ESP, localsize
297    
298    %define prm_y_src               _ESI
299    %define prm_uv_dst_stride       prm5d
300    %define prm_y_dst_stride        TMP1d
301    %define prm_v_dst               prm6
302    %define prm_u_dst               TMP0
303    %define prm_y_dst               _EDI
304    
305      mov TMP0, prm2
306      mov _ESI, prm6
307    
308      mov prm6, prm3
309      mov TMP1d, prm4d
310    %endif
311    
312    %define _ip             _ESP + localsize + pushsize + 0
313    
314    %else
315    
316    %define pushsize        4*PTR_SIZE
317    
318    %define prm_vflip               [_ESP + localsize + pushsize + 13*PTR_SIZE]
319    %define prm_height              [_ESP + localsize + pushsize + 12*PTR_SIZE]
320    %define prm_width               [_ESP + localsize + pushsize + 11*PTR_SIZE]
321    %define prm_uv_src_stride       [_ESP + localsize + pushsize + 10*PTR_SIZE]
322    %define prm_y_src_stride        [_ESP + localsize + pushsize + 9*PTR_SIZE]
323    %define prm_v_src               [_ESP + localsize + pushsize + 8*PTR_SIZE]
324    %define prm_u_src               [_ESP + localsize + pushsize + 7*PTR_SIZE]
325    
326    %define prm_y_src               _ESI
327    %define prm_uv_dst_stride       [_ESP + localsize + pushsize + 5*PTR_SIZE]
328    %define prm_y_dst_stride        [_ESP + localsize + pushsize + 4*PTR_SIZE]
329    %define prm_v_dst               [_ESP + localsize + pushsize + 3*PTR_SIZE]
330    %define prm_u_dst               [_ESP + localsize + pushsize + 2*PTR_SIZE]
331    %define prm_y_dst               _EDI
332    
333    %define _ip             _ESP + localsize + pushsize + 0
334    
335      push _ESI     ;       _ESP + localsize + 2*PTR_SIZE
336      push _EDI     ;       _ESP + localsize + 1*PTR_SIZE
337      push _EBP     ;       _ESP + localsize + 0*PTR_SIZE
338    
339      sub _ESP, localsize
340    
341      mov _ESI, [_ESP + localsize + pushsize + 6*PTR_SIZE]
342      mov _EDI, [_ESP + localsize + pushsize + 1*PTR_SIZE]
343    
344    %endif
345    
346    %define width2                  dword [_ESP + localsize - 1*4]
347    %define height2                 dword [_ESP + localsize - 2*4]
348    
349      mov eax, prm_width
350      mov ebx, prm_height
351    shr eax, 1                    ; calculate widht/2, heigh/2    shr eax, 1                    ; calculate widht/2, heigh/2
352    shr ebx, 1    shr ebx, 1
353    mov [width2], eax    mov width2, eax
354    mov [height2], ebx    mov height2, ebx
355    
356    mov ebp, [vflip]    mov eax, prm_vflip
357    or ebp, ebp    test eax, eax
358    jz near .dont_flip    jz near .go
359    
360  ; flipping support  ; flipping support
361    mov eax, [height]    mov eax, prm_height
362    mov esi, [y_src]    mov ecx, prm_y_src_stride
363    mov edx, [y_src_stride]    sub eax, 1
364    push edx    imul eax, ecx
365    mul edx    add _ESI, _EAX                ; y_src += (height-1) * y_src_stride
366    pop edx    neg ecx
367    add esi, eax                  ; y_src += (height-1) * y_src_stride    mov prm_y_src_stride, ecx     ; y_src_stride = -y_src_stride
368    neg edx  
369    mov [y_src], esi    mov eax, height2
370    mov [y_src_stride], edx       ; y_src_stride = -y_src_stride    mov _EDX, prm_u_src
371      mov _EBP, prm_v_src
372    mov eax, [height2]    mov ecx, prm_uv_src_stride
373    mov esi, [u_src]    test _EDX, _EDX
374    mov edi, [v_src]    jz .go
375    mov edx, [uv_src_stride]    test _EBP, _EBP
376    sub eax, 1                    ; ebp = height2 - 1    jz .go
377    push edx    sub eax, 1                     ; _EAX = height2 - 1
378    mul edx    imul eax, ecx
379    pop edx    add _EDX, _EAX                 ; u_src += (height2-1) * uv_src_stride
380    add esi, eax                  ; u_src += (height2-1) * uv_src_stride    add _EBP, _EAX                 ; v_src += (height2-1) * uv_src_stride
381    add edi, eax                  ; v_src += (height2-1) * uv_src_stride    neg ecx
382    neg edx    mov prm_u_src, _EDX
383    mov [u_src], esi    mov prm_v_src, _EBP
384    mov [v_src], edi    mov prm_uv_src_stride, ecx     ; uv_src_stride = -uv_src_stride
385    mov [uv_src_stride], edx      ; uv_src_stride = -uv_src_stride  
386    .go:
387  .dont_flip    mov eax, prm_width
388      mov ebp, prm_height
389    mov eax, [y_src_stride]    PLANE_COPY _EDI, prm_y_dst_stride,  _ESI, prm_y_src_stride,  _EAX,  _EBP, XMM_OPT
390    mov ebx, [y_dst_stride]  
391    mov ecx, [uv_src_stride]    mov _EAX, prm_u_src
392    mov edx, [uv_dst_stride]    or  _EAX, prm_v_src
393    sub eax, [width]    jz near .UVFill_0x80
394    sub ebx, [width]  
395    sub ecx, [width2]    mov eax, width2
396    sub edx, [width2]    mov ebp, height2
397    mov [y_src_dif], eax      ; y_src_dif = y_src_stride - width    mov _ESI, prm_u_src
398    mov [y_dst_dif], ebx      ; y_dst_dif = y_dst_stride - width    mov _EDI, prm_u_dst
399    mov [uv_src_dif], ecx     ; uv_src_dif = uv_src_stride - width2    PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
400    mov [uv_dst_dif], edx     ; uv_dst_dif = uv_dst_stride - width2  
401      mov eax, width2
402    PLANE_COPY [y_dst], [y_dst_dif],  [y_src], [y_src_dif],  [width],  [height], OPT    mov ebp, height2
403    PLANE_COPY [u_dst], [uv_dst_dif], [u_src], [uv_src_dif], [width2], [height2], OPT    mov _ESI, prm_v_src
404    PLANE_COPY [v_dst], [uv_dst_dif], [v_src], [uv_src_dif], [width2], [height2], OPT    mov _EDI, prm_v_dst
405      PLANE_COPY _EDI, prm_uv_dst_stride, _ESI, prm_uv_src_stride, _EAX, _EBP, XMM_OPT
406    add esp, localsize  
407    pop ebp  .Done_UVPlane:
408    pop edi    add _ESP, localsize
409    pop esi  
410    pop ebx    pop _EBP
411    %ifndef ARCH_IS_X86_64
412      pop _EDI
413      pop _ESI
414    %else
415    %ifdef WINDOWS
416      pop _EDI
417      pop _ESI
418    %endif
419    %endif
420      pop _EBX
421    
422    ret    ret
423  .endfunc  
424    .UVFill_0x80:
425    
426      mov esi, width2
427      mov ebp, height2
428      mov _EDI, prm_u_dst
429      PLANE_FILL _EDI, prm_uv_dst_stride, _ESI, _EBP, XMM_OPT
430    
431      mov esi, width2
432      mov ebp, height2
433      mov _EDI, prm_v_dst
434      PLANE_FILL _EDI, prm_uv_dst_stride, _ESI, _EBP, XMM_OPT
435    
436      jmp near .Done_UVPlane
437    
438    ENDFUNC
439    
440    %undef NAME
441    %undef XMM_OPT
442  %endmacro  %endmacro
443    
444  ;=============================================================================  ;=============================================================================
445  ; Code  ; Code
446  ;=============================================================================  ;=============================================================================
447    
448  SECTION .text  TEXT
449    
450  MAKE_YV12_TO_YV12       yv12_to_yv12_mmx, 0  MAKE_YV12_TO_YV12       yv12_to_yv12_mmx, 0
451    
452  MAKE_YV12_TO_YV12       yv12_to_yv12_xmm, 1  MAKE_YV12_TO_YV12       yv12_to_yv12_xmm, 1
453    
454    %ifidn __OUTPUT_FORMAT__,elf
455    section ".note.GNU-stack" noalloc noexec nowrite progbits
456    %endif
457    

Legend:
Removed from v.1540  
changed lines
  Added in v.1844

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4