Rev 617 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 617 | Rev 4039 | ||
---|---|---|---|
Line 53... | Line 53... | ||
53 | 53 | ||
Line 54... | Line 54... | ||
54 | prologue@proc equ prologuedef |
54 | prologue@proc equ prologuedef |
Line 55... | Line 55... | ||
55 | 55 | ||
- | 56 | macro prologuedef procname,flag,parmbytes,localbytes,reglist |
|
- | 57 | { local loc |
|
- | 58 | loc = (localbytes+3) and (not 3) |
|
- | 59 | parmbase@proc equ ebp+8 |
|
56 | macro prologuedef procname,flag,parmbytes,localbytes,reglist |
60 | localbase@proc equ ebp-loc |
57 | { if parmbytes | localbytes |
61 | if parmbytes | localbytes |
58 | push ebp |
62 | push ebp |
59 | mov ebp,esp |
63 | mov ebp,esp |
60 | if localbytes |
64 | if localbytes |
61 | sub esp,localbytes |
65 | sub esp,loc |
62 | end if |
66 | end if |
63 | end if |
67 | end if |
Line 64... | Line 68... | ||
64 | irps reg, reglist \{ push reg \} } |
68 | irps reg, reglist \{ push reg \} } |
Line 75... | Line 79... | ||
75 | else |
79 | else |
76 | retn parmbytes |
80 | retn parmbytes |
77 | end if } |
81 | end if } |
78 | 82 | ||
Line -... | Line 83... | ||
- | 83 | close@proc equ |
|
- | 84 | ||
79 | macro define@proc name,statement |
85 | macro define@proc name,statement |
80 | { local params,flag,regs,parmbytes,localbytes,current |
86 | { local params,flag,regs,parmbytes,localbytes,current |
81 | if used name |
87 | if used name |
82 | name: |
88 | name: |
83 | match =stdcall args, statement \{ params equ args |
89 | match =stdcall args, statement \{ params equ args |
Line 89... | Line 95... | ||
89 | match =c, statement \{ params equ |
95 | match =c, statement \{ params equ |
90 | flag = 10001b \} |
96 | flag = 10001b \} |
91 | match =params, params \{ params equ statement |
97 | match =params, params \{ params equ statement |
92 | flag = 0 \} |
98 | flag = 0 \} |
93 | virtual at ebp+8 |
99 | match =uses reglist=,args, params \{ regs equ reglist |
94 | match =uses reglist=,args, params \{ regs equ reglist |
- | |
95 | params equ args \} |
100 | params equ args \} |
96 | match =regs =uses reglist, regs params \{ regs equ reglist |
101 | match =regs =uses reglist, regs params \{ regs equ reglist |
97 | params equ \} |
102 | params equ \} |
98 | match =regs, regs \{ regs equ \} |
103 | match =regs, regs \{ regs equ \} |
99 | match =,args, params \{ defargs@proc args \} |
104 | match prologue:reglist, prologue@proc: |
- | 105 | virtual at parmbase@proc |
|
- | 106 | match =,args, params \{ defargs@proc args \} |
|
100 | match =args@proc args, args@proc params \{ defargs@proc args \} |
107 | match =args@proc args, args@proc params \{ defargs@proc args \} |
101 | parmbytes = $ - (ebp+8) |
108 | parmbytes = $-(parmbase@proc) |
102 | end virtual |
109 | end virtual |
103 | name # % = parmbytes/4 |
110 | name # % = parmbytes/4 |
104 | all@vars equ |
111 | all@vars equ |
105 | current = 0 |
112 | current = 0 |
106 | match prologue:reglist, prologue@proc: |
113 | macro locals |
107 | macro locals |
- | |
108 | \{ virtual at ebp-localbytes+current |
114 | \{ virtual at localbase@proc+current |
109 | macro label def \\{ match . type,def> \\\{ deflocal@proc .,label, |
115 | macro label def \\{ match . type,def> \\\{ deflocal@proc .,label, |
110 | struc db [val] \\{ \common deflocal@proc .,db,val \\} |
116 | struc db [val] \\{ \common deflocal@proc .,db,val \\} |
111 | struc du [val] \\{ \common deflocal@proc .,du,val \\} |
117 | struc du [val] \\{ \common deflocal@proc .,du,val \\} |
112 | struc dw [val] \\{ \common deflocal@proc .,dw,val \\} |
118 | struc dw [val] \\{ \common deflocal@proc .,dw,val \\} |
113 | struc dp [val] \\{ \common deflocal@proc .,dp,val \\} |
119 | struc dp [val] \\{ \common deflocal@proc .,dp,val \\} |
114 | struc dd [val] \\{ \common deflocal@proc .,dd,val \\} |
120 | struc dd [val] \\{ \common deflocal@proc .,dd,val \\} |
Line 123... | Line 129... | ||
123 | macro endl |
129 | macro endl |
124 | \{ purge label |
130 | \{ purge label |
125 | restruc db,du,dw,dp,dd,dt,dq |
131 | restruc db,du,dw,dp,dd,dt,dq |
126 | restruc rb,rw,rp,rd,rt,rq |
132 | restruc rb,rw,rp,rd,rt,rq |
127 | current = $-(ebp-localbytes) |
133 | current = $-(localbase@proc) |
128 | end virtual \} |
134 | end virtual \} |
129 | macro ret operand |
135 | macro ret operand |
130 | \{ match any, operand \\{ retn operand \\} |
136 | \{ match any, operand \\{ retn operand \\} |
131 | match , operand \\{ match epilogue:reglist, epilogue@proc: |
137 | match , operand \\{ match epilogue:reglist, epilogue@proc: |
132 | \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} |
138 | macro finish@proc |
- | 139 | \{ localbytes = current |
|
133 | macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2 |
140 | match close:reglist, close@proc: |
134 | end if \} } |
141 | end if \} } |
135 | 142 | ||
Line 136... | Line 143... | ||
136 | macro defargs@proc [arg] |
143 | macro defargs@proc [arg] |
137 | { common |
144 | { common |
138 | if ~ arg eq |
145 | if ~ arg eq |
Line 141... | Line 148... | ||
141 | match argname:type, arg |
148 | match argname:type, arg |
142 | \{ current@arg equ argname |
149 | \{ current@arg equ argname |
143 | label ..arg type |
150 | label ..arg type |
144 | argname equ ..arg |
151 | argname equ ..arg |
145 | if dqword eq type |
152 | if qqword eq type |
146 | dd ?,?,?,? |
153 | dd ?,?,?,?,?,?,?,? |
- | 154 | else if dqword eq type |
|
- | 155 | dd ?,?,?,? |
|
147 | else if tbyte eq type |
156 | else if tbyte eq type |
148 | dd ?,?,? |
157 | dd ?,?,? |
149 | else if qword eq type | pword eq type |
158 | else if qword eq type | pword eq type |
150 | dd ?,? |
159 | dd ?,? |
151 | else |
160 | else |
Line 161... | Line 170... | ||
161 | restore current@arg |
170 | restore current@arg |
162 | common |
171 | common |
163 | end if } |
172 | end if } |
164 | 173 | ||
Line -... | Line 174... | ||
- | 174 | macro deflocal@proc name,def,[val] { name def val } |
|
- | 175 | ||
165 | macro deflocal@proc name,def,[val] |
176 | macro deflocal@proc name,def,[val] |
166 | { common |
177 | { common |
167 | match vars, all@vars \{ all@vars equ all@vars, \} |
178 | match vars, all@vars \{ all@vars equ all@vars, \} |
168 | all@vars equ all@vars name |
179 | all@vars equ all@vars name |
169 | forward |
180 | forward |
170 | local ..var,..tmp |
181 | local ..var,..tmp |
171 | match =label,def \{ ..tmp equ \} |
- | |
172 | match tmp,..tmp \{ ..var def val \} |
182 | ..var def val |
173 | match ,..tmp \{ label ..var val \} |
- | |
174 | match =?, val \{ ..tmp equ \} |
183 | match =?, val \{ ..tmp equ \} |
- | 184 | match any =?, val \{ ..tmp equ \} |
|
175 | match any =dup (=?), val \{ ..tmp equ \} |
185 | match any (=?), val \{ ..tmp equ \} |
- | 186 | match =label, def \{ ..tmp equ \} |
|
176 | match tmp : value, ..tmp : val |
187 | match tmp : value, ..tmp : val |
177 | \{ tmp: end virtual |
188 | \{ tmp: end virtual |
178 | initlocal@proc ..var,def value |
189 | initlocal@proc ..var,def value |
179 | virtual at tmp\} |
190 | virtual at tmp\} |
180 | common |
191 | common |
181 | match first rest, ..var, \{ name equ first \} } |
192 | match first rest, ..var, \{ name equ first \} } |
Line -... | Line 193... | ||
- | 193 | ||
- | 194 | struc label type { label . type } |
|
182 | 195 | ||
183 | macro initlocal@proc name,def |
196 | macro initlocal@proc name,def |
184 | { virtual at name |
197 | { virtual at name |
185 | def |
198 | def |
186 | size@initlocal = $ - name |
199 | size@initlocal = $ - name |
Line 236... | Line 249... | ||
236 | restore done@local \\} |
249 | restore done@local \\} |
237 | match =TBYTE, vartype \\{ varname rt count |
250 | match =TBYTE, vartype \\{ varname rt count |
238 | restore done@local \\} |
251 | restore done@local \\} |
239 | match =DQWORD, vartype \\{ label varname dqword |
252 | match =DQWORD, vartype \\{ label varname dqword |
240 | rq count+count |
253 | rq count*2 |
241 | restore done@local \\} |
254 | restore done@local \\} |
- | 255 | match =QQWORD, vartype \\{ label varname qqword |
|
- | 256 | rq count*4 |
|
- | 257 | restore done@local \\} |
|
- | 258 | match =XWORD, vartype \\{ label varname xword |
|
- | 259 | rq count*2 |
|
- | 260 | restore done@local \\} |
|
- | 261 | match =YWORD, vartype \\{ label varname yword |
|
- | 262 | rq count*4 |
|
- | 263 | restore done@local \\} |
|
242 | match , done@local \\{ virtual |
264 | match , done@local \\{ virtual |
243 | varname vartype |
265 | varname vartype |
244 | end virtual |
266 | end virtual |
245 | rb count*sizeof.\#vartype |
267 | rb count*sizeof.\#vartype |
246 | restore done@local \\} \} |
268 | restore done@local \\} \} |
Line 259... | Line 281... | ||
259 | restore done@local \\} |
281 | restore done@local \\} |
260 | match =DQWORD, vartype \\{ label varname dqword |
282 | match =DQWORD, vartype \\{ label varname dqword |
261 | dq ?,? |
283 | dq ?,? |
262 | restore done@local \\} |
284 | restore done@local \\} |
263 | match , done@local \\{ varname vartype |
285 | match =QQWORD, vartype \\{ label varname qqword |
- | 286 | dq ?,?,?,? |
|
- | 287 | restore done@local \\} |
|
- | 288 | match =XWORD, vartype \\{ label varname xword |
|
- | 289 | dq ?,? |
|
- | 290 | restore done@local \\} |
|
- | 291 | match =YWORD, vartype \\{ label varname yword |
|
- | 292 | dq ?,?,?,? |
|
- | 293 | restore done@local \\} |
|
- | 294 | match , done@local \\{ varname vartype |
|
264 | restore done@local \\} \} |
295 | restore done@local \\} \} |
265 | match ,done@local |
296 | match ,done@local |
266 | \{ var |
297 | \{ var |
267 | restore done@local \} |
298 | restore done@local \} |
268 | common |
299 | common |