[LoongArch64] Part-5:add loongarch support in some files for LoongArch64. (#21769)
[mono-project.git] / mono / utils / win64.asm
blob590b2fbf1da0ee79652a6e6ad68e975d2463f408
1 ifdef RAX
2 else
4 .386
5 .model flat, c
7 endif
9 .code
11 ifdef RAX
13 PUBLIC mono_context_get_current
15 mono_context_get_current PROC
16 ;rcx has the ctx ptr
17 mov [rcx + 00h], rax
18 mov [rcx + 08h], rcx
19 mov [rcx + 10h], rdx
20 mov [rcx + 18h], rbx
21 mov [rcx + 28h], rbp
22 mov [rcx + 30h], rsi
23 mov [rcx + 38h], rdi
24 mov [rcx + 40h], r8
25 mov [rcx + 48h], r9
26 mov [rcx + 50h], r10
27 mov [rcx + 58h], r11
28 mov [rcx + 60h], r12
29 mov [rcx + 68h], r13
30 mov [rcx + 70h], r14
31 mov [rcx + 78h], r15
33 lea rax, [rsp+8]
34 mov [rcx + 20h], rax
36 mov rax, qword ptr [rsp]
37 mov [rcx + 80h], rax
39 movaps xmmword ptr [rcx + 90h], xmm0
40 movaps xmmword ptr [rcx + 0A0h], xmm1
41 movaps xmmword ptr [rcx + 0B0h], xmm2
42 movaps xmmword ptr [rcx + 0C0h], xmm3
43 movaps xmmword ptr [rcx + 0D0h], xmm4
44 movaps xmmword ptr [rcx + 0E0h], xmm5
45 movaps xmmword ptr [rcx + 0F0h], xmm6
46 movaps xmmword ptr [rcx + 100h], xmm7
47 movaps xmmword ptr [rcx + 110h], xmm8
48 movaps xmmword ptr [rcx + 120h], xmm9
49 movaps xmmword ptr [rcx + 130h], xmm10
50 movaps xmmword ptr [rcx + 140h], xmm11
51 movaps xmmword ptr [rcx + 150h], xmm12
52 movaps xmmword ptr [rcx + 160h], xmm13
53 movaps xmmword ptr [rcx + 170h], xmm14
54 movaps xmmword ptr [rcx + 180h], xmm15
56 ret
58 mono_context_get_current endP
60 PUBLIC mono_context_get_current_avx
62 mono_context_get_current_avx PROC
63 ;rcx has the ctx ptr
64 mov [rcx + 00h], rax
65 mov [rcx + 08h], rcx
66 mov [rcx + 10h], rdx
67 mov [rcx + 18h], rbx
68 mov [rcx + 28h], rbp
69 mov [rcx + 30h], rsi
70 mov [rcx + 38h], rdi
71 mov [rcx + 40h], r8
72 mov [rcx + 48h], r9
73 mov [rcx + 50h], r10
74 mov [rcx + 58h], r11
75 mov [rcx + 60h], r12
76 mov [rcx + 68h], r13
77 mov [rcx + 70h], r14
78 mov [rcx + 78h], r15
80 lea rax, [rsp+8]
81 mov [rcx + 20h], rax
83 mov rax, qword ptr [rsp]
84 mov [rcx + 80h], rax
86 movaps xmmword ptr [rcx + 90h], xmm0
87 movaps xmmword ptr [rcx + 0A0h], xmm1
88 movaps xmmword ptr [rcx + 0B0h], xmm2
89 movaps xmmword ptr [rcx + 0C0h], xmm3
90 movaps xmmword ptr [rcx + 0D0h], xmm4
91 movaps xmmword ptr [rcx + 0E0h], xmm5
92 movaps xmmword ptr [rcx + 0F0h], xmm6
93 movaps xmmword ptr [rcx + 100h], xmm7
94 movaps xmmword ptr [rcx + 110h], xmm8
95 movaps xmmword ptr [rcx + 120h], xmm9
96 movaps xmmword ptr [rcx + 130h], xmm10
97 movaps xmmword ptr [rcx + 140h], xmm11
98 movaps xmmword ptr [rcx + 150h], xmm12
99 movaps xmmword ptr [rcx + 160h], xmm13
100 movaps xmmword ptr [rcx + 170h], xmm14
101 movaps xmmword ptr [rcx + 180h], xmm15
103 vextractf128 xmmword ptr [rcx + 190h],ymm0,1
104 vextractf128 xmmword ptr [rcx + 1A0h],ymm1,1
105 vextractf128 xmmword ptr [rcx + 1B0h],ymm2,1
106 vextractf128 xmmword ptr [rcx + 1C0h],ymm3,1
107 vextractf128 xmmword ptr [rcx + 1D0h],ymm4,1
108 vextractf128 xmmword ptr [rcx + 1E0h],ymm5,1
109 vextractf128 xmmword ptr [rcx + 1F0h],ymm6,1
110 vextractf128 xmmword ptr [rcx + 200h],ymm7,1
111 vextractf128 xmmword ptr [rcx + 210h],ymm8,1
112 vextractf128 xmmword ptr [rcx + 220h],ymm9,1
113 vextractf128 xmmword ptr [rcx + 230h],ymm10,1
114 vextractf128 xmmword ptr [rcx + 240h],ymm11,1
115 vextractf128 xmmword ptr [rcx + 250h],ymm12,1
116 vextractf128 xmmword ptr [rcx + 260h],ymm13,1
117 vextractf128 xmmword ptr [rcx + 270h],ymm14,1
118 vextractf128 xmmword ptr [rcx + 280h],ymm15,1
122 mono_context_get_current_avx endP
124 ; Implementation of __builtin_unwind_init under MSVC, dumping
125 ; nonvolatile registers into MonoBuiltinUnwindInfo *.
127 copy_stack_data_internal_win32_wrapper PROC PUBLIC
128 ;rcx MonoThreadInfo *
129 ;rdx MonoStackData *
130 ;r8 MonoBuiltinUnwindInfo *
131 ;r9 CopyStackDataFunc
133 movaps xmmword ptr [r8 + 00h], xmm6
134 movaps xmmword ptr [r8 + 10h], xmm7
135 movaps xmmword ptr [r8 + 20h], xmm8
136 movaps xmmword ptr [r8 + 30h], xmm9
137 movaps xmmword ptr [r8 + 40h], xmm10
138 movaps xmmword ptr [r8 + 50h], xmm11
139 movaps xmmword ptr [r8 + 60h], xmm12
140 movaps xmmword ptr [r8 + 70h], xmm13
141 movaps xmmword ptr [r8 + 80h], xmm14
142 movaps xmmword ptr [r8 + 90h], xmm15
144 mov qword ptr [r8 + 0A0h], rbx
145 mov qword ptr [r8 + 0A8h], rsi
146 mov qword ptr [r8 + 0B0h], rdi
147 mov qword ptr [r8 + 0B8h], r12
148 mov qword ptr [r8 + 0C0h], r13
149 mov qword ptr [r8 + 0C8h], r14
150 mov qword ptr [r8 + 0D0h], r15
151 mov qword ptr [r8 + 0D8h], rbp
153 ; tailcall, all parameters passed through to CopyStackDataFunc.
154 jmp r9
156 copy_stack_data_internal_win32_wrapper endP
158 endif