Subversion Repositories Kolibri OS

Rev

Rev 3107 | Rev 5606 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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