
		include	pool.i

; -> d0 - memory requirements
;    d1 - puddle size
;    d2 - thresh size
; <- d0 - pool

		XDEF	_AsmCreatePool

_AsmCreatePool	cmpi.w	#39,LIB_VERSION(a6)
		bcs.s	2$
		jmp	_LVOCreatePool(a6)

2$		movem.l	d2/d3/d4,-(sp)
		move.l	d0,d4
		moveq	#0,d0
		cmp.l	d2,d1
		bcs.s	1$			; ThreshSize > PuddleSize!
		addq.l	#7,d1			; round PuddleSize
		moveq	#-8,d3
		and.l	d1,d3
		moveq	#pool_SIZEOF,d0
		moveq	#MEMF_ANY,d1
		RECALL	AllocMem
		movea.l	d0,a0
		tst.l	d0
		beq.s	1$			; !pool
		NEWLIST	a0
		lea	MemoryFlags(a0),a0
		move.l	d4,(a0)+		; MemoryFlags
		move.l	d3,(a0)+		; PuddleSize
		move.l	d2,0(a0)		; ThreshSize
1$		movem.l	(sp)+,d2/d3/d4
		rts

; -> a0 - pool
; <-

		XDEF	_AsmDeletePool

_AsmDeletePool	cmpi.w	#39,LIB_VERSION(a6)
		bcs.s	4$
		jmp	_LVODeletePool(a6)

4$		move.l	a0,-(sp)
		beq.s	1$			; !pool
3$		movea.l	0(sp),a0
		RECALL	RemHead			; remove entry
		movea.l	d0,a1
		move.l	a1,d0
		beq.s	2$			; empty!
		move.l	-(a1),d0
		RECALL	FreeMem			; free chunk
		bra.s	3$
2$		move.l	0(sp),a1		; free pool
		moveq	#pool_SIZEOF,d0
		RECALL	FreeMem
1$		addq.w	#4,sp			; adjust sp
		rts

		end
