xref: /original-bsd/old/adb/adb.vax/optab.c (revision e0399a72)
1 /*-
2  * Copyright (c) 1991 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.proprietary.c%
6  */
7 
8 #ifndef lint
9 static char optab_sccsid[] = "@(#)optab.c	4.7 (Berkeley) 04/11/91";
10 #endif /* not lint */
11 
12 /*
13  * adb - (read-only) tables for VAX instruction decoding
14  */
15 
16 #define	ADB
17 #undef INSTTAB
18 
19 /*
20  * Pick up definitions for insttab from the assembler, and also
21  * the arrays ty_NORELOC and ty_nbyte (and soon ty_float);
22  * then, make insttab.
23  */
24 #include <sys/types.h>
25 #include "instrs.h"
26 #include "assizetab.c"
27 
28 struct insttab insttab[] = {
29 #include "instrs.adb"
30 	0
31 };
32 
33 /*
34  * Register names, and floating point immediate constants.
35  * The f.p. constants can be derived from the expression
36  *
37  *	fp = (.5 + (n & 7) / 16.0) x (2 ^ (n >> 3))
38  *
39  * or, alternatively,
40  *
41  *	union { int i; float f; } u; u.i = (n << 3) | (1 << 14); u.f
42  *
43  * but there are only 64 of them, and this is simpler.
44  */
45 char *regname[16] = {
46 	"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
47 	"r8", "r9", "r10","r11","ap", "fp", "sp", "pc"
48 };
49 char *fltimm[64] = {
50 	"0.5", "0.5625", "0.625", "0.6875", "0.75", "0.8125", "0.875", "0.9375",
51 	"1.0", "1.125", "1.25", "1.375", "1.5", "1.625", "1.75", "1.875",
52 	"2.0", "2.25", "2.5", "2.75", "3.0", "3.25", "3.5", "3.75",
53 	"4.0", "4.5", "5.0", "5.5", "6.0", "6.5", "7.0", "7.5",
54 	"8.0", "9.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0",
55 	"16.0", "18.0", "20.0", "22.0", "24.0", "26.0", "28.0", "30.0",
56 	"32.0", "36.0", "40.0", "44.0", "48.0", "52.0", "56.0", "60.0",
57 	"64.0", "72.0", "80.0", "88.0", "96.0", "104.0", "112.0", "120.0"
58 };
59