Subversion Repositories Kolibri OS

Rev

Rev 3067 | Rev 3128 | 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. #define mem_Alloc malloc
  93. #define mem_ReAlloc realloc
  94. #define mem_Free free
  95. #define mem_Init mem_init
  96.  
  97. /*:void fastcall memsetz( EDI, ECX)
  98. {
  99.   asm {
  100.     XOR EAX, EAX
  101.     MOV EDX, ECX
  102.     SHR ECX, 2
  103.     REP STOSD
  104.     MOV ECX, EDX
  105.     AND ECX, 3
  106.     REP STOSB
  107.   }
  108. }
  109.  
  110. :void fastcall memset( EDI, ECX, AL) //copy AL to EDI of ECX num (void *dest, size_t, char c )
  111. {
  112.   asm {
  113.     MOV AH, AL
  114.     MOVZX EDX, AX
  115.     SHL EAX, 16
  116.     OR EAX, EDX
  117.     MOV EDX, ECX
  118.     SHR ECX, 2
  119.     REP STOSD
  120.     MOV ECX, EDX
  121.     AND ECX, 3
  122.     REP STOSB
  123.   }
  124. }
  125.  
  126. :void fastcall memcpy( EDI, ESI, ECX)
  127. {
  128.   asm {
  129.     MOV EDX, ECX
  130.     SHR ECX, 2
  131.     REP MOVSD
  132.     MOV ECX, EDX
  133.     AND ECX, 3
  134.     REP MOVSB
  135.   }
  136. }
  137.  
  138. :void fastcall memsetd( EDI, ECX, EAX)
  139. {
  140.   asm {
  141.     REP STOSD
  142.   }
  143. }
  144.  
  145. :void fastcall memcpyd( EDI, ESI, ECX)
  146. {
  147.   asm {
  148.     REP MOVSD
  149.   }
  150. }
  151.  
  152. :void fastcall memmov( EDI, ESI, ECX)
  153. {
  154.   asm {
  155.     MOV EAX, ECX
  156.     CMP EDI, ESI
  157.     JG L1
  158.     JE L2
  159.     SAR ECX, 2
  160.     JS L2
  161.     REP MOVSD
  162.     MOV ECX, EAX
  163.     AND ECX, 3
  164.     REP MOVSB
  165.     JMP SHORT L2
  166. L1: LEA ESI, DSDWORD[ ESI+ECX-4]
  167.     LEA EDI, DSDWORD[ EDI+ECX-4]
  168.     SAR ECX, 2
  169.     JS L2
  170.     STD
  171.     REP MOVSD
  172.     MOV ECX, EAX
  173.     AND ECX, 3
  174.     ADD ESI, 3
  175.     ADD EDI, 3
  176.     REP MOVSB
  177.     CLD
  178. L2:
  179.   }
  180. }
  181.  
  182. :long fastcall memcmp( ESI, EDI, ECX)
  183. {
  184.   asm {
  185.     MOV EAX, ECX
  186.     SHR ECX, 2
  187.     REPE CMPSD
  188.     MOV ECX, EAX
  189.     AND ECX, 3
  190.     REPE CMPSB
  191.     XOR EAX, EAX
  192.     XOR ECX, ECX
  193.     MOV AL, DSBYTE[ ESI-1]
  194.     MOV CL, DSBYTE[ EDI-1]
  195.     SUB EAX, ECX
  196.   }
  197. }*/
  198.  
  199.  
  200. /*#define memzset memsetz
  201. #define memset0 memsetz
  202. #define mem0set memsetz
  203. #define memset32 memsetd
  204. #define memcpy32 memcpyd*/
  205.