# mach: frv fr500 fr550
# sim: --memory-region 0xff000000,4 --memory-region 0xfe000000,00404000
# xfail: "crashes with bad write" frv-*

; Exit with return code

	.macro exit rc
	setlos.p	#1,gr7
	setlos          \rc,gr8
	tira		gr0,#0
	.endm

; Pass the test case
	.macro pass
pass:
	setlos.p	#5,gr10
	setlos		#1,gr8
	setlos		#5,gr7
	sethi.p		%hi(passmsg),gr9
	setlo		%lo(passmsg),gr9
	tira		gr0,#0
	exit		#0
	.endm

; Fail the testcase
	.macro fail
fail\@:
	setlos.p	#5,gr10
	setlos		#1,gr8
	setlos		#5,gr7
	sethi.p		%hi(failmsg),gr9
	setlo		%lo(failmsg),gr9
	tira		gr0,#0
	exit		#1
	.endm

	.data
failmsg:
	.ascii "fail\n"
passmsg:
	.ascii "pass\n"

	.text
	.global _start
_start:
	movsg		hsr0,gr10	; enable insn and data caches
	sethi.p		0xc800,gr11	; in copy-back mode
	setlo		0x0000,gr11
	or		gr10,gr11,gr10
	movgs		gr10,hsr0
	
	sethi.p		0x7,sp
	setlo		0x0000,sp

	; fill the cache
	sethi.p		%hi(done1),gr10
	setlo		%lo(done1),gr10
	movgs		gr10,lr
	setlos.p	0x1000,gr10
	setlos		0x0,gr11
	movgs		gr10,lcr
write1:	st.p		gr11,@(sp,gr11)
	addi.p		gr11,4,gr11
	bctrlr.p	1,0
	bra		write1
done1:
	; read it back
	sethi.p		%hi(done2),gr10
	setlo		%lo(done2),gr10
	movgs		gr10,lr
	setlos.p	0x1000,gr10
	setlos		0x0,gr11
	movgs		gr10,lcr
read1:	ld		@(sp,gr11),gr12
	cmp		gr11,gr12,icc0
	bne		icc0,1,fail
	addi.p		gr11,4,gr11
	bctrlr.p	1,0
	bra		read1
done2:	
	
	; fill the cache twice
	sethi.p		%hi(done3),gr10
	setlo		%lo(done3),gr10
	movgs		gr10,lr
	setlos.p	0x2000,gr10
	setlos		0x0,gr11
	movgs		gr10,lcr
write3:	st.p		gr11,@(sp,gr11)
	addi.p		gr11,4,gr11
	bctrlr.p	1,0
	bra		write3
done3:
	; read it back
	sethi.p		%hi(done4),gr10
	setlo		%lo(done4),gr10
	movgs		gr10,lr
	setlos.p	0x2000,gr10
	setlos		0x0,gr11
	movgs		gr10,lcr
read4:	ld		@(sp,gr11),gr12
	cmp		gr11,gr12,icc0
	bne		icc0,1,fail
	addi.p		gr11,4,gr11
	bctrlr.p	1,0
	bra		read4
done4:	
	; read it back in reverse
	sethi.p		%hi(done5),gr10
	setlo		%lo(done5),gr10
	movgs		gr10,lr
	setlos.p	0x2000,gr10
	setlos		0x7ffc,gr11
	movgs		gr10,lcr
read5:	ld		@(sp,gr11),gr12
	cmp		gr11,gr12,icc0
	bne		icc0,1,fail
	subi.p		gr11,4,gr11
	bctrlr.p	1,0
	bra		read5
done5:	

	; access data and insns in non-cache areas
	sethi.p		0x8038,gr11		; bctrlr 0,0
	setlo		0x2000,gr11

	sethi.p		0xff00,gr10		; documented area
	setlo		0x0000,gr10
	sti		gr11,@(gr10,0)
	jmpl		@(gr10,gr0)

	;  enable RAM mode
	movsg		hsr0,gr10
	sethi.p		0x0040,gr12
	setlo		0x0000,gr12
	or		gr10,gr12,gr10
	movgs		gr10,hsr0

	sethi.p		0xfe00,gr10		; documented area
	setlo		0x0400,gr10
	sti		gr11,@(gr10,0)
	jmpl		@(gr10,gr0)

	sethi.p		0xfe40,gr10		; documented area
	setlo		0x0400,gr10
	sti		gr11,@(gr10,0)
	dcf		@(gr10,gr0)
	jmpl		@(gr10,gr0)

	sethi.p		0x0007,gr10		; non RAM area
	setlo		0x0000,gr10
	sti		gr11,@(gr10,0)
	jmpl		@(gr10,gr0)

	sethi.p		0xfe00,gr10		; insn RAM area
	setlo		0x0000,gr10
	sti		gr11,@(gr10,0)
	jmpl		@(gr10,gr0)

	sethi.p		0xfe40,gr10		; data RAM area
	setlo		0x0000,gr10
	sti		gr11,@(gr10,0)
	dcf		@(gr10,gr0)
	jmpl		@(gr10,gr0)
	
	pass
fail:
	fail
