~ubuntu-branches/debian/squeeze/ffcall/squeeze

« back to all changes in this revision

Viewing changes to vacall/vacall-i386-msvc.c

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Egger
  • Date: 2010-06-26 15:29:30 UTC
  • mfrom: (5.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20100626152930-c09y01gk3szcnykn
Tags: 1.10+cvs20100619-2
Ship to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifdef _MSC_VER
 
2
#include "vacall.h"
 
3
#endif
 
4
#include "asmi386.h"
 
5
TEXT()
 
6
        ALIGN(2)
 
7
GLOBL(C(__vacall))
 
8
        DECLARE_FUNCTION(__vacall)
 
9
FUNBEGIN(__vacall)
 
10
        INSN2(sub,l     ,NUM(36),R(esp))
 
11
        INSN2(mov,l     ,NUM(0),X4 MEM(esp))
 
12
        INSN2(lea,l     ,X4 MEM_DISP(esp,40),R(ecx))
 
13
        INSN2(mov,l     ,R(ecx),X4 MEM_DISP(esp,4))
 
14
        INSN2(mov,l     ,NUM(0),X4 MEM_DISP(esp,8))
 
15
        INSN2(mov,l     ,NUM(0),X4 MEM_DISP(esp,12))
 
16
        INSN2(mov,l     ,R(ebx),X4 MEM_DISP(esp,32))
 
17
        INSN2(mov,l     ,R(esp),R(edx))
 
18
        INSN1(push,l    ,R(edx))
 
19
        INSN2(mov,l     ,C(vacall_function),R(edx))
 
20
        INSN1(call,_    ,INDIR(R(edx)))
 
21
        INSN2(add,l     ,NUM(4),R(esp))
 
22
        INSN2(cmp,l     ,NUM(0),X4 MEM_DISP(esp,12))
 
23
        INSN1(je,_      ,L3)
 
24
        INSN2(cmp,l     ,NUM(1),X4 MEM_DISP(esp,12))
 
25
        INSN1(je,_      ,L45)
 
26
        INSN2(cmp,l     ,NUM(2),X4 MEM_DISP(esp,12))
 
27
        INSN1(jne,_     ,L6)
 
28
L45:
 
29
        INSN2MOVX(movs,b        ,X1 MEM_DISP(esp,24),R(eax))
 
30
        INSN1(jmp,_     ,L3)
 
31
L6:
 
32
        INSN2(cmp,l     ,NUM(3),X4 MEM_DISP(esp,12))
 
33
        INSN1(jne,_     ,L8)
 
34
        INSN2MOVX(movz,b        ,X1 MEM_DISP(esp,24),R(eax))
 
35
        INSN1(jmp,_     ,L3)
 
36
L8:
 
37
        INSN2(cmp,l     ,NUM(4),X4 MEM_DISP(esp,12))
 
38
        INSN1(jne,_     ,L10)
 
39
        INSN2MOVX(movs,w        ,X2 MEM_DISP(esp,24),R(eax))
 
40
        INSN1(jmp,_     ,L3)
 
41
L10:
 
42
        INSN2(cmp,l     ,NUM(5),X4 MEM_DISP(esp,12))
 
43
        INSN1(jne,_     ,L12)
 
44
        INSN2MOVX(movz,w        ,X2 MEM_DISP(esp,24),R(eax))
 
45
        INSN1(jmp,_     ,L3)
 
46
L12:
 
47
        INSN2(cmp,l     ,NUM(6),X4 MEM_DISP(esp,12))
 
48
        INSN1(je,_      ,L46)
 
49
        INSN2(cmp,l     ,NUM(7),X4 MEM_DISP(esp,12))
 
50
        INSN1(je,_      ,L46)
 
51
        INSN2(cmp,l     ,NUM(8),X4 MEM_DISP(esp,12))
 
52
        INSN1(je,_      ,L46)
 
53
        INSN2(cmp,l     ,NUM(9),X4 MEM_DISP(esp,12))
 
54
        INSN1(je,_      ,L46)
 
55
        INSN2(mov,l     ,X4 MEM_DISP(esp,12),R(edx))
 
56
        INSN2(add,l     ,NUM(-10),R(edx))
 
57
        INSN2(cmp,l     ,NUM(1),R(edx))
 
58
        INSN1(ja,_      ,L22)
 
59
        INSN2(mov,l     ,X4 MEM_DISP(esp,24),R(eax))
 
60
        INSN2(mov,l     ,X4 MEM_DISP(esp,28),R(edx))
 
61
        INSN1(jmp,_     ,L3)
 
62
L22:
 
63
        INSN2(cmp,l     ,NUM(12),X4 MEM_DISP(esp,12))
 
64
        INSN1(jne,_     ,L24)
 
65
        INSN1(fld,s     ,X4 MEM_DISP(esp,24))
 
66
        INSN1(jmp,_     ,L3)
 
67
L24:
 
68
        INSN2(cmp,l     ,NUM(13),X4 MEM_DISP(esp,12))
 
69
        INSN1(jne,_     ,L26)
 
70
        INSN1(fld,l     ,X8 MEM_DISP(esp,24))
 
71
        INSN1(jmp,_     ,L3)
 
72
L26:
 
73
        INSN2(cmp,l     ,NUM(14),X4 MEM_DISP(esp,12))
 
74
        INSN1(jne,_     ,L28)
 
75
L46:
 
76
        INSN2(mov,l     ,X4 MEM_DISP(esp,24),R(eax))
 
77
        INSN1(jmp,_     ,L3)
 
78
L28:
 
79
        INSN2(cmp,l     ,NUM(15),X4 MEM_DISP(esp,12))
 
80
        INSN1(jne,_     ,L3)
 
81
        INSN2(test,b    ,NUM(1),X1 MEM(esp))
 
82
        INSN1(jne,_     ,L47)
 
83
        INSN2(test,b    ,NUM(4),X1 MEM_DISP(esp,1))
 
84
        INSN1(je,_      ,L33)
 
85
        INSN2(cmp,l     ,NUM(1),X4 MEM_DISP(esp,16))
 
86
        INSN1(jne,_     ,L34)
 
87
        INSN2(mov,l     ,X4 MEM_DISP(esp,8),R(edx))
 
88
        INSN2MOVX(movz,b        ,X1 MEM(edx),R(eax))
 
89
        INSN1(jmp,_     ,L3)
 
90
L34:
 
91
        INSN2(cmp,l     ,NUM(2),X4 MEM_DISP(esp,16))
 
92
        INSN1(jne,_     ,L37)
 
93
        INSN2(mov,l     ,X4 MEM_DISP(esp,8),R(edx))
 
94
        INSN2MOVX(movz,w        ,X2 MEM(edx),R(eax))
 
95
        INSN1(jmp,_     ,L3)
 
96
L37:
 
97
        INSN2(cmp,l     ,NUM(4),X4 MEM_DISP(esp,16))
 
98
        INSN1(jne,_     ,L39)
 
99
        INSN2(mov,l     ,X4 MEM_DISP(esp,8),R(edx))
 
100
        INSN2(mov,l     ,X4 MEM(edx),R(eax))
 
101
        INSN1(jmp,_     ,L3)
 
102
L39:
 
103
        INSN2(cmp,l     ,NUM(8),X4 MEM_DISP(esp,16))
 
104
        INSN1(jne,_     ,L33)
 
105
        INSN2(mov,l     ,X4 MEM_DISP(esp,8),R(edx))
 
106
        INSN2(mov,l     ,X4 MEM(edx),R(eax))
 
107
        INSN2(mov,l     ,X4 MEM_DISP(esp,8),R(edx))
 
108
        INSN2(mov,l     ,X4 MEM_DISP(edx,4),R(edx))
 
109
        INSN1(jmp,_     ,L3)
 
110
L33:
 
111
        INSN2(test,b    ,NUM(24),X1 MEM(esp))
 
112
        INSN1(jne,_     ,L42)
 
113
        INSN2(add,l     ,NUM(36),R(esp))
 
114
        ret NUM(4)
 
115
L42:
 
116
        INSN2(test,b    ,NUM(16),X1 MEM(esp))
 
117
        INSN1(je,_      ,L3)
 
118
L47:
 
119
        INSN2(mov,l     ,X4 MEM_DISP(esp,8),R(eax))
 
120
L3:
 
121
        INSN2(test,b    ,NUM(2),X1 MEM_DISP(esp,1))
 
122
        INSN1(je,_      ,L44)
 
123
        INSN2(mov,l     ,X4 MEM_DISP(esp,36),R(ecx))
 
124
        INSN2(mov,l     ,X4 MEM_DISP(esp,4),R(esp))
 
125
        INSN1(jmp,_     ,INDIR(R(ecx)))
 
126
L44:
 
127
        INSN2(add,l     ,NUM(36),R(esp))
 
128
        ret
 
129
FUNEND()
 
130