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.5 (Berkeley) 03/06/89"; 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.adb" 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 }; 176