unmaptlb.s 1.44 KB
/**************************************************************************
 *									  *
 *		 Copyright (C) 1994, Silicon Graphics, Inc.		  *
 *									  *
 *  These coded instructions, statements, and computer programs  contain  *
 *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
 *  are protected by Federal copyright law.  They  may  not be disclosed  *
 *  to  third  parties  or copied or duplicated in any form, in whole or  *
 *  in part, without the prior written consent of Silicon Graphics, Inc.  *
 *									  *
 **************************************************************************/

#include <asm.h>
#include <regdef.h>
#include <R4300.h>
#include <ultraerror.h>

/*
 * void osUnmapTLB(int index);
 */
LEAF(osUnmapTLB)
#ifdef _DEBUG
	.set	reorder
	bgez	a0,1f			# check if index >= 0
	b	2f
1:
	li	t0,NTLBENTRIES		# check if index < NTLBENTRIES
	blt	a0,t0,3f
2:
	move	a2,a0			# invoke error handler if not
	li	a0,ERR_OSUNMAPTLB
	li	a1,1
	j	__osError
3:
#endif
	.set	noreorder
	mfc0	t0,C0_ENTRYHI		# save TLBPID
	mtc0	a0,C0_INX		# set index
	li	t1,K0BASE		# set virtual address to unmapped
	mtc0	t1,C0_ENTRYHI		#  (necessary on R4300)
	mtc0	zero,C0_ENTRYLO0	# invalidate entrylo0 (even page)
	mtc0	zero,C0_ENTRYLO1	# invalidate entrylo1 (odd page)
	nop				# 7-5-1 = 1 nop
	tlbwi	         		# write the TLB entry
	nop				# 8-3-1 = 4 nop
	nop
	nop
	nop				
	mtc0	t0,C0_ENTRYHI		# restore saved TLBPID
	j	ra
	nop
END(osUnmapTLB)