VirtualBox

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

Last change on this file since 4837 was 4071, checked in by vboxsync, 17 years ago

Biggest check-in ever. New source code headers for all (C) innotek files.

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

© 2023 Oracle
ContactPrivacy policyTerms of Use