| OLD | NEW |
| 1 ; | 1 ; |
| 2 ; jsimdext.inc - common declarations | 2 ; jsimdext.inc - common declarations |
| 3 ; | 3 ; |
| 4 ; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB | 4 ; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB |
| 5 ; Copyright 2010 D. R. Commander | 5 ; Copyright 2010 D. R. Commander |
| 6 ; | 6 ; |
| 7 ; Based on | 7 ; Based on |
| 8 ; x86 SIMD extension for IJG JPEG library - version 1.02 | 8 ; x86 SIMD extension for IJG JPEG library - version 1.02 |
| 9 ; | 9 ; |
| 10 ; Copyright (C) 1999-2006, MIYASAKA Masaru. | 10 ; Copyright (C) 1999-2006, MIYASAKA Masaru. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 ; appreciated but is not required. | 23 ; appreciated but is not required. |
| 24 ; 2. Altered source versions must be plainly marked as such, and must not be | 24 ; 2. Altered source versions must be plainly marked as such, and must not be |
| 25 ; misrepresented as being the original software. | 25 ; misrepresented as being the original software. |
| 26 ; 3. This notice may not be removed or altered from any source distribution. | 26 ; 3. This notice may not be removed or altered from any source distribution. |
| 27 ; | 27 ; |
| 28 ; [TAB8] | 28 ; [TAB8] |
| 29 | 29 |
| 30 ; ========================================================================== | 30 ; ========================================================================== |
| 31 ; System-dependent configurations | 31 ; System-dependent configurations |
| 32 | 32 |
| 33 %ifdef WIN32» ; ----(nasm -fwin32 -DWIN32 ...)-------- | 33 %ifdef WIN32 ; ----(nasm -fwin32 -DWIN32 ...)-------- |
| 34 ; * Microsoft Visual C++ | 34 ; * Microsoft Visual C++ |
| 35 ; * MinGW (Minimalist GNU for Windows) | 35 ; * MinGW (Minimalist GNU for Windows) |
| 36 ; * CygWin | 36 ; * CygWin |
| 37 ; * LCC-Win32 | 37 ; * LCC-Win32 |
| 38 | 38 |
| 39 ; -- segment definition -- | 39 ; -- segment definition -- |
| 40 ; | 40 ; |
| 41 %ifdef __YASM_VER__ | 41 %ifdef __YASM_VER__ |
| 42 %define SEG_TEXT .text align=16 | 42 %define SEG_TEXT .text align=16 |
| 43 %define SEG_CONST .rdata align=16 | 43 %define SEG_CONST .rdata align=16 |
| 44 %else | 44 %else |
| 45 %define SEG_TEXT .text align=16 public use32 class=CODE | 45 %define SEG_TEXT .text align=16 public use32 class=CODE |
| 46 %define SEG_CONST .rdata align=16 public use32 class=CONST | 46 %define SEG_CONST .rdata align=16 public use32 class=CONST |
| 47 %endif | 47 %endif |
| 48 | 48 |
| 49 %elifdef WIN64» ; ----(nasm -fwin64 -DWIN64 ...)-------- | 49 %elifdef WIN64 ; ----(nasm -fwin64 -DWIN64 ...)-------- |
| 50 ; * Microsoft Visual C++ | 50 ; * Microsoft Visual C++ |
| 51 | 51 |
| 52 ; -- segment definition -- | 52 ; -- segment definition -- |
| 53 ; | 53 ; |
| 54 %ifdef __YASM_VER__ | 54 %ifdef __YASM_VER__ |
| 55 %define SEG_TEXT .text align=16 | 55 %define SEG_TEXT .text align=16 |
| 56 %define SEG_CONST .rdata align=16 | 56 %define SEG_CONST .rdata align=16 |
| 57 %else | 57 %else |
| 58 %define SEG_TEXT .text align=16 public use64 class=CODE | 58 %define SEG_TEXT .text align=16 public use64 class=CODE |
| 59 %define SEG_CONST .rdata align=16 public use64 class=CONST | 59 %define SEG_CONST .rdata align=16 public use64 class=CONST |
| 60 %endif | 60 %endif |
| 61 %define EXTN(name) name» » » ; foo() -> foo | 61 %define EXTN(name) name ; foo() -> foo |
| 62 | 62 |
| 63 %elifdef OBJ32» ; ----(nasm -fobj -DOBJ32 ...)---------- | 63 %elifdef OBJ32 ; ----(nasm -fobj -DOBJ32 ...)---------- |
| 64 ; * Borland C++ (Win32) | 64 ; * Borland C++ (Win32) |
| 65 | 65 |
| 66 ; -- segment definition -- | 66 ; -- segment definition -- |
| 67 ; | 67 ; |
| 68 %define SEG_TEXT .text align=16 public use32 class=CODE | 68 %define SEG_TEXT _text align=16 public use32 class=CODE |
| 69 %define SEG_CONST .data align=16 public use32 class=DATA | 69 %define SEG_CONST _data align=16 public use32 class=DATA |
| 70 | 70 |
| 71 %elifdef ELF» ; ----(nasm -felf[64] -DELF ...)------------ | 71 %elifdef ELF ; ----(nasm -felf[64] -DELF ...)------------ |
| 72 ; * Linux | 72 ; * Linux |
| 73 ; * *BSD family Unix using elf format | 73 ; * *BSD family Unix using elf format |
| 74 ; * Unix System V, including Solaris x86, UnixWare and SCO Unix | 74 ; * Unix System V, including Solaris x86, UnixWare and SCO Unix |
| 75 | 75 |
| 76 ; PIC is the default on Linux | |
| 77 %define PIC | |
| 78 | |
| 79 ; mark stack as non-executable | 76 ; mark stack as non-executable |
| 80 section .note.GNU-stack noalloc noexec nowrite progbits | 77 section .note.GNU-stack noalloc noexec nowrite progbits |
| 81 | 78 |
| 82 ; -- segment definition -- | 79 ; -- segment definition -- |
| 83 ; | 80 ; |
| 84 %ifdef __x86_64__ | 81 %ifdef __x86_64__ |
| 85 %define SEG_TEXT .text progbits align=16 | 82 %define SEG_TEXT .text progbits align=16 |
| 86 %define SEG_CONST .rodata progbits align=16 | 83 %define SEG_CONST .rodata progbits align=16 |
| 87 %else | 84 %else |
| 88 %define SEG_TEXT .text progbits alloc exec nowrite align=16 | 85 %define SEG_TEXT .text progbits alloc exec nowrite align=16 |
| 89 %define SEG_CONST .rodata progbits alloc noexec nowrite align=16 | 86 %define SEG_CONST .rodata progbits alloc noexec nowrite align=16 |
| 90 %endif | 87 %endif |
| 91 | 88 |
| 92 ; To make the code position-independent, append -DPIC to the commandline | 89 ; To make the code position-independent, append -DPIC to the commandline |
| 93 ; | 90 ; |
| 94 %define GOT_SYMBOL _GLOBAL_OFFSET_TABLE_» ; ELF supports PIC | 91 %define GOT_SYMBOL _GLOBAL_OFFSET_TABLE_ ; ELF supports PIC |
| 95 %define EXTN(name) name» » » ; foo() -> foo | 92 %define EXTN(name) name ; foo() -> foo |
| 96 | 93 |
| 97 %elifdef AOUT» ; ----(nasm -faoutb/aout -DAOUT ...)---- | 94 %elifdef AOUT ; ----(nasm -faoutb/aout -DAOUT ...)---- |
| 98 ; * Older Linux using a.out format (nasm -f aout -DAOUT ...) | 95 ; * Older Linux using a.out format (nasm -f aout -DAOUT ...) |
| 99 ; * *BSD family Unix using a.out format (nasm -f aoutb -DAOUT ...) | 96 ; * *BSD family Unix using a.out format (nasm -f aoutb -DAOUT ...) |
| 100 | 97 |
| 101 ; -- segment definition -- | 98 ; -- segment definition -- |
| 102 ; | 99 ; |
| 103 %define SEG_TEXT .text | 100 %define SEG_TEXT .text |
| 104 %define SEG_CONST .data | 101 %define SEG_CONST .data |
| 105 | 102 |
| 106 ; To make the code position-independent, append -DPIC to the commandline | 103 ; To make the code position-independent, append -DPIC to the commandline |
| 107 ; | 104 ; |
| 108 %define GOT_SYMBOL __GLOBAL_OFFSET_TABLE_» ; BSD-style a.out supports PIC | 105 %define GOT_SYMBOL __GLOBAL_OFFSET_TABLE_ ; BSD-style a.out supports PIC |
| 109 | 106 |
| 110 %elifdef MACHO» ; ----(nasm -fmacho -DMACHO ...)-------- | 107 %elifdef MACHO ; ----(nasm -fmacho -DMACHO ...)-------- |
| 111 ; * NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (Mach-O format) | 108 ; * NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (Mach-O format) |
| 112 | 109 |
| 113 ; -- segment definition -- | 110 ; -- segment definition -- |
| 114 ; | 111 ; |
| 115 %define SEG_TEXT .text ;align=16» ; nasm doesn't accept align=16. why? | 112 %define SEG_TEXT .text ;align=16 ; nasm doesn't accept align=16. why? |
| 116 %define SEG_CONST .rodata align=16 | 113 %define SEG_CONST .rodata align=16 |
| 117 | 114 |
| 118 ; The generation of position-independent code (PIC) is the default on Darwin. | 115 ; The generation of position-independent code (PIC) is the default on Darwin. |
| 119 ; | 116 ; |
| 120 %define PIC | 117 %define PIC |
| 121 %define GOT_SYMBOL _MACHO_PIC_»» ; Mach-O style code-relative addressing | 118 %define GOT_SYMBOL _MACHO_PIC_ ; Mach-O style code-relative addressing |
| 122 | 119 |
| 123 %else» » ; ----(Other case)---------------------- | 120 %else ; ----(Other case)---------------------- |
| 124 | 121 |
| 125 ; -- segment definition -- | 122 ; -- segment definition -- |
| 126 ; | 123 ; |
| 127 %define SEG_TEXT .text | 124 %define SEG_TEXT .text |
| 128 %define SEG_CONST .data | 125 %define SEG_CONST .data |
| 129 | 126 |
| 130 %endif» ; ---------------------------------------------- | 127 %endif ; ---------------------------------------------- |
| 131 | 128 |
| 132 ; ========================================================================== | 129 ; ========================================================================== |
| 133 | 130 |
| 134 ; -------------------------------------------------------------------------- | 131 ; -------------------------------------------------------------------------- |
| 135 ; Common types | 132 ; Common types |
| 136 ; | 133 ; |
| 137 %ifdef __x86_64__ | 134 %ifdef __x86_64__ |
| 138 %define POINTER qword ; general pointer type | 135 %define POINTER qword ; general pointer type |
| 139 %define SIZEOF_POINTER SIZEOF_QWORD ; sizeof(POINTER) | 136 %define SIZEOF_POINTER SIZEOF_QWORD ; sizeof(POINTER) |
| 140 %define POINTER_BIT QWORD_BIT ; sizeof(POINTER)*BYTE_BIT | 137 %define POINTER_BIT QWORD_BIT ; sizeof(POINTER)*BYTE_BIT |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 %define BYTE_BIT 8 ; CHAR_BIT in C | 172 %define BYTE_BIT 8 ; CHAR_BIT in C |
| 176 %define WORD_BIT 16 ; sizeof(WORD)*BYTE_BIT | 173 %define WORD_BIT 16 ; sizeof(WORD)*BYTE_BIT |
| 177 %define DWORD_BIT 32 ; sizeof(DWORD)*BYTE_BIT | 174 %define DWORD_BIT 32 ; sizeof(DWORD)*BYTE_BIT |
| 178 %define QWORD_BIT 64 ; sizeof(QWORD)*BYTE_BIT | 175 %define QWORD_BIT 64 ; sizeof(QWORD)*BYTE_BIT |
| 179 %define OWORD_BIT 128 ; sizeof(OWORD)*BYTE_BIT | 176 %define OWORD_BIT 128 ; sizeof(OWORD)*BYTE_BIT |
| 180 | 177 |
| 181 ; -------------------------------------------------------------------------- | 178 ; -------------------------------------------------------------------------- |
| 182 ; External Symbol Name | 179 ; External Symbol Name |
| 183 ; | 180 ; |
| 184 %ifndef EXTN | 181 %ifndef EXTN |
| 185 %define EXTN(name) _ %+ name» » ; foo() -> _foo | 182 %define EXTN(name) _ %+ name ; foo() -> _foo |
| 186 %endif | 183 %endif |
| 187 | 184 |
| 188 ; -------------------------------------------------------------------------- | 185 ; -------------------------------------------------------------------------- |
| 189 ; Macros for position-independent code (PIC) support | 186 ; Macros for position-independent code (PIC) support |
| 190 ; | 187 ; |
| 191 %ifndef GOT_SYMBOL | 188 %ifndef GOT_SYMBOL |
| 192 %undef PIC | 189 %undef PIC |
| 193 %endif | 190 %endif |
| 194 | 191 |
| 195 %ifdef PIC ; ------------------------------------------- | 192 %ifdef PIC ; ------------------------------------------- |
| 196 | 193 |
| 197 %ifidn GOT_SYMBOL,_MACHO_PIC_ ; -------------------- | 194 %ifidn GOT_SYMBOL,_MACHO_PIC_ ; -------------------- |
| 198 | 195 |
| 199 ; At present, nasm doesn't seem to support PIC generation for Mach-O. | 196 ; At present, nasm doesn't seem to support PIC generation for Mach-O. |
| 200 ; The PIC support code below is a little tricky. | 197 ; The PIC support code below is a little tricky. |
| 201 | 198 |
| 202 » SECTION»SEG_CONST | 199 SECTION SEG_CONST |
| 203 const_base: | 200 const_base: |
| 204 | 201 |
| 205 %define GOTOFF(got,sym) (got) + (sym) - const_base | 202 %define GOTOFF(got,sym) (got) + (sym) - const_base |
| 206 | 203 |
| 207 %imacro get_GOT»1 | 204 %imacro get_GOT 1 |
| 208 » ; NOTE: this macro destroys ecx resister. | 205 ; NOTE: this macro destroys ecx resister. |
| 209 » call» %%geteip | 206 call %%geteip |
| 210 » add» ecx, byte (%%ref - $) | 207 add ecx, byte (%%ref - $) |
| 211 » jmp» short %%adjust | 208 jmp short %%adjust |
| 212 %%geteip: | 209 %%geteip: |
| 213 » mov» ecx, POINTER [esp] | 210 mov ecx, POINTER [esp] |
| 214 » ret | 211 ret |
| 215 %%adjust: | 212 %%adjust: |
| 216 » push» ebp | 213 push ebp |
| 217 » xor» ebp,ebp»» ; ebp = 0 | 214 xor ebp,ebp ; ebp = 0 |
| 218 %ifidni %1,ebx» ; (%1 == ebx) | 215 %ifidni %1,ebx ; (%1 == ebx) |
| 219 » ; db 0x8D,0x9C + jmp near const_base = | 216 ; db 0x8D,0x9C + jmp near const_base = |
| 220 » ; lea ebx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,9C,E9,(offset32) | 217 ; lea ebx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,9C,E9,(offset32) |
| 221 » db» 0x8D,0x9C» » ; 8D,9C | 218 db 0x8D,0x9C ; 8D,9C |
| 222 » jmp» near const_base»» ; E9,(const_base-%%ref) | 219 jmp near const_base ; E9,(const_base-%%ref) |
| 223 %%ref: | 220 %%ref: |
| 224 %else ; (%1 != ebx) | 221 %else ; (%1 != ebx) |
| 225 » ; db 0x8D,0x8C + jmp near const_base = | 222 ; db 0x8D,0x8C + jmp near const_base = |
| 226 » ; lea ecx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,8C,E9,(offset32) | 223 ; lea ecx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,8C,E9,(offset32) |
| 227 » db» 0x8D,0x8C» » ; 8D,8C | 224 db 0x8D,0x8C ; 8D,8C |
| 228 » jmp» near const_base»» ; E9,(const_base-%%ref) | 225 jmp near const_base ; E9,(const_base-%%ref) |
| 229 %%ref:» mov» %1, ecx | 226 %%ref: mov %1, ecx |
| 230 %endif ; (%1 == ebx) | 227 %endif ; (%1 == ebx) |
| 231 » pop» ebp | 228 pop ebp |
| 232 %endmacro | 229 %endmacro |
| 233 | 230 |
| 234 %else» ; GOT_SYMBOL != _MACHO_PIC_ ---------------- | 231 %else ; GOT_SYMBOL != _MACHO_PIC_ ---------------- |
| 235 | 232 |
| 236 %define GOTOFF(got,sym) (got) + (sym) wrt ..gotoff | 233 %define GOTOFF(got,sym) (got) + (sym) wrt ..gotoff |
| 237 | 234 |
| 238 %imacro get_GOT»1 | 235 %imacro get_GOT 1 |
| 239 » extern» GOT_SYMBOL | 236 extern GOT_SYMBOL |
| 240 » call» %%geteip | 237 call %%geteip |
| 241 » add» %1, GOT_SYMBOL + $$ - $ wrt ..gotpc | 238 add %1, GOT_SYMBOL + $$ - $ wrt ..gotpc |
| 242 » jmp» short %%done | 239 jmp short %%done |
| 243 %%geteip: | 240 %%geteip: |
| 244 » mov» %1, POINTER [esp] | 241 mov %1, POINTER [esp] |
| 245 » ret | 242 ret |
| 246 %%done: | 243 %%done: |
| 247 %endmacro | 244 %endmacro |
| 248 | 245 |
| 249 %endif» ; GOT_SYMBOL == _MACHO_PIC_ ---------------- | 246 %endif ; GOT_SYMBOL == _MACHO_PIC_ ---------------- |
| 250 | 247 |
| 251 %imacro pushpic»1.nolist | 248 %imacro pushpic 1.nolist |
| 252 » push» %1 | 249 push %1 |
| 253 %endmacro | 250 %endmacro |
| 254 %imacro poppic» 1.nolist | 251 %imacro poppic 1.nolist |
| 255 » pop» %1 | 252 pop %1 |
| 256 %endmacro | 253 %endmacro |
| 257 %imacro movpic» 2.nolist | 254 %imacro movpic 2.nolist |
| 258 » mov» %1,%2 | 255 mov %1,%2 |
| 259 %endmacro | 256 %endmacro |
| 260 | 257 |
| 261 %else» ; !PIC ----------------------------------------- | 258 %else ; !PIC ----------------------------------------- |
| 262 | 259 |
| 263 %define GOTOFF(got,sym) (sym) | 260 %define GOTOFF(got,sym) (sym) |
| 264 | 261 |
| 265 %imacro get_GOT»1.nolist | 262 %imacro get_GOT 1.nolist |
| 266 %endmacro | 263 %endmacro |
| 267 %imacro pushpic»1.nolist | 264 %imacro pushpic 1.nolist |
| 268 %endmacro | 265 %endmacro |
| 269 %imacro poppic» 1.nolist | 266 %imacro poppic 1.nolist |
| 270 %endmacro | 267 %endmacro |
| 271 %imacro movpic» 2.nolist | 268 %imacro movpic 2.nolist |
| 272 %endmacro | 269 %endmacro |
| 273 | 270 |
| 274 %endif» ; PIC ----------------------------------------- | 271 %endif ; PIC ----------------------------------------- |
| 275 | 272 |
| 276 ; -------------------------------------------------------------------------- | 273 ; -------------------------------------------------------------------------- |
| 277 ; Align the next instruction on {2,4,8,16,..}-byte boundary. | 274 ; Align the next instruction on {2,4,8,16,..}-byte boundary. |
| 278 ; ".balign n,,m" in GNU as | 275 ; ".balign n,,m" in GNU as |
| 279 ; | 276 ; |
| 280 %define MSKLE(x,y) (~(((y) & 0xFFFF) - ((x) & 0xFFFF)) >> 16) | 277 %define MSKLE(x,y) (~(((y) & 0xFFFF) - ((x) & 0xFFFF)) >> 16) |
| 281 %define FILLB(b,n) (($$-(b)) & ((n)-1)) | 278 %define FILLB(b,n) (($$-(b)) & ((n)-1)) |
| 282 | 279 |
| 283 %imacro alignx 1-2.nolist 0xFFFF | 280 %imacro alignx 1-2.nolist 0xFFFF |
| 284 %%bs:» times MSKLE(FILLB(%%bs,%1),%2) & MSKLE(16,FILLB($,%1)) & FILLB($,%1) \ | 281 %%bs: times MSKLE(FILLB(%%bs,%1),%2) & MSKLE(16,FILLB($,%1)) & FILLB($,%1) \ |
| 285 » db 0x90 ; nop | 282 db 0x90 ; nop |
| 286 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/9 \ | 283 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/9 \ |
| 287 » db 0x8D,0x9C,0x23,0x00,0x00,0x00,0x00 ; lea ebx,[ebx+0x00000000] | 284 db 0x8D,0x9C,0x23,0x00,0x00,0x00,0x00 ; lea ebx,[ebx+0x00000000] |
| 288 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/7 \ | 285 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/7 \ |
| 289 » db 0x8D,0xAC,0x25,0x00,0x00,0x00,0x00 ; lea ebp,[ebp+0x00000000] | 286 db 0x8D,0xAC,0x25,0x00,0x00,0x00,0x00 ; lea ebp,[ebp+0x00000000] |
| 290 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/6 \ | 287 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/6 \ |
| 291 » db 0x8D,0xAD,0x00,0x00,0x00,0x00 ; lea ebp,[ebp+0x00000000] | 288 db 0x8D,0xAD,0x00,0x00,0x00,0x00 ; lea ebp,[ebp+0x00000000] |
| 292 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/4 \ | 289 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/4 \ |
| 293 » db 0x8D,0x6C,0x25,0x00 ; lea ebp,[ebp+0x00] | 290 db 0x8D,0x6C,0x25,0x00 ; lea ebp,[ebp+0x00] |
| 294 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/3 \ | 291 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/3 \ |
| 295 » db 0x8D,0x6D,0x00 ; lea ebp,[ebp+0x00] | 292 db 0x8D,0x6D,0x00 ; lea ebp,[ebp+0x00] |
| 296 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/2 \ | 293 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/2 \ |
| 297 » db 0x8B,0xED ; mov ebp,ebp | 294 db 0x8B,0xED ; mov ebp,ebp |
| 298 » times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/1 \ | 295 times MSKLE(FILLB(%%bs,%1),%2) & FILLB($,%1)/1 \ |
| 299 » db 0x90 ; nop | 296 db 0x90 ; nop |
| 300 %endmacro | 297 %endmacro |
| 301 | 298 |
| 302 ; Align the next data on {2,4,8,16,..}-byte boundary. | 299 ; Align the next data on {2,4,8,16,..}-byte boundary. |
| 303 ; | 300 ; |
| 304 %imacro alignz 1.nolist | 301 %imacro alignz 1.nolist |
| 305 » align %1, db 0» » ; filling zeros | 302 align %1, db 0 ; filling zeros |
| 306 %endmacro | 303 %endmacro |
| 307 | 304 |
| 308 %ifdef __x86_64__ | 305 %ifdef __x86_64__ |
| 309 | 306 |
| 310 %ifdef WIN64 | 307 %ifdef WIN64 |
| 311 | 308 |
| 312 %imacro collect_args 0 | 309 %imacro collect_args 0 |
| 313 » push r12 | 310 push r12 |
| 314 » push r13 | 311 push r13 |
| 315 » push r14 | 312 push r14 |
| 316 » push r15 | 313 push r15 |
| 317 » mov r10, rcx | 314 mov r10, rcx |
| 318 » mov r11, rdx | 315 mov r11, rdx |
| 319 » mov r12, r8 | 316 mov r12, r8 |
| 320 » mov r13, r9 | 317 mov r13, r9 |
| 321 » mov r14, [rax+48] | 318 mov r14, [rax+48] |
| 322 » mov r15, [rax+56] | 319 mov r15, [rax+56] |
| 323 » push rsi | 320 push rsi |
| 324 » push rdi | 321 push rdi |
| 325 » sub rsp, SIZEOF_XMMWORD | 322 sub rsp, SIZEOF_XMMWORD |
| 326 » movaps XMMWORD [rsp], xmm6 | 323 movaps XMMWORD [rsp], xmm6 |
| 327 » sub rsp, SIZEOF_XMMWORD | 324 sub rsp, SIZEOF_XMMWORD |
| 328 » movaps XMMWORD [rsp], xmm7 | 325 movaps XMMWORD [rsp], xmm7 |
| 329 %endmacro | 326 %endmacro |
| 330 | 327 |
| 331 %imacro uncollect_args 0 | 328 %imacro uncollect_args 0 |
| 332 » movaps xmm7, XMMWORD [rsp] | 329 movaps xmm7, XMMWORD [rsp] |
| 333 » add rsp, SIZEOF_XMMWORD | 330 add rsp, SIZEOF_XMMWORD |
| 334 » movaps xmm6, XMMWORD [rsp] | 331 movaps xmm6, XMMWORD [rsp] |
| 335 » add rsp, SIZEOF_XMMWORD | 332 add rsp, SIZEOF_XMMWORD |
| 336 » pop rdi | 333 pop rdi |
| 337 » pop rsi | 334 pop rsi |
| 338 » pop r15 | 335 pop r15 |
| 339 » pop r14 | 336 pop r14 |
| 340 » pop r13 | 337 pop r13 |
| 341 » pop r12 | 338 pop r12 |
| 342 %endmacro | 339 %endmacro |
| 343 | 340 |
| 344 %else | 341 %else |
| 345 | 342 |
| 346 %imacro collect_args 0 | 343 %imacro collect_args 0 |
| 347 » push r10 | 344 push r10 |
| 348 » push r11 | 345 push r11 |
| 349 » push r12 | 346 push r12 |
| 350 » push r13 | 347 push r13 |
| 351 » push r14 | 348 push r14 |
| 352 » push r15 | 349 push r15 |
| 353 » mov r10, rdi | 350 mov r10, rdi |
| 354 » mov r11, rsi | 351 mov r11, rsi |
| 355 » mov r12, rdx | 352 mov r12, rdx |
| 356 » mov r13, rcx | 353 mov r13, rcx |
| 357 » mov r14, r8 | 354 mov r14, r8 |
| 358 » mov r15, r9 | 355 mov r15, r9 |
| 359 %endmacro | 356 %endmacro |
| 360 | 357 |
| 361 %imacro uncollect_args 0 | 358 %imacro uncollect_args 0 |
| 362 » pop r15 | 359 pop r15 |
| 363 » pop r14 | 360 pop r14 |
| 364 » pop r13 | 361 pop r13 |
| 365 » pop r12 | 362 pop r12 |
| 366 » pop r11 | 363 pop r11 |
| 367 » pop r10 | 364 pop r10 |
| 368 %endmacro | 365 %endmacro |
| 369 | 366 |
| 370 %endif | 367 %endif |
| 371 | 368 |
| 372 %endif | 369 %endif |
| 373 | 370 |
| 374 ; -------------------------------------------------------------------------- | 371 ; -------------------------------------------------------------------------- |
| 375 ; Defines picked up from the C headers | 372 ; Defines picked up from the C headers |
| 376 ; | 373 ; |
| 377 %include "jsimdcfg.inc" | 374 %include "jsimdcfg.inc" |
| 378 | 375 |
| 379 ; Begin chromium edits | |
| 380 %ifdef MACHO ; ----(nasm -fmacho -DMACHO ...)-------- | |
| 381 %define PRIVATE :private_extern | |
| 382 %elifdef ELF ; ----(nasm -felf[64] -DELF ...)------------ | |
| 383 %define PRIVATE :hidden | |
| 384 %else | |
| 385 %define PRIVATE | |
| 386 %endif | |
| 387 ; End chromium edits | |
| 388 | |
| 389 ; -------------------------------------------------------------------------- | 376 ; -------------------------------------------------------------------------- |
| OLD | NEW |