xref: /trunk/main/bridges/source/cpp_uno/gcc3_freebsd_x86-64/call.s (revision 1c78a5d6c0093dece4c096ba53051800fbad6e33)
1    .text
2    .align 2
3.globl privateSnippetExecutor
4    .type   privateSnippetExecutor, @function
5privateSnippetExecutor:
6.LFB3:
7    pushq   %rbp
8.LCFI0:
9    movq    %rsp, %rbp
10.LCFI1:
11    subq    $160, %rsp
12.LCFI2:
13    movq    %r10, -152(%rbp)        # Save (nVtableOffset << 32) + nFunctionIndex
14
15    movq    %rdi, -112(%rbp)        # Save GP registers
16    movq    %rsi, -104(%rbp)
17    movq    %rdx, -96(%rbp)
18    movq    %rcx, -88(%rbp)
19    movq    %r8 , -80(%rbp)
20    movq    %r9 , -72(%rbp)
21
22    movsd   %xmm0, -64(%rbp)        # Save FP registers
23    movsd   %xmm1, -56(%rbp)
24    movsd   %xmm2, -48(%rbp)
25    movsd   %xmm3, -40(%rbp)
26    movsd   %xmm4, -32(%rbp)
27    movsd   %xmm5, -24(%rbp)
28    movsd   %xmm6, -16(%rbp)
29    movsd   %xmm7, -8(%rbp)
30
31    leaq    -144(%rbp), %r9         # 6th param: sal_uInt64 * pRegisterReturn
32    leaq    16(%rbp), %r8           # 5rd param: void ** ovrflw
33    leaq    -64(%rbp), %rcx         # 4th param: void ** fpreg
34    leaq    -112(%rbp), %rdx        # 3rd param: void ** gpreg
35    movl    -148(%rbp), %esi        # 2nd param: sal_int32 nVtableOffset
36    movl    -152(%rbp), %edi        # 1st param: sal_int32 nFunctionIndex
37
38    call    cpp_vtable_call
39
40    cmp $10, %rax                   # typelib_TypeClass_FLOAT
41    je  .Lfloat
42    cmp $11, %rax                   # typelib_TypeClass_DOUBLE
43    je  .Lfloat
44
45    movq    -144(%rbp), %rax        # Return value (int case)
46    movq    -136(%rbp), %rdx        # Return value (int case)
47    movq    -144(%rbp), %xmm0       # Return value (int case)
48    movq    -136(%rbp), %xmm1       # Return value (int case)
49    jmp .Lfinish
50.Lfloat:
51    movlpd  -144(%rbp), %xmm0       # Return value (float/double case)
52
53.Lfinish:
54    leave
55    ret
56.LFE3:
57    .size   privateSnippetExecutor, .-privateSnippetExecutor
58    .section    .eh_frame,"a",@progbits
59.Lframe1:
60    .long   .LECIE1-.LSCIE1
61.LSCIE1:
62    .long   0x0
63    .byte   0x1
64    .string "zR"
65    .uleb128 0x1
66    .sleb128 -8
67    .byte   0x10
68    .uleb128 0x1
69    .byte   0x1b
70    .byte   0xc
71    .uleb128 0x7
72    .uleb128 0x8
73    .byte   0x90
74    .uleb128 0x1
75    .align 8
76.LECIE1:
77.LSFDE1:
78    .long   .LEFDE1-.LASFDE1
79.LASFDE1:
80    .long   .LASFDE1-.Lframe1
81    .long   .LFB3-.
82    .long   .LFE3-.LFB3
83    .uleb128 0x0
84    .byte   0x4
85    .long   .LCFI0-.LFB3
86    .byte   0xe
87    .uleb128 0x10
88    .byte   0x86
89    .uleb128 0x2
90    .byte   0x4
91    .long   .LCFI1-.LCFI0
92    .byte   0xd
93    .uleb128 0x6
94    .align 8
95.LEFDE1:
96    .section    .note.GNU-stack,"",@progbits
97