annotate dyncallback/dyncall_callback_x64.S @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children 572aff021627
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: dyncallback
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: dyncallback/dyncall_callback_x64.S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Callback Thunk entry for x64 (portasm version)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 #include "../portasm/portasm-x64-att.S"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 /* structure sizes */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 SET(DCThunk_size,24)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 SET(DCArgs_size_win64,80)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 SET(DCArgs_size_sysv,128)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 SET(DCValue_size,8)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 /* frame local variable offsets relative to %rbp*/
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 SET(FRAME_arg0_win64,48)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 SET(FRAME_arg0_sysv,16)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 SET(FRAME_return,8)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 SET(FRAME_parent,0)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 SET(FRAME_DCArgs_sysv,-128)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 SET(FRAME_DCValue_sysv,-136)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 SET(FRAME_DCArgs_win64,-80)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 SET(FRAME_DCValue_win64,-80)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 /* struct DCCallback */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 SET(CTX_thunk,0)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 SET(CTX_handler,24)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 SET(CTX_userdata,32)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 SET(DCCallback_size,40)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 /* character constants */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 #define ASCII_f 102
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 #define ASCII_d 100
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 GLOBAL(dcCallback_x64_sysv)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 BEGIN_PROC(dcCallback_x64_sysv)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 PUSH(RBP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 MOV(RSP,RBP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 /* initialize DCArgs */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 /* float parameters (8 registers spill to DCArgs) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 SUB(LIT(8*8),RSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 MOVSD(XMM7, QWORD(RSP,8*7)) /* struct offset 120: float parameter 7 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 MOVSD(XMM6, QWORD(RSP,8*6)) /* struct offset 112: float parameter 6 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 MOVSD(XMM5, QWORD(RSP,8*5)) /* struct offset 104: float parameter 5 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 MOVSD(XMM4, QWORD(RSP,8*4)) /* struct offset 96: float parameter 4 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 MOVSD(XMM3, QWORD(RSP,8*3)) /* struct offset 88: float parameter 3 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 MOVSD(XMM2, QWORD(RSP,8*2)) /* struct offset 80: float parameter 2 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 MOVSD(XMM1, QWORD(RSP,8*1)) /* struct offset 72: float parameter 1 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 MOVSD(XMM0, QWORD(RSP,8*0)) /* struct offset 64: float parameter 0 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 /* integer parameters (6 registers spill to DCArgs) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 PUSH(R9) /* struct offset 56: parameter 5 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 PUSH(R8) /* struct offset 48: parameter 4 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 PUSH(RCX) /* struct offset 40: parameter 3 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 PUSH(RDX) /* struct offset 32: parameter 2 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 PUSH(RSI) /* struct offset 24: parameter 1 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 PUSH(RDI) /* struct offset 16: parameter 0 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 /* register counts for integer/pointer and float regs */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 PUSH(LIT(0)) /* struct offset 12: fcount */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 /* struct offset 8: icount */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 LEA(QWORD(RBP,FRAME_arg0_sysv),RDX) /* struct offset 0: stack pointer */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 PUSH(RDX)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 MOV(RSP,RSI) /* arg 1 RSI : DCArgs* */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 /* initialize DCValue */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 PUSH(LIT(0)) /* struct offset 0: return value (max long long) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 /* call handler( *ctx, *args, *value, *userdata) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 MOV(RAX,RDI) /* arg 0 RDI : DCCallback* (RAX) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 MOV(QWORD(RDI,CTX_userdata),RCX) /* arg 3 RCX : userdata* */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 MOV(RSP,RDX) /* arg 2 RDX : DCValue* */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 PUSH(LIT(0)) /* align to 16 bytes */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 CALL_REG(QWORD(RAX,CTX_handler))
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 /* pass return type via registers, handle ints and floats */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 MOV(QWORD(RBP,FRAME_DCValue_sysv),RAX)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 MOVD(RAX,XMM0)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 MOV(RBP,RSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 POP(RBP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 RET()
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 END_PROC(dcCallback_x64_sysv)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 GLOBAL(dcCallback_x64_win64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 BEGIN_PROC(dcCallback_x64_win64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 PUSH(RBP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 MOV(RSP,RBP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 /* initialize DCArgs */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 /* float parameters (4 registers spill to DCArgs) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 SUB(LIT(4*8),RSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 MOVSD(XMM3, QWORD(RSP,8*3)) /* struct offset 72: float parameter 3 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 MOVSD(XMM2, QWORD(RSP,8*2)) /* struct offset 64: float parameter 2 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 MOVSD(XMM1, QWORD(RSP,8*1)) /* struct offset 56: float parameter 1 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 MOVSD(XMM0, QWORD(RSP,8*0)) /* struct offset 48: float parameter 0 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 /* integer parameters (4 registers spill to DCArgs) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 PUSH(R9) /* struct offset 40: parameter 3 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 PUSH(R8) /* struct offset 32: parameter 2 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 PUSH(RDX) /* struct offset 24: parameter 1 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 PUSH(RCX) /* struct offset 16: parameter 0 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 /* register counts for integer/pointer and float regs */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 PUSH(LIT(0)) /* struct offset 12: fcount */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 /* struct offset 8: icount */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 LEA(QWORD(RBP,FRAME_arg0_win64),RDX) /* struct offset 0: stack pointer */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 PUSH(RDX)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 MOV(RSP,RDX) /* arg 1 RDX : DCArgs* */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 /* initialize DCValue */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 // PUSHQ(LIT(0)) /* struct offset 0: return value (max long long) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 /* call handler( *ctx, *args, *value, *userdata) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 MOV(RAX,RCX) /* arg 0 RCX : DCCallback* (RAX) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 MOV(QWORD(RAX,CTX_userdata),R9) /* arg 3 R9 : userdata* */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 MOV(RSP,R8) /* arg 2 R8 : DCValue* */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 SUB(LIT(4*8),RSP) /* make room for spill area and call */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 CALL_REG(QWORD(RAX,CTX_handler))
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 /* pass return type via registers, handle ints and floats */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 MOV(QWORD(RBP,FRAME_DCValue_win64),RAX)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 MOVD(RAX,XMM0)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 MOV(RBP,RSP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 POP(RBP)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 RET()
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 END_PROC(dcCallback_x64_win64)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 END_ASM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180