Subversion Repositories Kolibri OS

Rev

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