realloc.s 765 B

12345678910111213141516171819202122232425262728293031323334353637
  1. .xdef realloc
  2. .text
  3. realloc:
  4. link.w %a6,#0
  5. movem.l %d3/%a2-%a3,-(%sp)
  6. move.l 0xC8,%a2
  7. move.l %d0,%a3 /* new size */
  8. move.l %a0,%d0 /* address==0? */
  9. jbeq .L__realloc_0
  10. move.w -2(%a0),%d3 /* handle */
  11. move.w %d3,-(%sp)
  12. move.l 636(%a2),%a0 /* HeapUnlock */
  13. jsr (%a0)
  14. pea 2(%a3) /* reallocate a block of size+2 bytes */
  15. move.w %d3,-(%sp)
  16. move.l 628(%a2),%a0 /* HeapRealloc */
  17. jsr (%a0)
  18. tst.w %d0
  19. jbne .L__realloc_1
  20. move.l 604(%a2),%a0 /* HeapFree */
  21. jsr (%a0)
  22. sub.l %a0,%a0
  23. jbra .L__realloc_2
  24. .L__realloc_0:
  25. pea (%a3)
  26. move.l 648(%a2),%a0 /* HeapAllocPtr */
  27. jsr (%a0)
  28. jbra .L__realloc_2
  29. .L__realloc_1:
  30. move.l 612(%a2),%a0 /* HLock */
  31. jsr (%a0)
  32. addq.l #2,%a0 /* skip the handle */
  33. .L__realloc_2:
  34. movem.l -12(%a6),%d3/%a2-%a3
  35. unlk %a6
  36. rts