
@*********************************************************

	.macro	mem_init_mc	,base, size
	
	ldr	r0,=\base
	mov	r2,\size
	bl	mem_init

	.endm	
	
@*********************************************************
	
	.macro	mem_malloc_mc	,base, size
	
	ldr	r0,=\base
	mov	r6,\size
	bl	mem_malloc
	
	.endm	
	
@*********************************************************

	.macro	mem_calloc_mc	,base, size
	
	ldr	r0,=\base
	mov	r6,\size
	bl	mem_malloc

	mov	r1,#0
	stmfd	sp!,{r2,r6,r1}
	
	teq	r6,#1		;
	streqb	r1,[r2],#1	;r6&1=notzero
	biceq	r2,r2,#1
	subeq	r6,r6,#1
		
	mov	r0,sp
	mov	r1,r2		;map
	orr	r2,r6,#(1<<24)	;size + only fill + 16bit
	swi	0xb0000		;CpuSet	
	
	add	sp,sp,#4
	ldmfd	sp!,{r2,r6}
	
	.endm	
	
@*********************************************************
	
	.macro	mem_free_mc	,base,adr
	
	ldr	r0,=\base
	mov	r6,\adr	
	bl	mem_free
	
	.endm		
	
@***********************************************************


@*********************************************************
	
	.macro	stack_alloc_mc	,size	
	
	tst	\size,#3			@aufrunden auf 4
	bicne	\size,\size,#3
	addne	\size,\size,#4
				
	mov	r1,sp				@jetzige pos
	sub	sp,sp,\size			@sp-size
	stmfd	sp!,{r1}		@-sp=backadr
	add	r1,sp,#4			@sp+4 = userspace -> back to user
	
	.endm		
	
	.macro	stack_free_mc	

	ldr	sp,[sp]	
	
	.endm		

@*********************************************************
	
	.macro	stack_alloc_th_mc	,size	
	
	mov	r1,#3
	tst	\size,r1		@aufrunden auf 4
	beq	stack_alloc_th_mc_weiter
	bic	\size,r1
	add	\size,\size,#4	@aufrunden
	
stack_alloc_th_mc_weiter:	

	mov	r2,sp		@jetzige pos
	sub	r1,r2,\size	@r1=sp-size	(r1=spaceadr)
	mov	sp,r1		@sp=r1
	push	{r2}		@-sp=backadr
	
	.endm		
	
	.macro	stack_free_th_mc	

	ldr	r0,[sp]
	mov	sp,r0
	
	.endm		
