8955047a04b95ec939d74787334614ba8dfad8d5
[WebKit-https.git] / Source / JavaScriptCore / jit / JITStubsMSVC64.asm
1 ;/*
2 ; Copyright (C) 2013 Digia Plc. and/or its subsidiary(-ies)
3 ;
4 ; Redistribution and use in source and binary forms, with or without
5 ; modification, are permitted provided that the following conditions
6 ; are met:
7 ; 1. Redistributions of source code must retain the above copyright
8 ;    notice, this list of conditions and the following disclaimer.
9 ; 2. Redistributions in binary form must reproduce the above copyright
10 ;    notice, this list of conditions and the following disclaimer in the
11 ;    documentation and/or other materials provided with the distribution.
12 ;
13 ; THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 ; PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17 ; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 ; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 ; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 ; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 ; OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 ;*/
25
26 EXTERN cti_vm_throw : near
27 EXTERN cti_vm_handle_exception : near
28 EXTERN getHostCallReturnValueWithExecState : near
29
30 PUBLIC ctiTrampoline
31 PUBLIC ctiVMThrowTrampoline
32 PUBLIC ctiOpThrowNotCaught
33 PUBLIC getHostCallReturnValue
34
35 _TEXT   SEGMENT
36
37 ctiTrampoline PROC
38     ; Dump register parameters to their home address
39     mov qword ptr[rsp+20h], r9
40     mov qword ptr[rsp+18h], r8
41     mov qword ptr[rsp+10h], rdx
42     mov qword ptr[rsp+8h], rcx
43
44     push rbp
45     mov rbp, rsp
46     push r12
47     push r13
48     push r14
49     push r15
50     push rbx
51
52     ; Decrease rsp to point to the start of our JITStackFrame
53     sub rsp, 58h
54     mov r12, 512
55     mov r14, 0FFFF000000000000h
56     mov r15, 0FFFF000000000002h
57     mov r13, r8
58     call rcx
59     add rsp, 58h
60     pop rbx
61     pop r15
62     pop r14
63     pop r13
64     pop r12
65     pop rbp
66     ret
67 ctiTrampoline ENDP
68
69 ctiVMThrowTrampoline PROC
70     mov rcx, rsp
71     call cti_vm_throw
72     int 3
73 ctiVMThrowTrampoline ENDP
74
75 ctiVMHandleException PROC
76         sub rsp, 16
77     mov rcx, rsp
78         mov rdx, r13
79         call cti_vm_handle_exception
80     ; When cti_vm_handle_exception returns, rax points to the memory we allocated on stack
81         ; It contains the callFrame and handler address
82         pop rax         ; callFrame
83         pop rdx         ; handler
84     jmp rdx
85 ctiVMHandleException ENDP
86  
87 ctiOpThrowNotCaught PROC
88     add rsp, 58h
89     pop rbx
90     pop r15
91     pop r14
92     pop r13
93     pop r12
94     pop rbp
95     ret
96 ctiOpThrowNotCaught ENDP
97
98 getHostCallReturnValue PROC
99     sub r13, 40
100     mov r13, rdi
101     jmp getHostCallReturnValueWithExecState
102 getHostCallReturnValue ENDP
103
104 _TEXT   ENDS
105
106 END