home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / GCC / GERLIB_DEV08B.LHA / gerlib / gnulib / normal / ger_malloc_free.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-12  |  914 b   |  44 lines

  1. extern struct ExecBase * SysBase;
  2.  
  3. static __inline void*
  4. AllocVec (unsigned long byteSize,unsigned long requirements)
  5. {
  6.   register void *_res  __asm("d0");
  7.   register struct ExecBase *a6 __asm("a6") = SysBase;
  8.   register unsigned long d0 __asm("d0") = byteSize;
  9.   register unsigned long d1 __asm("d1") = requirements;
  10.   __asm __volatile ("jsr a6@(-0x2ac)"
  11.   : "=r" (_res)
  12.   : "r" (a6), "r" (d0), "r" (d1)
  13.   : "a0","a1","d0","d1", "memory");
  14.   return _res;
  15. }
  16.  
  17. static __inline void
  18. FreeVec (void *memoryBlock)
  19. {
  20.   register struct ExecBase *a6 __asm("a6") = SysBase;
  21.   register void *a1 __asm("a1") = memoryBlock;
  22.   __asm __volatile ("jsr a6@(-0x2b2)"
  23.   : /* no output */
  24.   : "r" (a6), "r" (a1)
  25.   : "a0","a1","d0","d1", "memory");
  26. }
  27.  
  28. void *malloc(unsigned long Anz)
  29. {
  30.     register unsigned long *p=0;
  31.     if(!Anz)Anz=1;
  32.  
  33.     p=AllocVec(Anz,0L);
  34.     return (void *)p;
  35. }
  36.  
  37. void free(unsigned long *p)
  38. {
  39.     if(p)
  40.     {
  41.         FreeVec(p);
  42.     }
  43. }
  44.