
		include	pool.i

; -> d0 - size
;    a0 - pool
;    a1 - mem
; <-

		XDEF	_AsmFreePooled

_AsmFreePooled	cmpi.w	#39,LIB_VERSION(a6)
		bcs.s	5$
		jmp	_LVOFreePooled(a6)

5$		move.l	a0,d1
		beq.s	1$			; !pool
		move.l	a1,d1
		beq.s	1$			; !mem
		move.l	a3,-(sp)
		move.l	a2,-(sp)
		movea.l	a0,a3
		lea	-(LH_SIZE-2)(a1),a2
		cmp.l	ThreshSize(a3),d0
		bcc.s	3$			; separate block!
		movea.l	a0,a2
4$		TSTNODE	a2,a2
		beq.s	2$			; list end!
		tst.l	LN_TYPE(a2)
		beq.s	4$
		cmpa.l	MH_LOWER(a2),a1
		bcs.s	4$			; not here!
		cmpa.l	MH_UPPER(a2),a1
		bcc.s	4$			; not here!
		movea.l	a2,a0
		RECALL	Deallocate		; free memory
		move.l	MH_FREE(a2),d0
		cmp.l	PuddleSize(a3),d0
		bne.s	2$			; PuddleSize != FREE
3$		movea.l	a2,a1
		RECALL	Remove			; remove chunk from list
		movea.l	a2,a1
		move.l	-(a1),d0
		RECALL	FreeMem			; deallocate chunk
2$		movea.l	(sp)+,a2
		movea.l	(sp)+,a3
1$		rts

		end
