Mercurial > pub > dyncall > dyncall
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() |