VirtualBox

source: vbox/trunk/src/recompiler/VBoxREMWrapperA.asm@ 76553

Last change on this file since 76553 was 76553, checked in by vboxsync, 5 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.0 KB
Line 
1; $Id: VBoxREMWrapperA.asm 76553 2019-01-01 01:45:53Z vboxsync $
2;; @file
3; VBoxREM Wrapper, Assembly routines and wrapper Templates.
4;
5
6;
7; Copyright (C) 2006-2019 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17
18
19
20
21;*******************************************************************************
22;* Header Files *
23;*******************************************************************************
24%include "iprt/asmdefs.mac"
25
26%define REM_FIXUP_32_REAL_STUFF 0deadbeefh
27%define REM_FIXUP_64_REAL_STUFF 0deadf00df00ddeadh
28%define REM_FIXUP_64_DESC 0dead00010001deadh
29%define REM_FIXUP_64_LOG_ENTRY 0dead00020002deadh
30%define REM_FIXUP_64_LOG_EXIT 0dead00030003deadh
31%define REM_FIXUP_64_WRAP_GCC_CB 0dead00040004deadh
32
33;%define ENTRY_LOGGING 1
34;%define EXIT_LOGGING 1
35
36
37%ifdef RT_ARCH_AMD64
38 ;;
39 ; 64-bit pushad
40 %macro MY_PUSHAQ 0
41 push rax
42 push rbx
43 push rcx
44 push rdx
45 push rsi
46 push rdi
47 push rbp
48 push r8
49 push r9
50 push r10
51 push r11
52 push r12
53 push r13
54 push r14
55 push r15
56 %endmacro
57
58 ;;
59 ; 64-bit popad
60 %macro MY_POPAQ 0
61 pop r15
62 pop r14
63 pop r13
64 pop r12
65 pop r11
66 pop r10
67 pop r9
68 pop r8
69 pop rbp
70 pop rdi
71 pop rsi
72 pop rdx
73 pop rcx
74 pop rbx
75 pop rax
76 %endmacro
77
78 ;;
79 ; Entry logging
80 %ifdef ENTRY_LOGGING
81 %macro LOG_ENTRY 0
82 MY_PUSHAQ
83 push rbp
84 mov rbp, rsp
85 and rsp, ~0fh
86 sub rsp, 20h ; shadow space
87
88 %ifdef RT_OS_WINDOWS
89 mov rcx, REM_FIXUP_64_DESC
90 %else
91 mov rdi, REM_FIXUP_64_DESC
92 %endif
93 mov rax, REM_FIXUP_64_LOG_ENTRY
94 call rax
95
96 leave
97 MY_POPAQ
98 %endmacro
99 %else
100 %define LOG_ENTRY
101 %endif
102
103 ;;
104 ; Exit logging
105 %ifdef EXIT_LOGGING
106 %macro LOG_EXIT 0
107 MY_PUSHAQ
108 push rbp
109 mov rbp, rsp
110 and rsp, ~0fh
111 sub rsp, 20h ; shadow space
112
113 %ifdef RT_OS_WINDOWS
114 mov rdx, rax
115 mov rcx, REM_FIXUP_64_DESC
116 %else
117 mov rsi, eax
118 mov rdi, REM_FIXUP_64_DESC
119 %endif
120 mov rax, REM_FIXUP_64_LOG_EXIT
121 call rax
122
123 leave
124 MY_POPAQ
125 %endmacro
126 %else
127 %define LOG_EXIT
128 %endif
129
130%else
131 %define LOG_ENTRY
132 %define LOG_EXIT
133%endif
134
135
136BEGINCODE
137
138%ifdef RT_OS_WINDOWS
139 %ifdef RT_ARCH_AMD64
140
141
142BEGINPROC WrapGCC2MSC0Int
143 LOG_ENTRY
144 push rbp
145 mov rbp, rsp
146 sub rsp, 20h
147
148%ifdef USE_DIRECT_CALLS
149 call $+5+REM_FIXUP_32_REAL_STUFF
150%else
151 mov rax, REM_FIXUP_64_REAL_STUFF
152 call rax
153%endif
154
155 leave
156 LOG_EXIT
157 ret
158ENDPROC WrapGCC2MSC0Int
159
160
161BEGINPROC WrapGCC2MSC1Int
162 LOG_ENTRY
163 push rbp
164 mov rbp, rsp
165 sub rsp, 20h
166
167 mov rcx, rdi
168%ifdef USE_DIRECT_CALLS
169 call $+5+REM_FIXUP_32_REAL_STUFF
170%else
171 mov rax, REM_FIXUP_64_REAL_STUFF
172 call rax
173%endif
174
175 leave
176 LOG_EXIT
177 ret
178ENDPROC WrapGCC2MSC1Int
179
180
181BEGINPROC WrapGCC2MSC2Int
182 LOG_ENTRY
183 push rbp
184 mov rbp, rsp
185 sub rsp, 20h
186
187 mov rdx, rsi
188 mov rcx, rdi
189%ifdef USE_DIRECT_CALLS
190 call $+5+REM_FIXUP_32_REAL_STUFF
191%else
192 mov rax, REM_FIXUP_64_REAL_STUFF
193 call rax
194%endif
195
196 leave
197 LOG_EXIT
198 ret
199ENDPROC WrapGCC2MSC2Int
200
201
202BEGINPROC WrapGCC2MSC3Int
203 LOG_ENTRY
204 push rbp
205 mov rbp, rsp
206 sub rsp, 20h
207
208 mov r8, rdx
209 mov rdx, rsi
210 mov rcx, rdi
211%ifdef USE_DIRECT_CALLS
212 call $+5+REM_FIXUP_32_REAL_STUFF
213%else
214 mov rax, REM_FIXUP_64_REAL_STUFF
215 call rax
216%endif
217
218 leave
219 LOG_EXIT
220 ret
221ENDPROC WrapGCC2MSC3Int
222
223
224BEGINPROC WrapGCC2MSC4Int
225 LOG_ENTRY
226 push rbp
227 mov rbp, rsp
228 sub rsp, 20h
229
230 mov r9, rcx
231 mov r8, rdx
232 mov rdx, rsi
233 mov rcx, rdi
234%ifdef USE_DIRECT_CALLS
235 call $+5+REM_FIXUP_32_REAL_STUFF
236%else
237 mov rax, REM_FIXUP_64_REAL_STUFF
238 call rax
239%endif
240
241 leave
242 LOG_EXIT
243 ret
244ENDPROC WrapGCC2MSC4Int
245
246
247BEGINPROC WrapGCC2MSC5Int
248 LOG_ENTRY
249 push rbp
250 mov rbp, rsp
251 sub rsp, 30h
252
253 mov [rsp + 20h], r8
254 mov r9, rcx
255 mov r8, rdx
256 mov rdx, rsi
257 mov rcx, rdi
258%ifdef USE_DIRECT_CALLS
259 call $+5+REM_FIXUP_32_REAL_STUFF
260%else
261 mov rax, REM_FIXUP_64_REAL_STUFF
262 call rax
263%endif
264
265 leave
266 LOG_EXIT
267 ret
268ENDPROC WrapGCC2MSC5Int
269
270
271BEGINPROC WrapGCC2MSC6Int
272 LOG_ENTRY
273 push rbp
274 mov rbp, rsp
275 sub rsp, 30h
276
277 mov [rsp + 28h], r9
278 mov [rsp + 20h], r8
279 mov r9, rcx
280 mov r8, rdx
281 mov rdx, rsi
282 mov rcx, rdi
283%ifdef USE_DIRECT_CALLS
284 call $+5+REM_FIXUP_32_REAL_STUFF
285%else
286 mov rax, REM_FIXUP_64_REAL_STUFF
287 call rax
288%endif
289
290 leave
291 LOG_EXIT
292 ret
293ENDPROC WrapGCC2MSC6Int
294
295
296BEGINPROC WrapGCC2MSC7Int
297 LOG_ENTRY
298 push rbp
299 mov rbp, rsp
300 sub rsp, 40h
301
302 mov r11, [rbp + 10h]
303 mov [rsp + 30h], r11
304 mov [rsp + 28h], r9
305 mov [rsp + 20h], r8
306 mov r9, rcx
307 mov r8, rdx
308 mov rdx, rsi
309 mov rcx, rdi
310%ifdef USE_DIRECT_CALLS
311 call $+5+REM_FIXUP_32_REAL_STUFF
312%else
313 mov rax, REM_FIXUP_64_REAL_STUFF
314 call rax
315%endif
316
317 leave
318 LOG_EXIT
319 ret
320ENDPROC WrapGCC2MSC7Int
321
322
323BEGINPROC WrapGCC2MSC8Int
324 LOG_ENTRY
325 push rbp
326 mov rbp, rsp
327 sub rsp, 40h
328
329 mov r10, [rbp + 18h]
330 mov [rsp + 38h], r10
331 mov r11, [rbp + 10h]
332 mov [rsp + 30h], r11
333 mov [rsp + 28h], r9
334 mov [rsp + 20h], r8
335 mov r9, rcx
336 mov r8, rdx
337 mov rdx, rsi
338 mov rcx, rdi
339%ifdef USE_DIRECT_CALLS
340 call $+5+REM_FIXUP_32_REAL_STUFF
341%else
342 mov rax, REM_FIXUP_64_REAL_STUFF
343 call rax
344%endif
345
346 leave
347 LOG_EXIT
348 ret
349ENDPROC WrapGCC2MSC8Int
350
351
352BEGINPROC WrapGCC2MSC9Int
353 LOG_ENTRY
354 push rbp
355 mov rbp, rsp
356 sub rsp, 50h
357
358 mov rax, [rbp + 20h]
359 mov [rsp + 40h], rax
360 mov r10, [rbp + 18h]
361 mov [rsp + 38h], r10
362 mov r11, [rbp + 10h]
363 mov [rsp + 30h], r11
364 mov [rsp + 28h], r9
365 mov [rsp + 20h], r8
366 mov r9, rcx
367 mov r8, rdx
368 mov rdx, rsi
369 mov rcx, rdi
370%ifdef USE_DIRECT_CALLS
371 call $+5+REM_FIXUP_32_REAL_STUFF
372%else
373 mov rax, REM_FIXUP_64_REAL_STUFF
374 call rax
375%endif
376
377 leave
378 LOG_EXIT
379 ret
380ENDPROC WrapGCC2MSC9Int
381
382
383BEGINPROC WrapGCC2MSC10Int
384 LOG_ENTRY
385 push rbp
386 mov rbp, rsp
387 sub rsp, 50h
388
389 mov r11, [rbp + 28h]
390 mov [rsp + 48h], r11
391 mov rax, [rbp + 20h]
392 mov [rsp + 40h], rax
393 mov r10, [rbp + 18h]
394 mov [rsp + 38h], r10
395 mov r11, [rbp + 10h]
396 mov [rsp + 30h], r11
397 mov [rsp + 28h], r9
398 mov [rsp + 20h], r8
399 mov r9, rcx
400 mov r8, rdx
401 mov rdx, rsi
402 mov rcx, rdi
403%ifdef USE_DIRECT_CALLS
404 call $+5+REM_FIXUP_32_REAL_STUFF
405%else
406 mov rax, REM_FIXUP_64_REAL_STUFF
407 call rax
408%endif
409
410 leave
411 LOG_EXIT
412 ret
413ENDPROC WrapGCC2MSC10Int
414
415
416BEGINPROC WrapGCC2MSC11Int
417 LOG_ENTRY
418 push rbp
419 mov rbp, rsp
420 sub rsp, 60h
421
422 mov r10, [rbp + 30h]
423 mov [rsp + 50h], r10
424 mov r11, [rbp + 28h]
425 mov [rsp + 48h], r11
426 mov rax, [rbp + 20h]
427 mov [rsp + 40h], rax
428 mov r10, [rbp + 18h]
429 mov [rsp + 38h], r10
430 mov r11, [rbp + 10h]
431 mov [rsp + 30h], r11
432 mov [rsp + 28h], r9
433 mov [rsp + 20h], r8
434 mov r9, rcx
435 mov r8, rdx
436 mov rdx, rsi
437 mov rcx, rdi
438%ifdef USE_DIRECT_CALLS
439 call $+5+REM_FIXUP_32_REAL_STUFF
440%else
441 mov rax, REM_FIXUP_64_REAL_STUFF
442 call rax
443%endif
444
445 leave
446 LOG_EXIT
447 ret
448ENDPROC WrapGCC2MSC11Int
449
450
451BEGINPROC WrapGCC2MSC12Int
452 LOG_ENTRY
453 push rbp
454 mov rbp, rsp
455 sub rsp, 60h
456
457 mov rax, [rbp + 28h]
458 mov [rsp + 48h], rax
459 mov r10, [rbp + 30h]
460 mov [rsp + 50h], r10
461 mov r11, [rbp + 28h]
462 mov [rsp + 48h], r11
463 mov rax, [rbp + 20h]
464 mov [rsp + 40h], rax
465 mov r10, [rbp + 18h]
466 mov [rsp + 38h], r10
467 mov r11, [rbp + 10h]
468 mov [rsp + 30h], r11
469 mov [rsp + 28h], r9
470 mov [rsp + 20h], r8
471 mov r9, rcx
472 mov r8, rdx
473 mov rdx, rsi
474 mov rcx, rdi
475%ifdef USE_DIRECT_CALLS
476 call $+5+REM_FIXUP_32_REAL_STUFF
477%else
478 mov rax, REM_FIXUP_64_REAL_STUFF
479 call rax
480%endif
481
482 leave
483 LOG_EXIT
484 ret
485ENDPROC WrapGCC2MSC12Int
486
487
488
489BEGINPROC WrapGCC2MSCVariadictInt
490 LOG_ENTRY
491%ifdef DEBUG
492 ; check that there are NO floting point arguments in XMM registers!
493 or rax, rax
494 jz .ok
495 int3
496.ok:
497%endif
498 sub rsp, 28h
499 mov r11, [rsp + 28h] ; r11 = return address.
500 mov [rsp + 28h], r9
501 mov [rsp + 20h], r8
502 mov r9, rcx
503 mov [rsp + 18h], r9 ; (*)
504 mov r8, rdx
505 mov [rsp + 14h], r8 ; (*)
506 mov rdx, rsi
507 mov [rsp + 8h], rdx ; (*)
508 mov rcx, rdi
509 mov [rsp], rcx ; (*)
510 mov rsi, r11 ; rsi is preserved by the callee.
511%ifdef USE_DIRECT_CALLS
512 call $+5+REM_FIXUP_32_REAL_STUFF
513%else
514 mov rax, REM_FIXUP_64_REAL_STUFF
515 call rax
516%endif
517
518 add rsp, 30h
519 LOG_EXIT
520 jmp rsi
521 ; (*) unconditionally spill the registers, just in case '...' implies weird stuff on MSC. Check this out!
522ENDPROC WrapGCC2MSCVariadictInt
523
524
525;;
526; Custom template for SSMR3RegisterInternal.
527;
528; (This is based on the WrapGCC2MSC11Int template.)
529;
530; @cproto
531;
532; SSMR3DECL(int) SSMR3RegisterInternal(PVM pVM, const char *pszName, uint32_t u32Instance, uint32_t u32Version, size_t cbGuess,
533; PFNSSMINTLIVEPREP pfnLivePrep, PFNSSMINTLIVEEXEC pfnLiveExec, PFNSSMINTLIVEVOTE pfnLiveVote,
534; PFNSSMINTSAVEPREP pfnSavePrep, PFNSSMINTSAVEEXEC pfnSaveExec, PFNSSMINTSAVEDONE pfnSaveDone,
535; PFNSSMINTLOADPREP pfnLoadPrep, PFNSSMINTLOADEXEC pfnLoadExec, PFNSSMINTLOADDONE pfnLoadDone);
536;
537; @param pVM rdi 0
538; @param pszName rsi 1
539; @param u32Instance rdx 2
540; @param u32Version rcx 3
541; @param cbGuess r8 4
542; @param pfnLivePrep r9 5
543; @param pfnLiveExec rbp + 10h 6
544; @param pfnLiveVote rbp + 18h 7
545; @param pfnSavePrep rbp + 20h 8
546; @param pfnSaveExec rbp + 28h 9
547; @param pfnSaveDone rbp + 30h 10
548; @param pfnLoadPrep rbp + 38h 11
549; @param pfnLoadExec rbp + 40h 12
550; @param pfnLoadDone rbp + 48h 13
551;
552BEGINPROC WrapGCC2MSC_SSMR3RegisterInternal
553 LOG_ENTRY
554 push rbp
555 mov rbp, rsp
556
557 sub rsp, 80h
558
559 mov r10, [rbp + 48h]
560 mov [rsp + 68h], r10 ; pfnLiveDone
561 mov r11, [rbp + 40h]
562 mov [rsp + 60h], r11 ; pfnLiveExec
563 mov rax, [rbp + 38h]
564 mov [rsp + 58h], rax ; pfnLivePrep
565 mov r10, [rbp + 30h]
566 mov [rsp + 50h], r10 ; pfnLoadDone
567 mov r11, [rbp + 28h]
568 mov [rsp + 48h], r11 ; pfnLoadExec
569 mov rax, [rbp + 20h]
570 mov [rsp + 40h], rax ; pfnLoadPrep
571 mov r10, [rbp + 18h]
572 mov [rsp + 38h], r10 ; pfnSaveDone
573 mov r11, [rbp + 10h]
574 mov [rsp + 30h], r11 ; pfnSaveExec
575 mov [rsp + 28h], r9 ; pfnSavePrep
576 mov [rsp + 20h], r8
577 mov [rsp + 18h], rcx ; -> r9
578 mov [rsp + 10h], rdx ; -> r8
579 mov [rsp + 08h], rsi ; -> rdx
580 mov [rsp], rdi ; -> rcx
581
582 ; Now convert the function pointers. Have to setup a new shadow
583 ; space here since the SSMR3RegisterInternal one is already in use.
584 sub rsp, 20h
585
586 mov rcx, REM_FIXUP_64_DESC ; pDesc
587 lea rdx, [rsp + 28h + 20h] ; pValue
588 mov r8d, 5 ; iParam
589 mov rax, REM_FIXUP_64_WRAP_GCC_CB
590 call rax
591
592 mov rcx, REM_FIXUP_64_DESC ; pDesc
593 lea rdx, [rsp + 30h + 20h] ; pValue
594 mov r8d, 6 ; iParam
595 mov rax, REM_FIXUP_64_WRAP_GCC_CB
596 call rax
597
598 mov rcx, REM_FIXUP_64_DESC ; pDesc
599 lea rdx, [rsp + 38h + 20h] ; pValue
600 mov r8d, 7 ; iParam
601 mov rax, REM_FIXUP_64_WRAP_GCC_CB
602 call rax
603
604 mov rcx, REM_FIXUP_64_DESC ; pDesc
605 lea rdx, [rsp + 40h + 20h] ; pValue
606 mov r8d, 8 ; iParam
607 mov rax, REM_FIXUP_64_WRAP_GCC_CB
608 call rax
609
610 mov rcx, REM_FIXUP_64_DESC ; pDesc
611 lea rdx, [rsp + 48h + 20h] ; pValue
612 mov r8d, 9 ; iParam
613 mov rax, REM_FIXUP_64_WRAP_GCC_CB
614 call rax
615
616 mov rcx, REM_FIXUP_64_DESC ; pDesc
617 lea rdx, [rsp + 50h + 20h] ; pValue
618 mov r8d, 10 ; iParam
619 mov rax, REM_FIXUP_64_WRAP_GCC_CB
620 call rax
621
622 mov rcx, REM_FIXUP_64_DESC ; pDesc
623 lea rdx, [rsp + 58h + 20h] ; pValue
624 mov r8d, 11 ; iParam
625 mov rax, REM_FIXUP_64_WRAP_GCC_CB
626 call rax
627
628 mov rcx, REM_FIXUP_64_DESC ; pDesc
629 lea rdx, [rsp + 60h + 20h] ; pValue
630 mov r8d, 12 ; iParam
631 mov rax, REM_FIXUP_64_WRAP_GCC_CB
632 call rax
633
634 mov rcx, REM_FIXUP_64_DESC ; pDesc
635 lea rdx, [rsp + 68h + 20h] ; pValue
636 mov r8d, 13 ; iParam
637 mov rax, REM_FIXUP_64_WRAP_GCC_CB
638 call rax
639
640 add rsp, 20h
641
642 ; finally do the call.
643 mov r9, [rsp + 18h]
644 mov r8, [rsp + 10h]
645 mov rdx, [rsp + 08h]
646 mov rcx, [rsp]
647%ifdef USE_DIRECT_CALLS
648 call $+5+REM_FIXUP_32_REAL_STUFF
649%else
650 mov rax, REM_FIXUP_64_REAL_STUFF
651 call rax
652%endif
653
654 leave
655 LOG_EXIT
656 ret
657ENDPROC WrapGCC2MSC_SSMR3RegisterInternal
658
659
660;
661; The other way around:
662;
663
664
665BEGINPROC WrapMSC2GCC0Int
666 LOG_ENTRY
667 push rbp
668 mov rbp, rsp
669 sub rsp, 10h
670 mov [rbp - 10h], rsi
671 mov [rbp - 18h], rdi
672
673%ifdef USE_DIRECT_CALLS
674 call $+5+REM_FIXUP_32_REAL_STUFF
675%else
676 mov rax, REM_FIXUP_64_REAL_STUFF
677 call rax
678%endif
679
680 mov rdi, [rbp - 18h]
681 mov rsi, [rbp - 10h]
682 leave
683 LOG_EXIT
684 ret
685ENDPROC WrapMSC2GCC0Int
686
687
688BEGINPROC WrapMSC2GCC1Int
689 LOG_ENTRY
690 push rbp
691 mov rbp, rsp
692 sub rsp, 20h
693 mov [rbp - 10h], rsi
694 mov [rbp - 18h], rdi
695
696 mov rdi, rcx
697%ifdef USE_DIRECT_CALLS
698 call $+5+REM_FIXUP_32_REAL_STUFF
699%else
700 mov rax, REM_FIXUP_64_REAL_STUFF
701 call rax
702%endif
703
704 mov rdi, [rbp - 18h]
705 mov rsi, [rbp - 10h]
706 leave
707 LOG_EXIT
708 ret
709ENDPROC WrapMSC2GCC1Int
710
711
712BEGINPROC WrapMSC2GCC2Int
713 LOG_ENTRY
714 push rbp
715 mov rbp, rsp
716 sub rsp, 20h
717 mov [rbp - 10h], rsi
718 mov [rbp - 18h], rdi
719
720 mov rdi, rcx
721 mov rsi, rdx
722%ifdef USE_DIRECT_CALLS
723 call $+5+REM_FIXUP_32_REAL_STUFF
724%else
725 mov rax, REM_FIXUP_64_REAL_STUFF
726 call rax
727%endif
728
729 mov rdi, [rbp - 18h]
730 mov rsi, [rbp - 10h]
731 leave
732 LOG_EXIT
733 ret
734ENDPROC WrapMSC2GCC2Int
735
736
737BEGINPROC WrapMSC2GCC3Int
738 LOG_ENTRY
739 push rbp
740 mov rbp, rsp
741 sub rsp, 20h
742 mov [rbp - 10h], rsi
743 mov [rbp - 18h], rdi
744
745 mov rdi, rcx
746 mov rsi, rdx
747 mov rdx, r8
748 call $+5+REM_FIXUP_32_REAL_STUFF
749
750 mov rdi, [rbp - 18h]
751 mov rsi, [rbp - 10h]
752 leave
753 LOG_EXIT
754 ret
755ENDPROC WrapMSC2GCC3Int
756
757
758BEGINPROC WrapMSC2GCC4Int
759 LOG_ENTRY
760 push rbp
761 mov rbp, rsp
762 sub rsp, 20h
763 mov [rbp - 10h], rsi
764 mov [rbp - 18h], rdi
765
766 mov rdi, rcx
767 mov rsi, rdx
768 mov rdx, r8
769 mov rcx, r9
770 call $+5+REM_FIXUP_32_REAL_STUFF
771
772 mov rdi, [rbp - 18h]
773 mov rsi, [rbp - 10h]
774 leave
775 LOG_EXIT
776 ret
777ENDPROC WrapMSC2GCC4Int
778
779
780BEGINPROC WrapMSC2GCC5Int
781 LOG_ENTRY
782 push rbp
783 mov rbp, rsp
784 sub rsp, 20h
785 mov [rbp - 10h], rsi
786 mov [rbp - 18h], rdi
787
788 mov rdi, rcx
789 mov rsi, rdx
790 mov rdx, r8
791 mov rcx, r9
792 mov r8, [rbp + 30h]
793 call $+5+REM_FIXUP_32_REAL_STUFF
794
795 mov rdi, [rbp - 18h]
796 mov rsi, [rbp - 10h]
797 leave
798 LOG_EXIT
799 ret
800ENDPROC WrapMSC2GCC5Int
801
802
803BEGINPROC WrapMSC2GCC6Int
804 LOG_ENTRY
805 push rbp
806 mov rbp, rsp
807 sub rsp, 20h
808 mov [rbp - 10h], rsi
809 mov [rbp - 18h], rdi
810
811 mov rdi, rcx
812 mov rsi, rdx
813 mov rdx, r8
814 mov rcx, r9
815 mov r8, [rbp + 30h]
816 mov r9, [rbp + 38h]
817 call $+5+REM_FIXUP_32_REAL_STUFF
818
819 mov rdi, [rbp - 18h]
820 mov rsi, [rbp - 10h]
821 leave
822 LOG_EXIT
823 ret
824ENDPROC WrapMSC2GCC6Int
825
826
827BEGINPROC WrapMSC2GCC7Int
828 LOG_ENTRY
829 push rbp
830 mov rbp, rsp
831 sub rsp, 30h
832 mov [rbp - 10h], rsi
833 mov [rbp - 18h], rdi
834
835 mov rdi, rcx
836 mov rsi, rdx
837 mov rdx, r8
838 mov rcx, r9
839 mov r8, [rbp + 30h]
840 mov r9, [rbp + 38h]
841 mov r10, [rbp + 40h]
842 mov [rsp], r10
843 call $+5+REM_FIXUP_32_REAL_STUFF
844
845 mov rdi, [rbp - 18h]
846 mov rsi, [rbp - 10h]
847 leave
848 LOG_EXIT
849 ret
850ENDPROC WrapMSC2GCC7Int
851
852
853BEGINPROC WrapMSC2GCC8Int
854 LOG_ENTRY
855 push rbp
856 mov rbp, rsp
857 sub rsp, 30h
858 mov [rbp - 10h], rsi
859 mov [rbp - 18h], rdi
860
861 mov rdi, rcx
862 mov rsi, rdx
863 mov rdx, r8
864 mov rcx, r9
865 mov r8, [rbp + 30h]
866 mov r9, [rbp + 38h]
867 mov r10, [rbp + 40h]
868 mov [rsp], r10
869 mov r11, [rbp + 48h]
870 mov [rsp + 8], r11
871 call $+5+REM_FIXUP_32_REAL_STUFF
872
873 mov rdi, [rbp - 18h]
874 mov rsi, [rbp - 10h]
875 leave
876 LOG_EXIT
877 ret
878ENDPROC WrapMSC2GCC8Int
879
880
881BEGINPROC WrapMSC2GCC9Int
882 LOG_ENTRY
883 push rbp
884 mov rbp, rsp
885 sub rsp, 40h
886 mov [rbp - 10h], rsi
887 mov [rbp - 18h], rdi
888
889 mov rdi, rcx
890 mov rsi, rdx
891 mov rdx, r8
892 mov rcx, r9
893 mov r8, [rbp + 30h]
894 mov r9, [rbp + 38h]
895 mov r10, [rbp + 40h]
896 mov [rsp], r10
897 mov r11, [rbp + 48h]
898 mov [rsp + 8], r11
899 mov rax, [rbp + 50h]
900 mov [rsp + 10h], rax
901 call $+5+REM_FIXUP_32_REAL_STUFF
902
903 mov rdi, [rbp - 18h]
904 mov rsi, [rbp - 10h]
905 leave
906 LOG_EXIT
907 ret
908ENDPROC WrapMSC2GCC9Int
909
910 %endif ; RT_ARCH_AMD64
911%endif ; RT_OS_WINDOWS
912
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use