realloc.s 804 B

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