Subversion Repositories Kolibri OS

Rev

Rev 3128 | Go to most recent revision | Blame | Compare with Previous | 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. 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 {
  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:
  92.   }
  93. }
  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*/
  204.