Subversion Repositories Kolibri OS

Rev

Rev 2839 | Blame | Last modification | View Log | Download | RSS feed

  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. inline fastcall dword mem_ReAllocR( ECX, EDX)
  30. {
  31.         $mov     eax, 68
  32.         $mov     ebx, 20
  33.         $int     0x40
  34. }
  35.  
  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. }
  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*/
  211.