# m32r testcase for trap #$uimm4
# mach(): m32r m32rx
# sim: --environment virtual

	.include "testutils.inc"

	start

	.global trap
trap:

; Test 1: bbpsw = 0, bpsw = 1, psw = 0

	; bbsm = 0, bie = 0, bbcond = 0
	mvi_h_gr r4, 0
	mvtc r4, cr8

	; bsm = 1, bie = 1, bcond = 1, sm = 0, ie = 0, cond = 0
	mvi_h_gr r4, 0xc100
	mvtc r4, cr0

	; bbpc = 0
	mvaddr_h_gr r4, 0
	mvtc r4, bbpc

	; bpc = 42
	mvaddr_h_gr r4, 42
	mvtc r4, bpc

	; Copy trap2_handler to trap area of memory.
	ld24 r0,#0x48 ; address of trap 2 handler
	ld24 r1,#trap2_handler
	ld r2,@r1
	st r2,@r0
	; Set up return address.
	ld24 r5,#trap2_ret1

trap_insn1:
	trap #2
	fail

trap2_ret1:
	; test bbsm = 1, bbie = 1, bbcond = 1
	mvfc r4, cr8
	test_h_gr r4, 0xc1

	; test bsm = 0, bie = 0, bcond = 0, sm = 0, ie = 0, cond = 0
	mvfc r4, cr0
	test_h_gr r4, 0

	; test bbpc = 42
	mvfc r4, bbpc
	test_h_gr r4, 42

	; test bpc = proper return address
	mvfc r4, bpc
	test_h_gr r4, trap_insn1 + 4

; Test 2: bbpsw = 1, bpsw = 0, psw = 1

	; bbsm = 1, bie = 1, bbcond = 1
	mvi_h_gr r4, 0xc1
	mvtc r4, cr8

	; bsm = 0, bie = 0, bcond = 0, sm = 1, ie = 1, cond = 1
	mvi_h_gr r4, 0xc1
	mvtc r4, cr0

	; bbpc = 42
	mvaddr_h_gr r4, 42
	mvtc r4, bbpc

	; bpc = 0
	mvaddr_h_gr r4, 0
	mvtc r4, bpc

	; Set up return address.
	ld24 r5,#trap2_ret2

trap_insn2:
	trap #2
	fail

trap2_ret2:
	; test bbsm = 0, bbie = 0, bbcond = 0
	mvfc r4, cr8
	test_h_gr r4, 0

	; test bsm = 1, bie = 1, bcond = 1, sm = 1, ie = 0, cond = 0
	mvfc r4, cr0
	test_h_gr r4, 0xc180

	; test bbpc = 0
	mvfc r4, bbpc
	test_h_gr r4, 0

	; test bpc = proper return address
	mvfc r4, bpc
	test_h_gr r4, trap_insn2 + 4

	pass

	.data

; Don't use rte as it will undo the effects of trap we're testing.

	.p2align 2
trap2_handler:
	jmp r5
	nop
