Lines 45-56
Link Here
|
45 |
{ |
45 |
{ |
46 |
|
46 |
|
47 |
//================================================================================================== |
47 |
//================================================================================================== |
48 |
static void callVirtualMethod( |
48 |
void callVirtualMethod( |
49 |
void * pAdjustedThisPtr, |
49 |
void * pAdjustedThisPtr, |
50 |
sal_Int32 nVtableIndex, |
50 |
sal_Int32 nVtableIndex, |
51 |
void * pRegisterReturn, |
51 |
void * pRegisterReturn, |
52 |
typelib_TypeClass eReturnType, |
52 |
typelib_TypeClass eReturnType, |
53 |
sal_Int32 * pStackLongs, |
53 |
sal_Int32 * pStackLongs, |
|
|
54 |
sal_Int32 nStackLongs ) __attribute__((noinline)); |
55 |
|
56 |
void callVirtualMethod( |
57 |
void * pAdjustedThisPtr, |
58 |
sal_Int32 nVtableIndex, |
59 |
void * pRegisterReturn, |
60 |
typelib_TypeClass eReturnType, |
61 |
sal_Int32 * pStackLongs, |
54 |
sal_Int32 nStackLongs ) |
62 |
sal_Int32 nStackLongs ) |
55 |
{ |
63 |
{ |
56 |
// parameter list is mixed list of * and values |
64 |
// parameter list is mixed list of * and values |
Lines 67-72
Link Here
|
67 |
void * stackptr; |
75 |
void * stackptr; |
68 |
asm volatile ( |
76 |
asm volatile ( |
69 |
"mov %%esp, %6\n\t" |
77 |
"mov %%esp, %6\n\t" |
|
|
78 |
// preserve potential 128bit stack alignment |
79 |
"and $0xfffffff0, %%esp\n\t" |
80 |
"mov %0, %%eax\n\t" |
81 |
"lea -4(,%%eax,4), %%eax\n\t" |
82 |
"and $0xf, %%eax\n\t" |
83 |
"sub $0xc, %%eax\n\t" |
84 |
"add %%eax, %%esp\n\t" |
70 |
// copy values |
85 |
// copy values |
71 |
"mov %0, %%eax\n\t" |
86 |
"mov %0, %%eax\n\t" |
72 |
"mov %%eax, %%edx\n\t" |
87 |
"mov %%eax, %%edx\n\t" |