|
|
1.1 root 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
8: static char sccsid[] = "@(#)ops.tahoe.c 5.4 (Berkeley) 1/22/88";
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:
118: #ifndef ADBINSTRS
119: #define ADBINSTRS "../../bin/adb/adb.tahoe/instrs"
120: #endif
121:
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}
124: #include ADBINSTRS
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: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.