comparison dyncall/dyncall_call_x86.S @ 165:572aff021627

- file name/layout cleanup, removed "-att" from x64 .S filenames, as unnecessary and also misleading - some "I'm bored"-whitespace-cleanup
author cslag
date Thu, 05 Jan 2017 10:35:12 +0100
parents 3e629dc19168
children d5705f226298
comparison
equal deleted inserted replaced
164:2d330a60c44f 165:572aff021627
33 C Interface: 33 C Interface:
34 dcCall_x86_XXX(void* target, void* args, size_t size); 34 dcCall_x86_XXX(void* target, void* args, size_t size);
35 ddCall_x86_sys_XXX(int_ptr target, void* args, size_t size); 35 ddCall_x86_sys_XXX(int_ptr target, void* args, size_t size);
36 36
37 Where XXX is one of calling-conventions, 37 Where XXX is one of calling-conventions,
38 cdecl, win32_msthis, win32_std, win32_fastcall. 38 cdecl, win32_msthis, win32_std, win32_fastcall.
39 39
40 Parameter Stack layout: 40 Parameter Stack layout:
41 size := EBP + 16 41 size := EBP + 16
42 args := EBP + 12 42 args := EBP + 12
43 target := EBP + 8 43 target := EBP + 8
65 MOVL(DWORD(EBP,16),ECX) /* ECX = arg buffer size */ 65 MOVL(DWORD(EBP,16),ECX) /* ECX = arg buffer size */
66 ADDL(LIT(15),ECX) /* ECX = align(ECX,16) */ 66 ADDL(LIT(15),ECX) /* ECX = align(ECX,16) */
67 ANDL(LIT(-16),ECX) 67 ANDL(LIT(-16),ECX)
68 MOVL(ECX,DWORD(EBP,16)) /* save ECX. */ 68 MOVL(ECX,DWORD(EBP,16)) /* save ECX. */
69 SUBL(ECX,ESP) /* allocate stack size */ 69 SUBL(ECX,ESP) /* allocate stack size */
70 MOVL(ESP,EDI) /* EDI = stack ptr */ 70 MOVL(ESP,EDI) /* EDI = stack ptr */
71 71
72 /* 72 /*
73 work around for rep movsd (not supported by SunPro) 73 work around for rep movsd (not supported by SunPro)
74 74
75 SHRL(LIT(2),ECX) 75 SHRL(LIT(2),ECX)
76 REP(MOVSD) 76 REP(MOVSD)
77 77
78 */ 78 */
79 79
80 REP(MOVSB) 80 REP(MOVSB)
81 CALL_DWORD(EBP,8) 81 CALL_DWORD(EBP,8)
82 ADDL(DWORD(EBP,16),ESP) 82 ADDL(DWORD(EBP,16),ESP)
183 */ 183 */
184 184
185 GLOBAL(dcCall_x86_sys_int80h_linux) 185 GLOBAL(dcCall_x86_sys_int80h_linux)
186 BEGIN_PROC(dcCall_x86_sys_int80h_linux) 186 BEGIN_PROC(dcCall_x86_sys_int80h_linux)
187 PUSH(EBP) /* prolog. */ 187 PUSH(EBP) /* prolog. */
188 MOVL(ESP,EBP) 188 MOVL(ESP,EBP)
189 PUSH(EBX) /* save preserved. */ 189 PUSH(EBX) /* save preserved. */
190 PUSH(ESI) 190 PUSH(ESI)
191 PUSH(EDI) 191 PUSH(EDI)
192 MOVL(DWORD(EBP,12),EAX) /* EAX = argument buffer. */ 192 MOVL(DWORD(EBP,12),EAX) /* EAX = argument buffer. */
193 MOVL(DWORD(EAX,0),EBX) /* move first five arguments. */ 193 MOVL(DWORD(EAX,0),EBX) /* move first five arguments. */
213 */ 213 */
214 214
215 GLOBAL(dcCall_x86_sys_int80h_bsd) 215 GLOBAL(dcCall_x86_sys_int80h_bsd)
216 BEGIN_PROC(dcCall_x86_sys_int80h_bsd) 216 BEGIN_PROC(dcCall_x86_sys_int80h_bsd)
217 PUSH(EBP) /* prolog. */ 217 PUSH(EBP) /* prolog. */
218 MOVL(ESP,EBP) 218 MOVL(ESP,EBP)
219 PUSH(ESI) /* save preserved. */ 219 PUSH(ESI) /* save preserved. */
220 PUSH(EDI) 220 PUSH(EDI)
221 MOVL(DWORD(EBP,12),ESI) /* ESI = pointer on args. */ 221 MOVL(DWORD(EBP,12),ESI) /* ESI = pointer on args. */
222 MOVL(DWORD(EBP,16),ECX) /* ECX = size. */ 222 MOVL(DWORD(EBP,16),ECX) /* ECX = size. */
223 SUBL(ECX,ESP) /* allocate stack space. */ 223 SUBL(ECX,ESP) /* allocate stack space. */