1*b5da552cSAndrew Rist /**************************************************************
2*b5da552cSAndrew Rist  *
3*b5da552cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*b5da552cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*b5da552cSAndrew Rist  * distributed with this work for additional information
6*b5da552cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*b5da552cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*b5da552cSAndrew Rist  * "License"); you may not use this file except in compliance
9*b5da552cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*b5da552cSAndrew Rist  *
11*b5da552cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*b5da552cSAndrew Rist  *
13*b5da552cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*b5da552cSAndrew Rist  * software distributed under the License is distributed on an
15*b5da552cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b5da552cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*b5da552cSAndrew Rist  * specific language governing permissions and limitations
18*b5da552cSAndrew Rist  * under the License.
19*b5da552cSAndrew Rist  *
20*b5da552cSAndrew Rist  *************************************************************/
21*b5da552cSAndrew Rist 
22cdf0e10cSrcweir     .text
23cdf0e10cSrcweir 
24cdf0e10cSrcweir .globl _privateSnippetExecutorGeneral
25cdf0e10cSrcweir _privateSnippetExecutorGeneral:
26cdf0e10cSrcweir .LFBg:
27cdf0e10cSrcweir     movl    %esp,%ecx
28cdf0e10cSrcweir     pushl   %ebp              # proper stack frame needed for exception handling
29cdf0e10cSrcweir .LCFIg0:
30cdf0e10cSrcweir     movl    %esp,%ebp
31cdf0e10cSrcweir .LCFIg1:
32cdf0e10cSrcweir     subl    $0x4,%esp         # 32bit returnValue
33cdf0e10cSrcweir     pushl   %esp              # 32bit &returnValue
34cdf0e10cSrcweir     pushl   %ecx              # 32bit pCallStack
35cdf0e10cSrcweir     pushl   %edx              # 32bit nVtableOffset
36cdf0e10cSrcweir     pushl   %eax              # 32bit nFunctionIndex
37cdf0e10cSrcweir     call    _cpp_vtable_call
38cdf0e10cSrcweir     movl    16(%esp),%eax     # 32bit returnValue
39cdf0e10cSrcweir     leave
40cdf0e10cSrcweir     ret
41cdf0e10cSrcweir .LFEg:
42cdf0e10cSrcweir     .long   .-_privateSnippetExecutorGeneral
43cdf0e10cSrcweir 
44cdf0e10cSrcweir .globl _privateSnippetExecutorVoid
45cdf0e10cSrcweir _privateSnippetExecutorVoid:
46cdf0e10cSrcweir .LFBv:
47cdf0e10cSrcweir     movl    %esp,%ecx
48cdf0e10cSrcweir     pushl   %ebp              # proper stack frame needed for exception handling
49cdf0e10cSrcweir .LCFIv0:
50cdf0e10cSrcweir     movl    %esp,%ebp
51cdf0e10cSrcweir .LCFIv1:
52cdf0e10cSrcweir     pushl   $0                # 32bit null pointer (returnValue not used)
53cdf0e10cSrcweir     pushl   %ecx              # 32bit pCallStack
54cdf0e10cSrcweir     pushl   %edx              # 32bit nVtableOffset
55cdf0e10cSrcweir     pushl   %eax              # 32bit nFunctionIndex
56cdf0e10cSrcweir     call    _cpp_vtable_call
57cdf0e10cSrcweir     leave
58cdf0e10cSrcweir     ret
59cdf0e10cSrcweir .LFEv:
60cdf0e10cSrcweir     .long   .-_privateSnippetExecutorVoid
61cdf0e10cSrcweir 
62cdf0e10cSrcweir .globl _privateSnippetExecutorHyper
63cdf0e10cSrcweir _privateSnippetExecutorHyper:
64cdf0e10cSrcweir .LFBh:
65cdf0e10cSrcweir     movl    %esp,%ecx
66cdf0e10cSrcweir     pushl   %ebp              # proper stack frame needed for exception handling
67cdf0e10cSrcweir .LCFIh0:
68cdf0e10cSrcweir     movl    %esp,%ebp
69cdf0e10cSrcweir .LCFIh1:
70cdf0e10cSrcweir     subl    $0x8,%esp         # 64bit returnValue
71cdf0e10cSrcweir     pushl   %esp              # 32bit &returnValue
72cdf0e10cSrcweir     pushl   %ecx              # 32bit pCallStack
73cdf0e10cSrcweir     pushl   %edx              # 32bit nVtableOffset
74cdf0e10cSrcweir     pushl   %eax              # 32bit nFunctionIndex
75cdf0e10cSrcweir     call    _cpp_vtable_call
76cdf0e10cSrcweir     movl    16(%esp),%eax     # 64bit returnValue, lower half
77cdf0e10cSrcweir     movl    20(%esp),%edx     # 64bit returnValue, upper half
78cdf0e10cSrcweir     leave
79cdf0e10cSrcweir     ret
80cdf0e10cSrcweir .LFEh:
81cdf0e10cSrcweir     .long   .-_privateSnippetExecutorHyper
82cdf0e10cSrcweir 
83cdf0e10cSrcweir .globl _privateSnippetExecutorFloat
84cdf0e10cSrcweir _privateSnippetExecutorFloat:
85cdf0e10cSrcweir .LFBf:
86cdf0e10cSrcweir     movl    %esp,%ecx
87cdf0e10cSrcweir     pushl   %ebp              # proper stack frame needed for exception handling
88cdf0e10cSrcweir .LCFIf0:
89cdf0e10cSrcweir     movl    %esp,%ebp
90cdf0e10cSrcweir .LCFIf1:
91cdf0e10cSrcweir     subl    $0x4,%esp         # 32bit returnValue
92cdf0e10cSrcweir     pushl   %esp              # 32bit &returnValue
93cdf0e10cSrcweir     pushl   %ecx              # 32bit pCallStack
94cdf0e10cSrcweir     pushl   %edx              # 32bit nVtableOffset
95cdf0e10cSrcweir     pushl   %eax              # 32bit nFunctionIndex
96cdf0e10cSrcweir     call    _cpp_vtable_call
97cdf0e10cSrcweir     flds    16(%esp)          # 32bit returnValue
98cdf0e10cSrcweir     leave
99cdf0e10cSrcweir     ret
100cdf0e10cSrcweir .LFEf:
101cdf0e10cSrcweir     .long   .-_privateSnippetExecutorFloat
102cdf0e10cSrcweir 
103cdf0e10cSrcweir .globl _privateSnippetExecutorDouble
104cdf0e10cSrcweir _privateSnippetExecutorDouble:
105cdf0e10cSrcweir .LFBd:
106cdf0e10cSrcweir     movl    %esp,%ecx
107cdf0e10cSrcweir     pushl   %ebp              # proper stack frame needed for exception handling
108cdf0e10cSrcweir .LCFId0:
109cdf0e10cSrcweir     movl    %esp,%ebp
110cdf0e10cSrcweir .LCFId1:
111cdf0e10cSrcweir     subl    $0x8,%esp         # 64bit returnValue
112cdf0e10cSrcweir     pushl   %esp              # 32bit &returnValue
113cdf0e10cSrcweir     pushl   %ecx              # 32bit pCallStack
114cdf0e10cSrcweir     pushl   %edx              # 32bit nVtableOffset
115cdf0e10cSrcweir     pushl   %eax              # 32bit nFunctionIndex
116cdf0e10cSrcweir     call    _cpp_vtable_call
117cdf0e10cSrcweir     fldl    16(%esp)          # 64bit returnValue
118cdf0e10cSrcweir     leave
119cdf0e10cSrcweir     ret
120cdf0e10cSrcweir .LFEd:
121cdf0e10cSrcweir     .long   .-_privateSnippetExecutorDouble
122cdf0e10cSrcweir 
123cdf0e10cSrcweir .globl _privateSnippetExecutorClass
124cdf0e10cSrcweir _privateSnippetExecutorClass:
125cdf0e10cSrcweir .LFBc:
126cdf0e10cSrcweir     movl    %esp,%ecx
127cdf0e10cSrcweir     pushl   %ebp              # proper stack frame needed for exception handling
128cdf0e10cSrcweir .LCFIc0:
129cdf0e10cSrcweir     movl    %esp,%ebp
130cdf0e10cSrcweir .LCFIc1:
131cdf0e10cSrcweir     subl    $0x4,%esp         # 32bit returnValue
132cdf0e10cSrcweir     pushl   %esp              # 32bit &returnValue
133cdf0e10cSrcweir     pushl   %ecx              # 32bit pCallStack
134cdf0e10cSrcweir     pushl   %edx              # 32bit nVtableOffset
135cdf0e10cSrcweir     pushl   %eax              # 32bit nFunctionIndex
136cdf0e10cSrcweir     call    _cpp_vtable_call
137cdf0e10cSrcweir     movl    16(%esp),%eax     # 32bit returnValue
138cdf0e10cSrcweir     leave
139cdf0e10cSrcweir     ret     $4
140cdf0e10cSrcweir .LFEc:
141cdf0e10cSrcweir     .long   .-_privateSnippetExecutorClass
142cdf0e10cSrcweir 
143cdf0e10cSrcweir     .section .eh_frame,"dr"
144cdf0e10cSrcweir .Lframe1:
145cdf0e10cSrcweir     .long   .LECIE1-.LSCIE1   # length
146cdf0e10cSrcweir .LSCIE1:
147cdf0e10cSrcweir     .long   0                 # CIE_ID
148cdf0e10cSrcweir     .byte   1                 # version
149cdf0e10cSrcweir     .string "zR"              # augmentation
150cdf0e10cSrcweir     .uleb128 1                # code_alignment_factor
151cdf0e10cSrcweir     .sleb128 -4               # data_alignment_factor
152cdf0e10cSrcweir     .byte   8                 # return_address_register
153cdf0e10cSrcweir     .uleb128 1                # augmentation size 1:
154cdf0e10cSrcweir     .byte   0x1B              #  FDE Encoding (pcrel sdata4)
155cdf0e10cSrcweir                               # initial_instructions:
156cdf0e10cSrcweir     .byte   0x0C              #  DW_CFA_def_cfa %esp, 4
157cdf0e10cSrcweir     .uleb128 4
158cdf0e10cSrcweir     .uleb128 4
159cdf0e10cSrcweir     .byte   0x88              #  DW_CFA_offset ret, 1
160cdf0e10cSrcweir     .uleb128 1
161cdf0e10cSrcweir     .align 4
162cdf0e10cSrcweir .LECIE1:
163cdf0e10cSrcweir .LSFDEg:
164cdf0e10cSrcweir     .long   .LEFDEg-.LASFDEg  # length
165cdf0e10cSrcweir .LASFDEg:
166cdf0e10cSrcweir     .long   .LASFDEg-.Lframe1 # CIE_pointer
167cdf0e10cSrcweir     .long   .LFBg-.           # initial_location
168cdf0e10cSrcweir     .long   .LFEg-.LFBg       # address_range
169cdf0e10cSrcweir     .uleb128 0                # augmentation size 0
170cdf0e10cSrcweir                               # instructions:
171cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
172cdf0e10cSrcweir     .long   .LCFIg0-.LFBg
173cdf0e10cSrcweir     .byte   0x0E              #  DW_CFA_def_cfa_offset 8
174cdf0e10cSrcweir     .uleb128 8
175cdf0e10cSrcweir     .byte   0x85              #  DW_CFA_offset %ebp, 2
176cdf0e10cSrcweir     .uleb128 2
177cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
178cdf0e10cSrcweir     .long   .LCFIg1-.LCFIg0
179cdf0e10cSrcweir     .byte   0x0D              #  DW_CFA_def_cfa_register %ebp
180cdf0e10cSrcweir     .uleb128 5
181cdf0e10cSrcweir     .align 4
182cdf0e10cSrcweir .LEFDEg:
183cdf0e10cSrcweir .LSFDEv:
184cdf0e10cSrcweir     .long   .LEFDEv-.LASFDEv  # length
185cdf0e10cSrcweir .LASFDEv:
186cdf0e10cSrcweir     .long   .LASFDEv-.Lframe1 # CIE_pointer
187cdf0e10cSrcweir     .long   .LFBv-.           # initial_location
188cdf0e10cSrcweir     .long   .LFEv-.LFBv       # address_range
189cdf0e10cSrcweir     .uleb128 0                # augmentation size 0
190cdf0e10cSrcweir                               # instructions:
191cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
192cdf0e10cSrcweir     .long   .LCFIv0-.LFBv
193cdf0e10cSrcweir     .byte   0x0E              #  DW_CFA_def_cfa_offset 8
194cdf0e10cSrcweir     .uleb128 8
195cdf0e10cSrcweir     .byte   0x85              #  DW_CFA_offset %ebp, 2
196cdf0e10cSrcweir     .uleb128 2
197cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
198cdf0e10cSrcweir     .long   .LCFIv1-.LCFIv0
199cdf0e10cSrcweir     .byte   0x0D              #  DW_CFA_def_cfa_register %ebp
200cdf0e10cSrcweir     .uleb128 5
201cdf0e10cSrcweir     .align 4
202cdf0e10cSrcweir .LEFDEv:
203cdf0e10cSrcweir .LSFDEh:
204cdf0e10cSrcweir     .long   .LEFDEh-.LASFDEh  # length
205cdf0e10cSrcweir .LASFDEh:
206cdf0e10cSrcweir     .long   .LASFDEh-.Lframe1 # CIE_pointer
207cdf0e10cSrcweir     .long   .LFBh-.           # initial_location
208cdf0e10cSrcweir     .long   .LFEh-.LFBh       # address_range
209cdf0e10cSrcweir     .uleb128 0                # augmentation size 0
210cdf0e10cSrcweir                               # instructions:
211cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
212cdf0e10cSrcweir     .long   .LCFIh0-.LFBh
213cdf0e10cSrcweir     .byte   0x0E              #  DW_CFA_def_cfa_offset 8
214cdf0e10cSrcweir     .uleb128 8
215cdf0e10cSrcweir     .byte   0x85              #  DW_CFA_offset %ebp, 2
216cdf0e10cSrcweir     .uleb128 2
217cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
218cdf0e10cSrcweir     .long   .LCFIh1-.LCFIh0
219cdf0e10cSrcweir     .byte   0x0D              #  DW_CFA_def_cfa_register %ebp
220cdf0e10cSrcweir     .uleb128 5
221cdf0e10cSrcweir     .align 4
222cdf0e10cSrcweir .LEFDEh:
223cdf0e10cSrcweir .LSFDEf:
224cdf0e10cSrcweir     .long   .LEFDEf-.LASFDEf  # length
225cdf0e10cSrcweir .LASFDEf:
226cdf0e10cSrcweir     .long   .LASFDEf-.Lframe1 # CIE_pointer
227cdf0e10cSrcweir     .long   .LFBf-.           # initial_location
228cdf0e10cSrcweir     .long   .LFEf-.LFBf       # address_range
229cdf0e10cSrcweir     .uleb128 0                # augmentation size 0
230cdf0e10cSrcweir                               # instructions:
231cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
232cdf0e10cSrcweir     .long   .LCFIf0-.LFBf
233cdf0e10cSrcweir     .byte   0x0E              #  DW_CFA_def_cfa_offset 8
234cdf0e10cSrcweir     .uleb128 8
235cdf0e10cSrcweir     .byte   0x85              #  DW_CFA_offset %ebp, 2
236cdf0e10cSrcweir     .uleb128 2
237cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
238cdf0e10cSrcweir     .long   .LCFIf1-.LCFIf0
239cdf0e10cSrcweir     .byte   0x0D              #  DW_CFA_def_cfa_register %ebp
240cdf0e10cSrcweir     .uleb128 5
241cdf0e10cSrcweir     .align 4
242cdf0e10cSrcweir .LEFDEf:
243cdf0e10cSrcweir .LSFDEd:
244cdf0e10cSrcweir     .long   .LEFDEd-.LASFDEd  # length
245cdf0e10cSrcweir .LASFDEd:
246cdf0e10cSrcweir     .long   .LASFDEd-.Lframe1 # CIE_pointer
247cdf0e10cSrcweir     .long   .LFBd-.           # initial_location
248cdf0e10cSrcweir     .long   .LFEd-.LFBd       # address_range
249cdf0e10cSrcweir     .uleb128 0                # augmentation size 0
250cdf0e10cSrcweir                               # instructions:
251cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
252cdf0e10cSrcweir     .long   .LCFId0-.LFBd
253cdf0e10cSrcweir     .byte   0x0E              #  DW_CFA_def_cfa_offset 8
254cdf0e10cSrcweir     .uleb128 8
255cdf0e10cSrcweir     .byte   0x85              #  DW_CFA_offset %ebp, 2
256cdf0e10cSrcweir     .uleb128 2
257cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
258cdf0e10cSrcweir     .long   .LCFId1-.LCFId0
259cdf0e10cSrcweir     .byte   0x0D              #  DW_CFA_def_cfa_register %ebp
260cdf0e10cSrcweir     .uleb128 5
261cdf0e10cSrcweir     .align 4
262cdf0e10cSrcweir .LEFDEd:
263cdf0e10cSrcweir .LSFDEc:
264cdf0e10cSrcweir     .long   .LEFDEc-.LASFDEc  # length
265cdf0e10cSrcweir .LASFDEc:
266cdf0e10cSrcweir     .long   .LASFDEc-.Lframe1 # CIE_pointer
267cdf0e10cSrcweir     .long   .LFBc-.           # initial_location
268cdf0e10cSrcweir     .long   .LFEc-.LFBc       # address_range
269cdf0e10cSrcweir     .uleb128 0                # augmentation size 0
270cdf0e10cSrcweir                               # instructions:
271cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
272cdf0e10cSrcweir     .long   .LCFIc0-.LFBc
273cdf0e10cSrcweir     .byte   0x0E              #  DW_CFA_def_cfa_offset 8
274cdf0e10cSrcweir     .uleb128 8
275cdf0e10cSrcweir     .byte   0x85              #  DW_CFA_offset %ebp, 2
276cdf0e10cSrcweir     .uleb128 2
277cdf0e10cSrcweir     .byte   0x04              #  DW_CFA_advance_loc4
278cdf0e10cSrcweir     .long   .LCFIc1-.LCFIc0
279cdf0e10cSrcweir     .byte   0x0D              #  DW_CFA_def_cfa_register %ebp
280cdf0e10cSrcweir     .uleb128 5
281cdf0e10cSrcweir     .align 4
282cdf0e10cSrcweir .LEFDEc:
283