⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alloc.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
字号:
/	storage allocator for use with C////	hand-tooled from C compilation to modify save-return/	so that it can be called from within the C save/	when running with coroutines//#//*/ *	C storage allocator/ *	(circular first fit strategy)/ *//#define BLOK 512/#define BUSY 01//char *allocs[2] {		/*initial empty arena*//	&allocs[1],/	&allocs[0]/};/struct { int word; };/char **allocp &allocs[1];	/*current search pointer*//char **alloct &allocs[1];	/*top of arena (last cell)*///alloc(nbytes)/{/	register int nwords;/	register char **p, **q;/	static char **t;//	allocs[0].word =| BUSY;	/*static initialization*//	allocs[1].word =| BUSY;//	nwords = (nbytes+(2*sizeof(p)-1))/sizeof(p);/	for(p=allocp;;) {/		do {/			if((p->word&BUSY)==0) {/				while(((q = *p)->word&BUSY)==0)/					*p = *q;/				if(q >= &p[nwords])/					goto found;/			}/			q = p;/			p = p->word & ~BUSY;/		} while(q>=allocp || p<allocp);/		if((*alloct=t=sbrk(BLOK*sizeof(p))) == -1)/			return(-1);/		if(t!=alloct+1)/			alloct->word =| BUSY;/		alloct = (*t = &t[BLOK]-1);/		*alloct = allocs;/		alloct->word =| BUSY;/	}/found:/	allocp = &p[nwords];/	if(q>allocp)/		*allocp = *p;/	*p = allocp.word|BUSY;/	return(p+1);/}//free(p)/char **p;/{/	allocp = p-1;/	allocp->word =& ~BUSY;/}.globl	_allocs.data_allocs=.2+_allocs_allocs.globl	_allocp.data_allocp=.2+_allocs.globl	_alloct.data_alloct=.2+_allocs.globl	_alloc.globl	_sbrk.text_alloc:mov	r5,-(sp)mov	sp,r5mov	r4,-(sp)mov	r3,-(sp)mov	r2,-(sp)bis	$1,_allocsbis	$1,2+_allocsmov	4(r5),r4add	$3,r4asr	r4mov	_allocp,r3jbr	L6L7:mov	r3,r2mov	(r3),r3bic	$!177776,r3cmp	r2,_allocpjhis	L6cmp	r3,_allocpjlo	L6mov	$2000,-(sp)jsr	pc,*$_sbrktst	(sp)+mov	r0,tmov	r0,*_alloctcmp	$177777,r0jeq	L11mov	_alloct,r0add	$2,r0cmp	t,r0jeq	L12bis	$1,*_alloctL12:mov	t,r0add	$1776,r0mov	r0,*tmov	r0,_alloctmov	$_allocs,*_alloctbis	$1,*_alloctL6:bit	$1,(r3)jeq	L8jbr	L7L20001:mov	(r2),(r3)L8:mov	(r3),r2bit	$1,(r2)jeq	L20001mov	r4,r0asl	r0add	r3,r0cmp	r2,r0jlo	L7mov	r4,r0asl	r0add	r3,r0mov	r0,_allocpcmp	r2,r0jlos	L13mov	(r3),*_allocpL13:mov	_allocp,r0bis	$1,r0mov	r0,(r3)mov	r3,r0add	$2,r0L11:mov	(sp)+,r2mov	(sp)+,r3mov	(sp)+,r4mov	(sp)+,r5rts	pc.globl	_free.text_free:mov	r5,-(sp)mov	sp,r5mov	4(r5),r0add	$177776,r0mov	r0,_allocpbic	$!177776,*_allocpmov	(sp)+,r5rts	pc.bsst:	.=.+2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -