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 |