Subversion Repositories Kolibri OS

Rev

Rev 2874 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2811 leency 1
//mem.Init
2
dword mem_Init()
3
{
4
        $push    ebx
5
        $mov     eax, 68
6
        $mov     ebx, 11
7
        $int     0x40
8
 
9
        $pop     ebx
10
        return  EAX;
11
}
12
 
13
//mem.Alloc
14
dword mem_Alloc(dword size)
15
{
16
        $push    ebx
17
        $push    ecx
18
        $mov     eax, 68
19
        $mov     ebx, 12
20
        $mov     ecx, size
21
        $int     0x40
22
 
23
        $pop     ecx
24
        $pop     ebx
25
        return  EAX;
26
}
27
 
28
//mem.ReAlloc
29
stdcall dword mem_ReAlloc(dword mptr, size)
30
{
31
        $push    ebx
32
        $push    ecx
33
        $push    edx
34
        $mov     eax, 68
35
        $mov     ebx, 20
36
        $mov     ecx, size
37
        $mov     edx, mptr
38
        $int     0x40
39
 
40
        $pop     edx
41
        $pop     ecx
42
        $pop     ebx
43
        return   EAX;
44
}
45
 
46
//mem.Free
47
void mem_Free(dword mptr)
48
{
49
        $push    eax
50
        $push    ebx
51
        $push    ecx
52
        $mov     eax, 68
53
        $mov     ebx, 13
54
        $mov     ecx, mptr
55
        $test    ecx, ecx
56
        $jz      end0
57
        $int     0x40
58
   @end0:
59
        $pop     ecx
60
        $pop     ebx
61
        $pop     eax
62
}
63
 
64
//stdcall dword ??
65
inline fastcall mem_Move( EDI, ESI, ECX)
66
{
67
  asm {
3020 leency 68
    MOV EAX, ECX
69
    CMP EDI, ESI
70
    JG L1
71
    JE L2
72
    SAR ECX, 2
73
    JS L2
74
    REP MOVSD
75
    MOV ECX, EAX
76
    AND ECX, 3
77
    REP MOVSB
78
    JMP SHORT L2
79
L1: LEA ESI, DSDWORD[ ESI+ECX-4]
80
    LEA EDI, DSDWORD[ EDI+ECX-4]
81
    SAR ECX, 2
82
    JS L2
83
    STD
84
    REP MOVSD
85
    MOV ECX, EAX
86
    AND ECX, 3
87
    ADD ESI, 3
88
    ADD EDI, 3
89
    REP MOVSB
90
    CLD
91
L2:
2811 leency 92
  }
93
}
2874 leency 94
 
95
 
96
/*:void fastcall memsetz( EDI, ECX)
97
{
98
  asm {
99
    XOR EAX, EAX
100
    MOV EDX, ECX
101
    SHR ECX, 2
102
    REP STOSD
103
    MOV ECX, EDX
104
    AND ECX, 3
105
    REP STOSB
106
  }
107
}
108
 
109
:void fastcall memset( EDI, ECX, AL)
110
{
111
  asm {
112
    MOV AH, AL
113
    MOVZX EDX, AX
114
    SHL EAX, 16
115
    OR EAX, EDX
116
    MOV EDX, ECX
117
    SHR ECX, 2
118
    REP STOSD
119
    MOV ECX, EDX
120
    AND ECX, 3
121
    REP STOSB
122
  }
123
}
124
 
125
:void fastcall memcpy( EDI, ESI, ECX)
126
{
127
  asm {
128
    MOV EDX, ECX
129
    SHR ECX, 2
130
    REP MOVSD
131
    MOV ECX, EDX
132
    AND ECX, 3
133
    REP MOVSB
134
  }
135
}
136
 
137
:void fastcall memsetd( EDI, ECX, EAX)
138
{
139
  asm {
140
    REP STOSD
141
  }
142
}
143
 
144
:void fastcall memcpyd( EDI, ESI, ECX)
145
{
146
  asm {
147
    REP MOVSD
148
  }
149
}
150
 
151
:void fastcall memmov( EDI, ESI, ECX)
152
{
153
  asm {
154
    MOV EAX, ECX
155
    CMP EDI, ESI
156
    JG L1
157
    JE L2
158
    SAR ECX, 2
159
    JS L2
160
    REP MOVSD
161
    MOV ECX, EAX
162
    AND ECX, 3
163
    REP MOVSB
164
    JMP SHORT L2
165
L1: LEA ESI, DSDWORD[ ESI+ECX-4]
166
    LEA EDI, DSDWORD[ EDI+ECX-4]
167
    SAR ECX, 2
168
    JS L2
169
    STD
170
    REP MOVSD
171
    MOV ECX, EAX
172
    AND ECX, 3
173
    ADD ESI, 3
174
    ADD EDI, 3
175
    REP MOVSB
176
    CLD
177
L2:
178
  }
179
}
180
 
181
:long fastcall memcmp( ESI, EDI, ECX)
182
{
183
  asm {
184
    MOV EAX, ECX
185
    SHR ECX, 2
186
    REPE CMPSD
187
    MOV ECX, EAX
188
    AND ECX, 3
189
    REPE CMPSB
190
    XOR EAX, EAX
191
    XOR ECX, ECX
192
    MOV AL, DSBYTE[ ESI-1]
193
    MOV CL, DSBYTE[ EDI-1]
194
    SUB EAX, ECX
195
  }
196
}*/
197
 
198
 
199
/*#define memzset memsetz
200
#define memset0 memsetz
201
#define mem0set memsetz
202
#define memset32 memsetd
203
#define memcpy32 memcpyd*/