1*b146d3b3SDamjan Jovanovic /**************************************************************
2*b146d3b3SDamjan Jovanovic  *
3*b146d3b3SDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*b146d3b3SDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*b146d3b3SDamjan Jovanovic  * distributed with this work for additional information
6*b146d3b3SDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*b146d3b3SDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*b146d3b3SDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*b146d3b3SDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*b146d3b3SDamjan Jovanovic  *
11*b146d3b3SDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*b146d3b3SDamjan Jovanovic  *
13*b146d3b3SDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*b146d3b3SDamjan Jovanovic  * software distributed under the License is distributed on an
15*b146d3b3SDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b146d3b3SDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*b146d3b3SDamjan Jovanovic  * specific language governing permissions and limitations
18*b146d3b3SDamjan Jovanovic  * under the License.
19*b146d3b3SDamjan Jovanovic  *
20*b146d3b3SDamjan Jovanovic  *************************************************************/
21*b146d3b3SDamjan Jovanovic 
22*b146d3b3SDamjan Jovanovic 
23*b146d3b3SDamjan Jovanovic 
24*b146d3b3SDamjan Jovanovic // MARKER(update_precomp.py): autogen include statement, do not remove
25*b146d3b3SDamjan Jovanovic #include "precompiled_bridges.hxx"
26*b146d3b3SDamjan Jovanovic 
27*b146d3b3SDamjan Jovanovic #include "abi.hxx"
28*b146d3b3SDamjan Jovanovic 
29*b146d3b3SDamjan Jovanovic #include <rtl/ustring.hxx>
30*b146d3b3SDamjan Jovanovic 
31*b146d3b3SDamjan Jovanovic using namespace x86_64;
32*b146d3b3SDamjan Jovanovic 
return_in_hidden_param(typelib_TypeDescriptionReference * pTypeRef)33*b146d3b3SDamjan Jovanovic bool x86_64::return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef )
34*b146d3b3SDamjan Jovanovic {
35*b146d3b3SDamjan Jovanovic     switch ( pTypeRef->eTypeClass )
36*b146d3b3SDamjan Jovanovic     {
37*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_VOID:
38*b146d3b3SDamjan Jovanovic             return false;
39*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_CHAR:
40*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_BOOLEAN:
41*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_BYTE:
42*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_SHORT:
43*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_UNSIGNED_SHORT:
44*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_LONG:
45*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_UNSIGNED_LONG:
46*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_HYPER:
47*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_UNSIGNED_HYPER:
48*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_ENUM:
49*b146d3b3SDamjan Jovanovic             return false;
50*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_FLOAT:
51*b146d3b3SDamjan Jovanovic             return false;
52*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_DOUBLE:
53*b146d3b3SDamjan Jovanovic             return false;
54*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_STRING:
55*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_TYPE:
56*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_ANY:
57*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_TYPEDEF:
58*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_UNION:
59*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_SEQUENCE:
60*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_ARRAY:
61*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_INTERFACE:
62*b146d3b3SDamjan Jovanovic             return true;
63*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_STRUCT:
64*b146d3b3SDamjan Jovanovic         case typelib_TypeClass_EXCEPTION:
65*b146d3b3SDamjan Jovanovic             {
66*b146d3b3SDamjan Jovanovic                 typelib_TypeDescription * pTypeDescr = 0;
67*b146d3b3SDamjan Jovanovic                 TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
68*b146d3b3SDamjan Jovanovic 
69*b146d3b3SDamjan Jovanovic                 /* If the struct is larger than 8 bytes, pass it on the stack.  */
70*b146d3b3SDamjan Jovanovic                 if ( pTypeDescr->nSize > 8 )
71*b146d3b3SDamjan Jovanovic                 {
72*b146d3b3SDamjan Jovanovic                     TYPELIB_DANGER_RELEASE( pTypeDescr );
73*b146d3b3SDamjan Jovanovic                     return false;
74*b146d3b3SDamjan Jovanovic                 }
75*b146d3b3SDamjan Jovanovic                 else
76*b146d3b3SDamjan Jovanovic                 {
77*b146d3b3SDamjan Jovanovic                     TYPELIB_DANGER_RELEASE( pTypeDescr );
78*b146d3b3SDamjan Jovanovic                     return true;
79*b146d3b3SDamjan Jovanovic                 }
80*b146d3b3SDamjan Jovanovic             }
81*b146d3b3SDamjan Jovanovic 
82*b146d3b3SDamjan Jovanovic         default:
83*b146d3b3SDamjan Jovanovic #if OSL_DEBUG_LEVEL > 1
84*b146d3b3SDamjan Jovanovic             OSL_TRACE( "Unhandled case: pType->eTypeClass == %d\n", pTypeRef->eTypeClass );
85*b146d3b3SDamjan Jovanovic #endif
86*b146d3b3SDamjan Jovanovic             OSL_ASSERT(0);
87*b146d3b3SDamjan Jovanovic     }
88*b146d3b3SDamjan Jovanovic     return 0; /* Never reached.  */
89*b146d3b3SDamjan Jovanovic }
90*b146d3b3SDamjan Jovanovic 
91