VirtualBox

root/trunk/src/recompiler/VBoxREMWrapperA.asm

Revision 12001, 19.0 kB (checked in by vboxsync, 4 months ago)

VBoxREMWrapperA.asm: Added a todo - using the wrong regs?

  • Property svn:keywords set to Id
Line 
1 ; $Id$
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
139 BEGINCODE
140
141 %ifdef RT_OS_WINDOWS
142  %ifdef RT_ARCH_AMD64
143
144
145 BEGINPROC 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
161 ENDPROC WrapGCC2MSC0Int
162
163
164 BEGINPROC 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
181 ENDPROC WrapGCC2MSC1Int
182
183
184 BEGINPROC 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
202 ENDPROC WrapGCC2MSC2Int
203
204
205 BEGINPROC 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
224 ENDPROC WrapGCC2MSC3Int
225
226
227 BEGINPROC 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
247 ENDPROC WrapGCC2MSC4Int
248
249
250 BEGINPROC 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
271 ENDPROC WrapGCC2MSC5Int
272
273
274 BEGINPROC 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
296 ENDPROC WrapGCC2MSC6Int
297
298
299 BEGINPROC 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
323 ENDPROC WrapGCC2MSC7Int
324
325
326 BEGINPROC 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
352 ENDPROC WrapGCC2MSC8Int
353
354
355 BEGINPROC 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
383 ENDPROC WrapGCC2MSC9Int
384
385
386 BEGINPROC 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
416 ENDPROC WrapGCC2MSC10Int
417
418
419 BEGINPROC 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
451 ENDPROC WrapGCC2MSC11Int
452
453
454 BEGINPROC 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
488 ENDPROC WrapGCC2MSC12Int
489
490
491
492 BEGINPROC 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!
525 ENDPROC 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 ;
551 BEGINPROC 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
632 ENDPROC WrapGCC2MSC_SSMR3RegisterInternal
633
634
635 ;
636 ; The other way around:
637 ;
638
639
640 BEGINPROC 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
660 ENDPROC WrapMSC2GCC0Int
661
662
663 BEGINPROC 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
684 ENDPROC WrapMSC2GCC1Int
685
686
687 BEGINPROC 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
709 ENDPROC WrapMSC2GCC2Int
710
711
712 BEGINPROC 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
730 ENDPROC WrapMSC2GCC3Int
731
732
733 BEGINPROC 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
752 ENDPROC WrapMSC2GCC4Int
753
754
755 BEGINPROC 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
775 ENDPROC WrapMSC2GCC5Int
776
777
778 BEGINPROC 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
799 ENDPROC WrapMSC2GCC6Int
800
801
802 BEGINPROC 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
825 ENDPROC WrapMSC2GCC7Int
826
827
828 BEGINPROC 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
853 ENDPROC WrapMSC2GCC8Int
854
855
856 BEGINPROC 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
883 ENDPROC WrapMSC2GCC9Int
884
885  %endif ; RT_ARCH_AMD64
886 %endif ; RT_OS_WINDOWS
887
Note: See TracBrowser for help on using the browser.

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy