;/**************************************************************************** ; * ; * XVID MPEG-4 VIDEO CODEC ; * - NASM common header - ; * ; * Copyright (C) 2008 Michael Militzer ; * ; * This program is free software ; you can redistribute it and/or modify ; * it under the terms of the GNU General Public License as published by ; * the Free Software Foundation ; either version 2 of the License, or ; * (at your option) any later version. ; * ; * This program is distributed in the hope that it will be useful, ; * but WITHOUT ANY WARRANTY ; without even the implied warranty of ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; * GNU General Public License for more details. ; * ; * You should have received a copy of the GNU General Public License ; * along with this program ; if not, write to the Free Software ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; * ; * $Id: nasm.inc,v 1.7.2.2 2011/02/25 12:40:25 Isibaar Exp $ ; * ; ***************************************************************************/ %ifdef ARCH_IS_X86_64 BITS 64 DEFAULT REL %define SECTION_ALIGN 32 %ifdef WINDOWS %define prm1 rcx %define prm2 rdx %define prm3 r8 %define prm4 r9 %define prm5 [rsp+40] %define prm6 [rsp+48] %define prm7 [rsp+56] %define prm8 [rsp+64] %define prm1d ecx %define prm2d edx %define prm3d r8d %define prm4d r9d %define prm5d dword prm5 %define prm6d dword prm6 %define prm7d dword prm7 %define prm8d dword prm8 %macro PUSH_XMM6_XMM7 0 movdqa [_ESP+PTR_SIZE], xmm6 movdqa [_ESP+PTR_SIZE+16], xmm7 %endmacro %macro POP_XMM6_XMM7 0 movdqa xmm6, [_ESP+PTR_SIZE] movdqa xmm7, [_ESP+PTR_SIZE+16] %endmacro %else ; Linux %define prm1 rdi %define prm2 rsi %define prm3 rdx %define prm4 rcx %define prm5 r8 %define prm6 r9 %define prm7 [rsp+8] %define prm8 [rsp+16] %define prm1d edi %define prm2d esi %define prm3d edx %define prm4d ecx %define prm5d r8d %define prm6d r9d %define prm7d dword prm7 %define prm8d dword prm8 %define PUSH_XMM6_XMM7 %define POP_XMM6_XMM7 %endif %define _EAX rax %define _EBX rbx %define _ECX rcx %define _EDX rdx %define _ESI rsi %define _EDI rdi %define _EBP rbp %define _ESP rsp %define TMP0 r10 %define TMP1 r11 %define TMP0d r10d %define TMP1d r11d %define PTR_SIZE 8 %define PTR_TYPE qword %ifdef __YASM_VERSION_ID__ %define XVID_MOVSXD movsxd %else %define XVID_MOVSXD movsx %endif %else %define SECTION_ALIGN 16 BITS 32 %define prm1 [esp + 4] %define prm2 [esp + 8] %define prm3 [esp + 12] %define prm4 [esp + 16] %define prm5 [esp + 20] %define prm6 [esp + 24] %define prm7 [esp + 28] %define prm8 [esp + 32] %define prm1d dword prm1 %define prm2d dword prm2 %define prm3d dword prm3 %define prm4d dword prm4 %define prm5d dword prm5 %define prm6d dword prm6 %define prm7d dword prm7 %define prm8d dword prm8 %define _EAX eax %define _EBX ebx %define _ECX ecx %define _EDX edx %define _ESI esi %define _EDI edi %define _EBP ebp %define _ESP esp %define TMP0 ecx %define TMP1 edx %define TMP0d ecx %define TMP1d edx %define PTR_SIZE 4 %define PTR_TYPE dword %define PUSH_XMM6_XMM7 %define POP_XMM6_XMM7 %define XVID_MOVSXD movsx %endif %ifdef WINDOWS %define PREFIX %endif %ifdef NO_PREFIX %undef PREFIX %endif %macro DATA 0 %ifdef FORMAT_COFF SECTION .rodata %else SECTION .rodata align=SECTION_ALIGN %endif %endmacro %macro TEXT 0 %ifidn __OUTPUT_FORMAT__,macho32 SECTION .text align=SECTION_ALIGN %else %ifidn __OUTPUT_FORMAT__,macho64 SECTION .text align=SECTION_ALIGN %else SECTION .rotext align=SECTION_ALIGN %endif %endif %endmacro %macro cglobal 1 %ifdef PREFIX %ifdef MARK_FUNCS global _%1:function %1.endfunc-%1 %define %1 _%1:function %1.endfunc-%1 %define ENDFUNC .endfunc: %else global _%1 %define %1 _%1 %define ENDFUNC %endif %else %ifdef MARK_FUNCS global %1:function %1.endfunc-%1 %define ENDFUNC .endfunc: %else global %1 %define ENDFUNC %endif %endif %endmacro %macro NON_EXEC_STACK 0 %ifidn __OUTPUT_FORMAT__,elf section .note.GNU-stack noalloc noexec nowrite progbits %endif %ifidn __OUTPUT_FORMAT__,elf32 section .note.GNU-stack noalloc noexec nowrite progbits %endif %ifidn __OUTPUT_FORMAT__,elf64 section .note.GNU-stack noalloc noexec nowrite progbits %endif %endmacro