xref: /original-bsd/sys/tahoe/align/defs.h (revision 79cf7955)
1 /*	defs.h	1.1	86/07/20	*/
2 
3 #include "../tahoe/psl.h"
4 
5 /************************************************/
6 /*	Basic 6/32 machine definitions 		*/
7 /************************************************/
8 
9 #define	FALSE	0
10 #define	TRUE	(~FALSE)
11 #define READ	0
12 #define WRITE	1
13 
14 /*
15  * Some floatng point stuff.
16  */
17 
18 #define exp(x)		( (x) & 0x7f800000 )
19 #define reserved(x) 	( (x) < 0  && (exp(x) == 0) )
20 
21 /************************************************/
22 /*						*/
23 /*	Opcodes description table stuff		*/
24 /*						*/
25 /************************************************/
26 
27 struct	operand_des	{		/* Operand descriptor in great table */
28 		int	add_modes;	/* Allowed addressing modes */
29 		int	length;		/* Length of this data (bytes) */
30 };
31 
32 #define	Add	1	/* Any address except PC relative & ablsolute */
33 #define	Dir	2	/* Direct register */
34 #define	Imm	4	/* Immediate datum */
35 #define	Lit	8	/* Short literal */
36 #define	Brd	0x10	/* Branch displacement */
37 #define	Pcrel	0x20	/* PC relative allowed */
38 #define	Abs	0x40	/* Absolute address allowed */
39 #define	SPmode	0x80	/* The stack pointer was involved , -(sp) or (sp)+ */
40 #define	ADDFIELD 0xff	/* Allowed addressing modes */
41 
42 #define	W	0x100	/* Access is write */
43 #define R	0x200	/* Access is 'read' */
44 #define	Indx	0x400	/* Indexable base address */
45 #define	NOVF	0x800	/* Inhibit overflow check when writing byte/word */
46 #define FLP	0x1000	/* Floating point operand */
47 
48 #define	M	(R|W)	/* Access is 'modify' */
49 #define PR	(Pcrel|Abs)
50 #define ADDR	(PR|Add)
51 #define	ADI	(ADDR|Dir|Imm|Lit)
52 #define	AD	(ADDR|Dir)
53 #define	MAD	(M|ADDR|Dir)
54 #define	WAD	(W|ADDR|Dir)
55 #define WD	(W|Dir)
56 #define NWAD	(NOVF|WAD)
57 #define	NMAD	(NOVF|MAD)
58 #define	RADI	(R|ADI)	/* Readable datum */
59 #define RAD	(R|AD)	/* Modify type access for destinations */
60 #define RADF	(RAD|FLP)
61 #define WADF	(WAD|FLP)
62 
63 
64 
65 
66 struct	opcode_des	{	/* One line in the big table */
67 	int 	(*routine) 	();		/* Handler for this opcode */
68 	struct 	operand_des operand[4];		/* Up to 4 operands */
69 };
70 
71 /************************************************/
72 /*						*/
73 /*	Operand descriptor as returned		*/
74 /*	by the address mode decoder 		*/
75 /*						*/
76 /************************************************/
77 
78 struct	oprnd {
79 	long	mode;			/* Add, Imm, Dir or Brd */
80 	long	reg_number;		/* returned for Dir mode */
81 	long	address;		/* Relevant for Add or Brd */
82 	long	data;
83 	long	data2;			/* Up to 8 bytes returned */
84 	long	length;			/* Length of data manipulated */
85 };
86 
87 /************************************************/
88 /*						*/
89 /*	Some PSL macros (usefull)		*/
90 /*						*/
91 /************************************************/
92 #define	carry		(psl & PSL_C)
93 #define	negative	(psl & PSL_N)
94 #define overflow	(psl & PSL_V)
95 #define zero		(psl & PSL_Z)
96 
97 #define carry_1		psl |= PSL_C
98 #define negative_1	psl |= PSL_N
99 #define overflow_1	psl |= PSL_V
100 #define zero_1		psl |= PSL_Z
101 
102 #define carry_0		psl &= ~PSL_C
103 #define negative_0	psl &= ~PSL_N
104 #define overflow_0	psl &= ~PSL_V
105 #define zero_0		psl &= ~PSL_Z
106 
107 
108 struct	oprnd		*operand ();
109 struct	opcode_des 	Table[];
110 
111 struct double_length
112 {
113 	int	low;
114 	int	high;
115 };
116 
117 typedef	struct	double_length	quadword;
118 
119