VirtualBox

source: vbox/trunk/src/recompiler_new/VBoxREMWrapperA.asm@ 16254

Last change on this file since 16254 was 13456, checked in by vboxsync, 16 years ago

support for helper invocations outside of 32-bit range, compilation fixes

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette