summaryrefslogtreecommitdiffstats
path: root/xpcom/reflect/xptcall/md/unix/xptcstubs_asm_x86_64_solaris_SUNW.s
blob: aa6d84434a81250ce1adf9306f26bf062c79b0a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#define STUB_ENTRY1(nn) \
    .globl	__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_; \
    .hidden	__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_; \
    .type	__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_, @function; \
__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_: \
    movl	$/**/nn/**/, %eax; \
    jmp	SharedStub; \
    .size	__1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseFStub/**/nn/**/6M_I_ \

#define STUB_ENTRY2(nn) \
    .globl	__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_; \
    .hidden	__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_; \
    .type	__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_, @function; \
__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_: \
    movl	$/**/nn/**/, %eax; \
    jmp	SharedStub; \
    .size	__1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseGStub/**/nn/**/6M_I_ \

#define STUB_ENTRY3(nn) \
    .globl	__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_; \
    .hidden	__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_; \
    .type	__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_, @function; \
__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_: \
    movl	$/**/nn/**/, %eax; \
    jmp	SharedStub; \
    .size	__1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_, . - __1cOnsXPTCStubBaseHStub/**/nn/**/6M_I_ \

// static nsresult SharedStub(uint32_t methodIndex)
    .type      SharedStub, @function;
    SharedStub:
    // make room for gpregs (48), fpregs (64)
    pushq      %rbp;
    movq       %rsp,%rbp;
    subq       $112,%rsp;
    // save GP registers
    movq       %rdi,-112(%rbp);
    movq       %rsi,-104(%rbp);
    movq       %rdx, -96(%rbp);
    movq       %rcx, -88(%rbp);
    movq       %r8 , -80(%rbp);
    movq       %r9 , -72(%rbp);
    leaq       -112(%rbp),%rcx;
    // save FP registers
    movsd      %xmm0,-64(%rbp);
    movsd      %xmm1,-56(%rbp);
    movsd      %xmm2,-48(%rbp);
    movsd      %xmm3,-40(%rbp);
    movsd      %xmm4,-32(%rbp);
    movsd      %xmm5,-24(%rbp);
    movsd      %xmm6,-16(%rbp);
    movsd      %xmm7, -8(%rbp);
    leaq       -64(%rbp),%r8;
    // rdi has the 'self' pointer already
    movl       %eax,%esi;
    leaq       16(%rbp),%rdx;
    call       PrepareAndDispatch@plt;
    leave;
    ret;
    .size      SharedStub, . - SharedStub

#define SENTINEL_ENTRY(nn)

#include "xptcstubsdef_asm.solx86"