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