Commit | Line | Data |
---|---|---|
2265b224 SL |
1 | /* |
2 | * Copyright (c) 1985 Regents of the University of California. | |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
5 | */ | |
6 | ||
7 | #ifndef lint | |
d969d8a3 | 8 | static char sccsid[] = "@(#)ops.tahoe.c 5.5 (Berkeley) %G%"; |
2265b224 SL |
9 | #endif not lint |
10 | ||
11 | /* | |
12 | * Machine operators. | |
13 | */ | |
14 | ||
15 | #include "defs.h" | |
16 | #include "ops.h" | |
17 | ||
18 | #ifndef public | |
19 | typedef unsigned char Opcode; | |
20 | ||
21 | /* | |
22 | * Opcode definitions. | |
23 | */ | |
24 | ||
25 | /* | |
26 | * Argument access types | |
27 | */ | |
28 | #define ACCA (8<<3) /* address only */ | |
29 | #define ACCR (1<<3) /* read */ | |
30 | #define ACCW (2<<3) /* write */ | |
31 | #define ACCM (3<<3) /* modify */ | |
32 | #define ACCB (4<<3) /* branch displacement */ | |
33 | #define ACCI (5<<3) /* XFC code */ | |
34 | ||
35 | /* | |
36 | * Argument data types | |
37 | */ | |
38 | #define TYPB 0 /* byte */ | |
39 | #define TYPW 1 /* word */ | |
40 | #define TYPL 2 /* long */ | |
41 | #define TYPQ 3 /* quad */ | |
42 | #define TYPF 4 /* float */ | |
43 | #define TYPD 5 /* double */ | |
44 | ||
45 | /* | |
46 | * Addressing modes. | |
47 | */ | |
48 | #define LITSHORT 0x0 /* short literals */ | |
49 | #define LITUPTO31 0x1 | |
50 | #define LITUPTO47 0x2 | |
51 | #define LITUPTO63 0x3 | |
52 | #define INDEX 0x4 /* i[r] */ | |
53 | #define REG 0x5 /* r */ | |
54 | #define REGDEF 0x6 /* (r) */ | |
55 | #define AUTODEC 0x7 /* -(r) */ | |
56 | #define AUTOINC 0x8 /* (r)+ */ | |
57 | #define AUTOINCDEF 0x9 /* *(r)+ */ | |
58 | #define BYTEDISP 0xA /* BD(r) */ | |
59 | #define BYTEDISPDEF 0xB /* *BD(r) */ | |
60 | #define WORDDISP 0xC /* WD(r) */ | |
61 | #define WORDDISPDEF 0xD /* *WD(r) */ | |
62 | #define LONGDISP 0xE /* LD(r) */ | |
63 | #define LONGDISPDEF 0xF /* *LD(r) */ | |
64 | ||
65 | #define is_branch_disp(arg) ((arg & ACCB) != 0) | |
66 | #define typelen(arg) (arg & 07) | |
67 | #define regnm(mode) (mode & 0xF) | |
68 | #define addrmode(mode) (mode >> 4) | |
69 | ||
70 | /* | |
71 | * Certain opcodes values are used either in calculating | |
72 | * the next address a process will go to, or for other | |
73 | * random reasons -- these are defined here. | |
74 | */ | |
75 | #define O_AOBLEQ 0x3f | |
76 | #define O_AOBLSS 0x2f | |
77 | #define O_BBC 0x1e | |
78 | #define O_BBS 0x0e | |
79 | #define O_BBSSI 0x5f | |
80 | #define O_BCC 0xf1 | |
81 | #define O_BCS 0xe1 | |
82 | #define O_BEQL 0x31 | |
83 | #define O_BGEQ 0x81 | |
84 | #define O_BGEQU 0xe1 | |
85 | #define O_BGTR 0x41 | |
86 | #define O_BGTRU 0xa1 | |
87 | #define O_BLEQ 0x51 | |
88 | #define O_BLEQU 0xb1 | |
89 | #define O_BLSS 0x91 | |
90 | #define O_BLSSU 0xf1 | |
91 | #define O_BNEQ 0x21 | |
92 | #define O_BPT 0x30 | |
93 | #define O_BRB 0x11 | |
94 | #define O_BRW 0x13 | |
95 | #define O_BTCS 0xce | |
96 | #define O_BVC 0xc1 | |
97 | #define O_BVS 0xd1 | |
98 | #define O_CALLF 0xfe | |
99 | #define O_CALLS 0xbf | |
100 | #define O_CASEL 0xfc | |
101 | #define O_JMP 0x71 | |
102 | #define O_KCALL 0xcf | |
103 | #define O_RET 0x40 | |
104 | ||
105 | /* | |
106 | * Operator information structure. | |
107 | */ | |
108 | typedef struct { | |
109 | char *iname; | |
110 | char val; | |
111 | char numargs; | |
112 | char argtype[6]; | |
113 | } Optab; | |
114 | ||
115 | #define SYSSIZE 151 /* # of system calls */ | |
116 | #endif | |
117 | ||
86872dab | 118 | #ifndef ADBINSTRS |
d969d8a3 | 119 | #define ADBINSTRS "../../bin/adb/adb.tahoe/instrs.adb" |
86872dab DS |
120 | #endif |
121 | ||
2265b224 SL |
122 | public Optab optab[] = { |
123 | #define OP(a,b,c,d,e,f,g,h,i) {a,b,c,d,e,f,g,h,i} | |
86872dab | 124 | #include ADBINSTRS |
2265b224 SL |
125 | 0}; |
126 | ||
127 | /* | |
128 | * Register names. | |
129 | */ | |
130 | ||
131 | public String regname[] = { | |
132 | "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", | |
133 | "r8", "r9", "r10","r11","r12", "fp", "sp", "pc" | |
134 | }; | |
135 | ||
136 | public String systab[SYSSIZE] = { | |
137 | "indir", "exit", "fork", "read", | |
138 | "write", "open", "close", "owait", | |
139 | "creat", "link", "unlink", "execv", | |
140 | "chdir", "otime", "mknod", "chmod", | |
141 | "chown", "obreak", "ostat", "lseek", | |
142 | "getpid", "mount", "umount", "osetuid", | |
143 | "getuid", "ostime", "ptrace", "oalarm", | |
144 | "ofstat", "opause", "outime", "ostty", | |
145 | "ogtty", "access", "onice", "oftime", | |
146 | "sync", "kill", "stat", "osetpgrp", | |
147 | "lstat", "dup", "pipe", "otimes", | |
148 | "profil", 0, "osetgid", "getgid", | |
149 | "osig", 0, 0, "acct", | |
150 | "ophys", "olock", "ioctl", "reboot", | |
151 | "ompxchan", "symlink", "readlink", "execve", | |
152 | "umask", "chroot", "fstat", 0, | |
153 | "getpagesize", "mremap", "vfork", "ovread", | |
154 | "ovwrite", "sbrk", "sstk", "mmap", | |
155 | "ovadvise", "munmap", "mprotect", "madvise", | |
156 | "vhangup", "ovlimit", "mincore", "getgroups", | |
157 | "setgroups", "getpgrp", "setpgrp", "setitimer", | |
158 | "wait", "swapon", "getitimer", "gethostname", | |
159 | "sethostname", "getdtablesize","dup2", "getdopt", | |
160 | "fcntl", "select", "setdopt", "fsync", | |
161 | "setpriority", "socket", "connect", "accept", | |
162 | "getpriority", "send", "recv", "osocketaddr", | |
163 | "bind", "setsockopt", "listen", "ovtimes", | |
164 | "sigvec", "sigblock", "sigsetmask", "sigpause", | |
165 | "sigstack", "recvmsg", "sendmsg", "vtrace", | |
166 | "gettimeofday", "getrusage", "getsockopt", "resuba", | |
167 | "readv", "writev", "settimeofday", "fchown", | |
168 | "fchmod", "recvfrom", "setreuid", "setregid", | |
169 | "rename", "truncate", "ftruncate", "flock", | |
170 | 0, "sendto", "shutdown", "socketpair", | |
171 | "mkdir", "rmdir", "utimes", 0, | |
172 | 0, "getpeername", "gethostid", "sethostid", | |
173 | "getrlimit", "setrlimit", "killpg", 0, | |
174 | "quota", "qquota", "getsockname", | |
175 | }; |