1/*
2 * Blackfin testcase for testing illegal/legal 64-bit opcodes (group 1)
3 * from userspace.  we track all instructions which cause some sort of
4 * exception when run from userspace, this is normally EXCAUSE :
5 *  - 0x22 : illegal instruction combination
6 * and walk every instruction from 0x0000 to 0xffff
7 */
8
9# mach: bfin
10# sim: --environment operating
11
12#include "test.h"
13	.include "testutils.inc"
14
15#define SE_ALL_BITS 16
16#include "se_allopcodes.h"
17
18.macro se_all_load_insn
19	R2 = W[P5 + 4];
20	R0 = R2;
21.endm
22
23.macro se_all_next_insn
24	/* increment, and go again. */
25	R0 = R2;
26
27	R0 += 1;
28	/* finish once we hit the 32bit limit */
29	imm32 R1, 0x10000;
30	CC = R1 == R0;
31	IF CC JUMP pass_lvl;
32
33	W[P5 + 4] = R0;
34.endm
35
36.macro se_all_insn_init
37	MNOP || NOP || NOP;
38.endm
39.macro se_all_insn_table
40	/* this table must be sorted, and end with zero */
41	/* start	end		SEQSTAT */
42	.dw 0x0001,	0x7fff,		0x22
43	.dw 0x9040,	0x9040,		0x22
44	.dw 0x9049,	0x9049,		0x22
45	.dw 0x9052,	0x9052,		0x22
46	.dw 0x905b,	0x905b,		0x22
47	.dw 0x9064,	0x9064,		0x22
48	.dw 0x906d,	0x906d,		0x22
49	.dw 0x9076,	0x9076,		0x22
50	.dw 0x907f,	0x907f,		0x22
51	.dw 0x90c0,	0x90c0,		0x22
52	.dw 0x90c9,	0x90c9,		0x22
53	.dw 0x90d2,	0x90d2,		0x22
54	.dw 0x90db,	0x90db,		0x22
55	.dw 0x90e4,	0x90e4,		0x22
56	.dw 0x90ed,	0x90ed,		0x22
57	.dw 0x90f6,	0x90f6,		0x22
58	.dw 0x90ff,	0x90ff,		0x22
59	.dw 0x9180,	0x91ff,		0x22
60	.dw 0x9380,	0x93ff,		0x22
61	.dw 0x9580,	0x95ff,		0x22
62	.dw 0x9640,	0x967f,		0x22
63	.dw 0x96c0,	0x96ff,		0x22
64	.dw 0x9740,	0x97ff,		0x22
65	.dw 0x9980,	0x99ff,		0x22
66	.dw 0x9a40,	0x9a7f,		0x22
67	.dw 0x9ac0,	0x9aff,		0x22
68	.dw 0x9b40,	0x9bff,		0x22
69	.dw 0x9c60,	0x9c7f,		0x22
70	.dw 0x9ce0,	0x9cff,		0x22
71	.dw 0x9d60,	0x9d7f,		0x22
72	.dw 0x9ef0,	0x9eff,		0x22
73	.dw 0x9f70,	0x9f7f,		0x22
74	.dw 0xc000,	0xffff,		0x22
75	.dw 0x0000,	0x0000,		0x00
76.endm
77
78	se_all_test
79