comparison dyncallback/dyncall_callback_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 63892f03e493
children d5705f226298
comparison
equal deleted inserted replaced
164:2d330a60c44f 165:572aff021627
25 25
26 #include "../portasm/portasm-x86.S" 26 #include "../portasm/portasm-x86.S"
27 #include "../dyncall/dyncall_macros.h" 27 #include "../dyncall/dyncall_macros.h"
28 28
29 BEGIN_ASM 29 BEGIN_ASM
30 DCThunk_size = 16 30 DCThunk_size = 16
31 DCArgs_size = 20 31 DCArgs_size = 20
32 DCValue_size = 8 32 DCValue_size = 8
33 33
34 CTX_thunk = 0 34 CTX_thunk = 0
35 CTX_phandler = 16 35 CTX_phandler = 16
36 CTX_pargsvt = 20 36 CTX_pargsvt = 20
37 CTX_stack_cleanup = 24 37 CTX_stack_cleanup = 24
38 CTX_userdata = 28 38 CTX_userdata = 28
39 39
40 frame_arg0 = 8 40 frame_arg0 = 8
41 frame_ret = 4 41 frame_ret = 4
42 frame_parent = 0 42 frame_parent = 0
43 frame_CTX = -4 43 frame_CTX = -4
44 frame_DCArgs = -24 44 frame_DCArgs = -24
45 frame_DCValue = -32 45 frame_DCValue = -32
46 46
47 #define ASCII_L 76 47 #define ASCII_L 76
48 #define ASCII_l 108 48 #define ASCII_l 108
49 #define ASCII_d 100 49 #define ASCII_d 100
50 #define ASCII_f 102 50 #define ASCII_f 102
51 #define ASCII_i 105 51 #define ASCII_i 105
52 #define ASCII_v 118 52 #define ASCII_v 118
53 53
54 GLOBAL(dcCallbackThunkEntry) 54 GLOBAL(dcCallbackThunkEntry)
55 BEGIN_PROC(dcCallbackThunkEntry) 55 BEGIN_PROC(dcCallbackThunkEntry)
56 PUSH(EBP) 56 PUSH(EBP)
57 MOVL(ESP,EBP) 57 MOVL(ESP,EBP)
77 PUSH(ECX) /* DCargs* */ 77 PUSH(ECX) /* DCargs* */
78 PUSH(EAX) /* DCCallback* */ 78 PUSH(EAX) /* DCCallback* */
79 CALL_DWORD(EAX,CTX_phandler) 79 CALL_DWORD(EAX,CTX_phandler)
80 /* cleanup stack */ 80 /* cleanup stack */
81 MOVL(EBP,ESP) /* reset esp to frame */ 81 MOVL(EBP,ESP) /* reset esp to frame */
82 POP(ECX) /* skip parent frame */ 82 POP(ECX) /* skip parent frame */
83 POP(ECX) /* pop return address */ 83 POP(ECX) /* pop return address */
84 MOVL(DWORD(EBP,frame_CTX),EDX) 84 MOVL(DWORD(EBP,frame_CTX),EDX)
85 ADD(DWORD(EDX,CTX_stack_cleanup),ESP) /* cleanup stack */ 85 ADD(DWORD(EDX,CTX_stack_cleanup),ESP) /* cleanup stack */
86 PUSH(ECX) /* push back return address */ 86 PUSH(ECX) /* push back return address */
87 LEA(DWORD(EBP,frame_DCValue), EDX) 87 LEA(DWORD(EBP,frame_DCValue), EDX)
92 CMP(LIT(ASCII_f),AL) 92 CMP(LIT(ASCII_f),AL)
93 JE(LOCAL(return_f32)) 93 JE(LOCAL(return_f32))
94 CMP(LIT(ASCII_d),AL) 94 CMP(LIT(ASCII_d),AL)
95 JE(LOCAL(return_f64)) 95 JE(LOCAL(return_f64))
96 #endif 96 #endif
97 97
98 /* All int cases (+ pointer & string cases) fall in the return_i64 case, here */ 98 /* All int cases (+ pointer & string cases) fall in the return_i64 case, here */
99 LOCAL(return_i64): 99 LOCAL(return_i64):
100 MOVL(DWORD(EDX,0),EAX) 100 MOVL(DWORD(EDX,0),EAX)
101 MOVL(DWORD(EDX,4),EDX) 101 MOVL(DWORD(EDX,4),EDX)
102 RET() 102 RET()