24#include <typelib/typeclass.h>
25#include <typelib/typedescription.h>
47 void * pThis, sal_uInt32 nVtableIndex,
void * pRegisterReturn,
48 typelib_TypeDescriptionReference * pReturnTypeRef,
bool bSimpleReturn,
49 sal_uInt64 *pStack, sal_uInt32 nStack, sal_uInt64 *pGPR,
double * pFPR)
71 sal_uInt64 pMethod = *
static_cast<sal_uInt64 *
>(pThis);
72 pMethod += 8 * nVtableIndex;
73 data.pMethod = *
reinterpret_cast<sal_uInt64 *
>(pMethod);
77 "movq %%rsp, %%r12\n\t"
78 "movl 16%0, %%ecx\n\t"
80 "xor %%rax, %%rax\n\t"
81 "leaq (%%rax, %%rcx, 8), %%rax\n\t"
82 "subq %%rax, %%rsp\n\t"
87 "movq (%%rsi, %%rcx, 8), %%rax\n\t"
88 "movq %%rax, (%%rsp, %%rcx, 8)\n\t"
93 "movq 32%0, %%rax\n\t"
95 "movsd (%%rax), %%xmm0\n\t"
96 "movsd 8(%%rax), %%xmm1\n\t"
97 "movsd 16(%%rax), %%xmm2\n\t"
98 "movsd 24(%%rax), %%xmm3\n\t"
99 "movsd 32(%%rax), %%xmm4\n\t"
100 "movsd 40(%%rax), %%xmm5\n\t"
101 "movsd 48(%%rax), %%xmm6\n\t"
102 "movsd 56(%%rax), %%xmm7\n\t"
105 "movq 24%0, %%rax\n\t"
107 "movq (%%rax), %%rdi\n\t"
108 "movq 8(%%rax), %%rsi\n\t"
109 "movq 16(%%rax), %%rdx\n\t"
110 "movq 24(%%rax), %%rcx\n\t"
111 "movq 32(%%rax), %%r8\n\t"
112 "movq 40(%%rax), %%r9\n\t"
115 "movq 0%0, %%r11\n\t"
119 "movq %%rax, 40%0\n\t"
120 "movq %%rdx, 48%0\n\t"
121 "movsd %%xmm0, 56%0\n\t"
122 "movsd %%xmm1, 64%0\n\t"
125 "movq %%r12, %%rsp\n\t"
127 :
"rax",
"rdi",
"rsi",
"rdx",
"rcx",
"r8",
"r9",
"r10",
"r11",
"r12",
128 "xmm0",
"xmm1",
"xmm2",
"xmm3",
"xmm4",
"xmm5",
"xmm6",
"xmm7",
129 "xmm8",
"xmm9",
"xmm10",
"xmm11",
"xmm12",
"xmm13",
"xmm14",
"xmm15",
133 switch (pReturnTypeRef->eTypeClass)
135 case typelib_TypeClass_HYPER:
136 case typelib_TypeClass_UNSIGNED_HYPER:
137 *
static_cast<sal_uInt64 *
>( pRegisterReturn ) = data.rax;
139 case typelib_TypeClass_LONG:
140 case typelib_TypeClass_UNSIGNED_LONG:
141 case typelib_TypeClass_ENUM:
142 *
static_cast<sal_uInt32 *
>( pRegisterReturn ) = *
reinterpret_cast<sal_uInt32*
>( &data.rax );
144 case typelib_TypeClass_CHAR:
145 case typelib_TypeClass_SHORT:
146 case typelib_TypeClass_UNSIGNED_SHORT:
147 *
static_cast<sal_uInt16 *
>( pRegisterReturn ) = *
reinterpret_cast<sal_uInt16*
>( &data.rax );
149 case typelib_TypeClass_BOOLEAN:
150 case typelib_TypeClass_BYTE:
151 *
static_cast<sal_uInt8 *
>( pRegisterReturn ) = *
reinterpret_cast<sal_uInt8*
>( &data.rax );
153 case typelib_TypeClass_FLOAT:
154 case typelib_TypeClass_DOUBLE:
155 *
static_cast<double *
>( pRegisterReturn ) = data.xmm0;
159 sal_Int32
const nRetSize = pReturnTypeRef->pType->nSize;
160 if (bSimpleReturn && nRetSize <= 16 && nRetSize > 0)
167 doubles[0] = data.xmm0;
168 doubles[1] = data.xmm1;
if(aStr !=aBuf) UpdateName_Impl(m_xFollowLb.get()
void callVirtualMethod(void *pAdjustedThisPtr, sal_Int32 nVtableIndex, void *pRegisterReturn, typelib_TypeDescription *pReturnTypeDescr, bool bSimpleReturn, sal_Int32 *pStackLongs, sal_Int32 nStackLongs)
void fill_struct(typelib_TypeDescriptionReference *pTypeRef, const sal_uInt64 *pGPR, const double *pSSE, void *pStruct) noexcept