merge the formfield patch from ooo-build
[ooovba.git] / bridges / source / cpp_uno / cc50_solaris_intel / call.s
blob95bf79632031caf2c79b3a22278ce2e09376c30b
1 .align 4
2 .globl privateSnippetExecutorGeneral
3 privateSnippetExecutorGeneral:
4 movl %esp,%ecx
5 pushl %ebp / proper stack frame needed for exception handling
6 movl %esp,%ebp
7 andl $0xFFFFFFF8,%esp / align following 64bit arg
8 subl $0x8,%esp / 64bit nRegReturn
9 pushl %ecx / 32bit pCallStack
10 pushl %edx / 32bit nVtableOffset
11 pushl %eax / 32bit nFunctionIndex
12 call cpp_vtable_call
13 movl 12(%esp),%eax / 64 bit nRegReturn, lower half
14 leave
15 ret
16 .type privateSnippetExecutorGeneral, @function
17 .size privateSnippetExecutorGeneral, .-privateSnippetExecutorGeneral
19 .align 4
20 .globl privateSnippetExecutorVoid
21 privateSnippetExecutorVoid:
22 movl %esp,%ecx
23 pushl %ebp / proper stack frame needed for exception handling
24 movl %esp,%ebp
25 andl $0xFFFFFFF8,%esp / align following 64bit arg
26 subl $0x8,%esp / 64bit nRegReturn
27 pushl %ecx / 32bit pCallStack
28 pushl %edx / 32bit nVtableOffset
29 pushl %eax / 32bit nFunctionIndex
30 call cpp_vtable_call
31 leave
32 ret
33 .type privateSnippetExecutorVoid, @function
34 .size privateSnippetExecutorVoid, .-privateSnippetExecutorVoid
36 .align 4
37 .globl privateSnippetExecutorHyper
38 privateSnippetExecutorHyper:
39 movl %esp,%ecx
40 pushl %ebp / proper stack frame needed for exception handling
41 movl %esp,%ebp
42 andl $0xFFFFFFF8,%esp / align following 64bit arg
43 subl $0x8,%esp / 64bit nRegReturn
44 pushl %ecx / 32bit pCallStack
45 pushl %edx / 32bit nVtableOffset
46 pushl %eax / 32bit nFunctionIndex
47 call cpp_vtable_call
48 movl 12(%esp),%eax / 64 bit nRegReturn, lower half
49 movl 16(%esp),%edx / 64 bit nRegReturn, upper half
50 leave
51 ret
52 .type privateSnippetExecutorHyper, @function
53 .size privateSnippetExecutorHyper, .-privateSnippetExecutorHyper
55 .align 4
56 .globl privateSnippetExecutorFloat
57 privateSnippetExecutorFloat:
58 movl %esp,%ecx
59 pushl %ebp / proper stack frame needed for exception handling
60 movl %esp,%ebp
61 andl $0xFFFFFFF8,%esp / align following 64bit arg
62 subl $0x8,%esp / 64bit nRegReturn
63 pushl %ecx / 32bit pCallStack
64 pushl %edx / 32bit nVtableOffset
65 pushl %eax / 32bit nFunctionIndex
66 call cpp_vtable_call
67 flds 12(%esp) / 64 bit nRegReturn, lower half
68 leave
69 ret
70 .type privateSnippetExecutorFloat, @function
71 .size privateSnippetExecutorFloat, .-privateSnippetExecutorFloat
73 .align 4
74 .globl privateSnippetExecutorDouble
75 privateSnippetExecutorDouble:
76 movl %esp,%ecx
77 pushl %ebp / proper stack frame needed for exception handling
78 movl %esp,%ebp
79 andl $0xFFFFFFF8,%esp / align following 64bit arg
80 subl $0x8,%esp / 64bit nRegReturn
81 pushl %ecx / 32bit pCallStack
82 pushl %edx / 32bit nVtableOffset
83 pushl %eax / 32bit nFunctionIndex
84 call cpp_vtable_call
85 fldl 12(%esp) / 64 bit nRegReturn
86 leave
87 ret
88 .type privateSnippetExecutorDouble, @function
89 .size privateSnippetExecutorDouble, .-privateSnippetExecutorDouble
91 .align 4
92 .globl privateSnippetExecutorStruct
93 privateSnippetExecutorStruct:
94 movl %esp,%ecx
95 pushl %ebp / proper stack frame needed for exception handling
96 movl %esp,%ebp
97 andl $0xFFFFFFF8,%esp / align following 64bit arg
98 subl $0x8,%esp / 64bit nRegReturn
99 pushl %ecx / 32bit pCallStack
100 pushl %edx / 32bit nVtableOffset
101 pushl %eax / 32bit nFunctionIndex
102 call cpp_vtable_call
103 movl 12(%esp),%eax / 64 bit nRegReturn, lower half
104 leave
105 ret $4
106 .type privateSnippetExecutorStruct, @function
107 .size privateSnippetExecutorStruct, .-privateSnippetExecutorStruct
109 .align 4
110 .globl callVirtualMethod
111 callVirtualMethod:
112 pushl %ebp
113 movl %esp, %ebp
114 subl $24, %esp
115 movl %edx, -4(%ebp)
116 movl %ecx, -8(%ebp)
117 movl %eax, -12(%ebp)
118 movl %esp, -16(%ebp)
119 movl %ebx, -20(%ebp)
121 / set ebx to GOT
122 .L_GOT_BEGIN_2:
123 call .L_GOT_END_2
124 .L_GOT_END_2:
125 popl %ebx
126 addl $_GLOBAL_OFFSET_TABLE_+[.-.L_GOT_END_2],%ebx
127 .callBeginPosition:
128 movl 28(%ebp), %eax
129 movl %eax, %edx
130 dec %edx
131 shl $2, %edx
132 add 24(%ebp), %edx
133 .copyLong:
134 movl 0(%edx), %ecx
135 sub $4, %edx
136 push %ecx
137 dec %eax
138 jne .copyLong
139 .doCall:
140 movl 8(%ebp), %edx
141 movl 0(%edx), %edx
142 movl 12(%ebp), %eax
143 add $2, %eax
144 shl $2, %eax
145 add %eax, %edx
146 movl 0(%edx), %edx
148 call *%edx
150 .callVirtualMethodExceptionPosition:
151 / handle returns
152 movl 20(%ebp), %ecx
154 / byte types
155 cmp $2, %ecx / typelib_TypeClass_BOOLEAN
156 je .handleByte
157 cmp $3, %ecx
158 je .handleByte / typelib_TypeClass_BYTE
160 / half word types
161 cmp $4, %ecx / typelib_TypeClass_SHORT
162 je .handleShort
163 cmp $5, %ecx / typelib_TypeClass_UNSIGNED_SHORT
164 je .handleShort
166 / word types
167 cmp $6, %ecx / typelib_TypeClass_LONG
168 je .handleWord
169 cmp $7, %ecx / typelib_TypeClass_UNSIGNED_LONG
170 je .handleWord
171 cmp $1, %ecx / typelib_TypeClass_CHAR (wchar_t)
172 je .handleWord
173 cmp $15, %ecx / typelib_TypeClass_ENUM
174 je .handleWord
176 / double word types
177 cmp $8, %ecx / typelib_TypeClass_HYPER
178 je .handleDoubleWord
179 cmp $9, %ecx / typelib_TypeClass_UNSIGNED_HYPER
180 je .handleDoubleWord
182 / float
183 cmp $10, %ecx / typelib_TypeClass_FLOAT
184 je .handleFloat
186 / double
187 cmp $11, %ecx / typelib_TypeClass_DOUBLE
188 je .handleDouble
190 / default: return void
191 jmp .doRestore
192 .handleByte:
193 movl 16(%ebp), %ecx
194 movb %al, 0(%ecx)
195 jmp .doRestore
196 .handleShort:
197 movl 16(%ebp), %ecx
198 movw %ax, 0(%ecx)
199 jmp .doRestore
200 .handleWord:
201 movl 16(%ebp), %ecx
202 movl %eax, 0(%ecx)
203 jmp .doRestore
204 .handleDoubleWord:
205 movl 16(%ebp), %ecx
206 movl %eax, 0(%ecx)
207 movl %edx, 4(%ecx)
208 jmp .doRestore
209 .handleFloat:
210 movl 16(%ebp), %ecx
211 fstps 0(%ecx)
212 jmp .doRestore
213 .handleDouble:
214 movl 16(%ebp), %ecx
215 fstpl 0(%ecx)
216 jmp .doRestore
217 .doRestore:
218 movl -4(%ebp), %edx
219 movl -8(%ebp), %ecx
220 movl -12(%ebp), %eax
221 movl -20(%ebp), %ebx
222 movl %ebp, %esp
223 popl %ebp
225 .type callVirtualMethod, @function
226 .size callVirtualMethod, .-callVirtualMethod
228 .globl callVirtualMethodExceptionHandler
229 callVirtualMethodExceptionHandler:
230 movl -4(%ebp), %edx
231 movl -8(%ebp), %ecx
232 movl -12(%ebp), %eax
233 movl -16(%ebp), %esp
234 movl -20(%ebp), %ebx
235 call __1cG__CrunMex_rethrow_q6F_v_@PLT
238 .type callVirtualMethodExceptionHandler, @function
239 .size callVirtualMethodExceptionHandler, .-callVirtualMethodExceptionHandler
242 .section .exception_ranges,"aw"
243 .align 4
245 .4byte .callBeginPosition@rel
246 .4byte .callVirtualMethodExceptionPosition-.callBeginPosition
247 .4byte callVirtualMethodExceptionHandler-.callBeginPosition
248 .zero 8