1## 2## Copyright (c) 1982 Regents of the University of California 3## @(#)instrs 4.9 6/30/83 4## 5## Robert R. Henry 6## University of California, Berkeley 7## Berkeley, CA 8## February 6, 1982 9## 10## Updated 19 May 83 to include the page number in the 11## architecture reference manual (1981 edition) the instruction 12## is documented on, and to enumerate the instructions in the same 13## order as the reference manual does. 14## 15## THIS FILE IS BOTH AN AWK SCRIPT AND THE DATA 16## 17## Instruction definitions for the TAHOE 18## 19## This file is processed by an awk script, viz: 20## (echo "FLAVOR AS"; cat instrs) | awk -f instrs > as.instrs 21## (echo "FLAVOR ADB"; cat instrs) | awk -f instrs > as.instrs 22## (echo "FLAVOR SDB"; cat instrs) | awk -f instrs > as.instrs 23## (echo "FLAVOR C2"; cat instrs) | awk -f instrs > c2.instrs 24## 25## The data in this file is shared between: 26## as assembler 27## c2 optimizer 28## adb debugger 29## sdb symbolic debugger 30## 31## The awk script reads itself, and produces macros understood 32## by the appropriate consumer. The awk script determines how 33## to interpret the file by looking for a line of the form: 34## FLAVOR AS 35## FLAVOR ADB (same as AS, but without pseudo instructions) 36## FLAVOR SDB (same as ADB) 37## FLAVOR C2 (radically different format for instructions) 38## and proceeding accordingly. This line should be prepended to 39## the front of this file. 40## 41## Lines starting with # are always comments to awk 42## Lines starting with ## are always comments 43## Lines starting with a single # are data lines, to be output. 44## 45## Empty lines are passed through 46## 47## field user(s) what 48## 49## $2 awk #: comment to awk 50## 51## $3 as, c2, adb instruction name 52## 53## $4 c2 instruction class 54## $5 c2 instruction sub class 55## HARD, TN1, TNX2, OP 56## 57## $6 as, adb opcode byte 58## 59## $7 as, adb number of arguments 60## $8 as, adb 1st operand: access A,R,W,M,I,B 61## $9 as, adb 1st operand: type, BWLQOFDGH 62## 63## $10 as, adb 2nd operand: access 64## ... 65## 66## 67## These are the definitions used in this file: 68## instruction class (c2) 69## understood only by c2. If it is HARD, the second field 70## is ignored. 71## instruction subclass: (c2) 72## HARD paired with the class 73## S single valued attribute to C2 74## TN1 class + type of 1st operand 75## TNX2 class + type of 1st and 2nd operand 76## OP class + type of 1st operand and # of args 77## default class + subclass 78## 79## 80## code byte 81## number of arguments 82## Access type 83## A for address, only in memory 84## W for writing 85## R for reading 86## M for modifying 87## B for branch displacement 88## Data types 89## B byte 90## W word 91## L long 92## Q quad 93## F f_float 94## D d_float 95## 96## The order of instructions in this table is not critical; 97## the clients take care of their own table construction and ordering. 98## The instructions are grouped (more or less) into functional groups. 99## 100## The following is the awk program to interpret this table. 101 102BEGIN{ 103 flavor = AS; 104 ## 105 ## magic padding before the string for AS 106 ## 4 bytes of 0's: seek position of the string 107 ## 2 bytes, value 2, indicating core resident 108 ## 2 bytes, value 0, length 109 ## 110 ASpad = "\\0\\0\\0\\0" "\\2\\0"; 111} 112{ 113 if (NF == 0){ 114 printf("\n"); 115 next; 116 } 117 if ($1 == "FLAVOR"){ 118 flavor = $2; 119 if (flavor == "SDB"){ 120 flavor = "ADB"; 121 } 122 next; 123 } 124 if ($1 != "#"){ 125 next; 126 } 127 128 if ($6 == "MACR"){ 129 if (flavor == "ADB"){ 130 next; 131 } 132 if (flavor == "AS"){ 133 if ($4 == "CBR") 134 $4 = "IJXXX"; 135 printf("PSEUDO(\"%s\\0%o\\0%s\",", ASpad,length($3),$3); 136 printf("%s, %s),\n", $7, $4); 137 next; 138 } 139 if (flavor == "C2"){ 140 if ($5 == "C2X") 141 next; 142 printf("\"%s\",", $3); 143 if ($4 == "CBR" && $5 != "JBR"){ 144 printf("T(CBR,%s),\n", $5); 145 } else { 146 printf("%s,\n", $5); 147 } 148 next; 149 } 150 } 151 152 if (flavor == "C2"){ 153 printf("\"%s\",", $3); 154 if ($4 == "HARD"){ # 0 value 155 printf("0,\n"); 156 next; 157 } 158 if ($5 == "S"){ # single value 159 printf("%s,\n", $4); 160 next; 161 } 162 if ($5 == "TN1"){ # use type of 1st operand 163 printf("T(%s,TYP%s),\n", $4, $10); 164 next; 165 } 166 if ($5 == "TNX2"){ # cross product of 1st and 2nd operand 167 printf("T(%s,U(TYP%s,TYP%s)),\n", $4, $10, $12); 168 next; 169 } 170 if ($5 == "OP"){ # arithmetic operator 171 printf("T(%s,U(TYP%s,OP%d)),\n", $4, $10, $8); 172 next; 173 } 174 printf("T(%s,%s),\n", $4, $5); # special value 175 next; 176 } 177 if (flavor == "AS"){ 178 printf("OP(\"%s\\0%o\\0%s\", ", ASpad, length($3), $3); 179 printf("%s, %d", $6, $7); 180 } else { 181 printf("OP(\"%s\", %s, %d", $3, $6, $7); 182 } 183 if (flavor == "AS" || flavor == "ADB"){ 184 for (i = 8; i+1 <= NF; i = i + 2){ 185 printf(", A_%s%s", $i, $(i+1)); 186 } 187 for (i = $7; i < 6; i++){ 188 printf(",0"); 189 } 190 printf("),\n"); 191 } 192} 193## 194##------------------------------------------------------- 195##1 2 3 4 5 6 7 8 9 196## 197## 198## PSEUDO (MACR) operators come first 199 200## Data initializers 201 202# 000a .byte IBYTE C2X MACR 0 VAR 203# 000b .word IWORD WGEN MACR 0 VAR 204# 000c .int IINT LGEN MACR 0 VAR 205# 000d .long ILONG LGEN MACR 0 VAR 206# 000a .quad IQUAD C2X MACR 0 VAR 207# 000a .float IFFLOAT C2X MACR 0 VAR 208# 000a .double IDFLOAT C2X MACR 0 VAR 209# 000a .ffloat IFFLOAT C2X MACR 0 VAR 210# 000a .dfloat IDFLOAT C2X MACR 0 VAR 211# 000a .space ISPACE C2X MACR 0 1 212# 000a .fill IFILL C2X MACR 0 2 213# 000a .ascii IASCII C2X MACR 0 VAR 214# 000a .asciz IASCIZ C2X MACR 0 VAR 215 216# 000a .data IDATA DATA MACR 0 1 217# 000a .text ITEXT TEXT MACR 0 1 218# 000a .align IALIGN ALIGN MACR 0 1 219 220# 000a .line ILINENO C2X MACR 0 1 221# 000a .file IFILE C2X MACR 0 1 222 223# 000a .globl IGLOBAL EROU MACR 0 1 224# 000a .comm ICOMM COMM MACR 0 2 225# 000a .lcomm ILCOMM LCOMM MACR 0 2 226# 000a .set ISET SET MACR 0 2 227# 000a .lsym ILSYM C2X MACR 0 2 228# 000a .org IORG C2X MACR 0 1 229 230# 000a .stab ISTAB C2X MACR 0 6 231# 000a .stabd ISTABDOT C2X MACR 0 3 232# 000a .stabn ISTABNONE C2X MACR 0 3 233# 000a .stabs ISTABSTR C2X MACR 0 3 234 235# 000a .ABORT IABORT C2X MACR 0 0 236 237## Pseudo jumps 238 239# 000a jbc CBR JBC MACR 0x1e 1 B B 240# 000a jbs CBR JBS MACR 0x0e 1 B B 241 242# 000a jbr CBR JBR MACR 0x11 1 B B 243# 000a jcc CBR C2X MACR 0xf1 1 B B 244# 000a jcs CBR C2X MACR 0xe1 1 B B 245# 000a jvc CBR C2X MACR 0xc1 1 B B 246# 000a jvs CBR C2X MACR 0xd1 1 B B 247# 000a jlss CBR JLT MACR 0x91 1 B B 248# 000a jlssu CBR JLO MACR 0xf1 1 B B 249# 000a jleq CBR JLE MACR 0x51 1 B B 250# 000a jlequ CBR JLOS MACR 0xb1 1 B B 251# 000a jeql CBR JEQ MACR 0x31 1 B B 252# 000a jeqlu CBR JEQ MACR 0x31 1 B B 253# 000a jneq CBR JNE MACR 0x21 1 B B 254# 000a jnequ CBR JNE MACR 0x21 1 B B 255# 000a jgeq CBR JGE MACR 0x81 1 B B 256# 000a jgequ CBR JHIS MACR 0xe1 1 B B 257# 000a jgtr CBR JGT MACR 0x41 1 B B 258# 000a jgtru CBR JHI MACR 0xa1 1 B B 259## 260## Registers 261## 262# 000a r0 REG C2X MACR 0 0 263# 000a r1 REG C2X MACR 1 0 264# 000a r2 REG C2X MACR 2 0 265# 000a r3 REG C2X MACR 3 0 266# 000a r4 REG C2X MACR 4 0 267# 000a r5 REG C2X MACR 5 0 268# 000a r6 REG C2X MACR 6 0 269# 000a r7 REG C2X MACR 7 0 270# 000a r8 REG C2X MACR 8 0 271# 000a r9 REG C2X MACR 9 0 272# 000a r10 REG C2X MACR 10 0 273# 000a r11 REG C2X MACR 11 0 274# 000a r12 REG C2X MACR 12 0 275# 000a r13 REG C2X MACR 13 0 276# 000a r14 REG C2X MACR 14 0 277# 000a r15 REG C2X MACR 15 0 278# 000a fp REG C2X MACR 13 0 279# 000a sp REG C2X MACR 14 0 280# 000a pc REG C2X MACR 15 0 281 282## Normal instructions 283 284# 158a kcall HARD HARD 0xcf 1 R W 285# 160a prober PROBER TN1 0xc0 3 R B A B R L 286# 160a probew PROBEW TN1 0xd0 3 R B A B R L 287# 161a rei HARD HARD 0x20 0 288# 163a ldpctx HARD HARD 0x60 0 289# 163b svpctx HARD HARD 0x70 0 290# 165a mtpr MTPR TN1 0xad 2 R L R L 291# 165b mfpr MFPR TN1 0xbd 2 R L W L 292# 169a bpt HARD HARD 0x30 0 293# 171a halt HARD HARD 0x00 0 294# 175a movb MOV TN1 0x09 2 R B W B 295# 175b movw MOV TN1 0x0b 2 R W W W 296# 175c movl MOV TN1 0x0d 2 R L W L 297# 175d movblk HARD HARD 0xf8 0 298# 177a movob HARD HARD 0xc9 2 R B W B 299# 177b movow HARD HARD 0xcb 2 R W W W 300# 180a pushb PUSH TN1 0xd9 1 R B 301# 180b pushw PUSH TN1 0xdb 1 R W 302# 180a pushl PUSH TN1 0xdd 1 R L 303# 180d pushd HARD HARD 0x67 0 304# 181a clrb CLR TN1 0x49 1 W B 305# 181b clrw CLR TN1 0x4b 1 W W 306# 181c clrl CLR TN1 0x4d 1 W L 307# 182a mnegb NEG TN1 0xe8 2 R B W B 308# 182b mnegw NEG TN1 0xea 2 R W W W 309# 182c mnegl NEG TN1 0xec 2 R L W L 310# 182d negf HARD HARD 0xb6 0 311# 182e negd HARD HARD 0xb7 0 312# 183a mcomb COM TN1 0x29 2 R B W B 313# 183b mcomw COM TN1 0x2b 2 R W W W 314# 183c mcoml COM TN1 0x2d 2 R L W L 315# 184A cvtbw CVT TNX2 0x99 2 R B W W 316# 184B cvtbl CVT TNX2 0x89 2 R B W L 317# 184C cvtwb CVT TNX2 0x33 2 R W W B 318# 184D cvtwl CVT TNX2 0x23 2 R W W L 319# 184E cvtlb CVT TNX2 0x6f 2 R L W B 320# 184F cvtlw CVT TNX2 0x7f 2 R L W W 321# 184a cvfl CVT TN1 0x86 1 W L 322# 184b cvdl CVT TN1 0x87 1 W L 323# 184c cvlf CVT TN1 0x76 1 R L 324# 184d cvld CVT TN1 0x77 1 R L 325# 184e cvdf HARD HARD 0xa6 0 326# 187a movzbw MOVZ TNX2 0xb9 2 R B W W 327# 187b movzbl MOVZ TNX2 0xa9 2 R B W L 328# 187c movzwl MOVZ TNX2 0xc3 2 R W W L 329# 188a cmpb CMP TN1 0x19 2 R B R B 330# 188b cmpw CMP TN1 0x1b 2 R W R W 331# 188c cmpl CMP TN1 0x1d 2 R L R L 332# 188d cmpf CMP TN1 0x36 1 R F 333# 188e cmpf2 CMP TN1 0x46 2 R F R F 334# 188f cmpd CMP TN1 0x37 1 R D 335# 188g cmpd2 CMP TN1 0x47 2 R D R D 336# 189a incb INC TN1 0x69 1 M B 337# 189b incw INC TN1 0x6b 1 M W 338# 189c incl INC TN1 0x6d 1 M L 339# 190a tstb TST TN1 0x59 1 R B 340# 190b tstw TST TN1 0x5b 1 R W 341# 190c tstl TST TN1 0x5d 1 R L 342# 190d tstf HARD HARD 0x56 0 343# 190e tstd HARD HARD 0x57 0 344# 191a addb2 ADD OP 0x08 2 R B M B 345# 191b addb3 ADD OP 0x18 3 R B R B W B 346# 191c addw2 ADD OP 0x0a 2 R W M W 347# 191d addw3 ADD OP 0x1a 3 R W R W W W 348# 191e addl2 ADD OP 0x0c 2 R L M L 349# 191f addl3 ADD OP 0x1c 3 R L R L W L 350# 191g addf ADD OP 0xc6 1 R F 351# 191h addd ADD OP 0xc7 1 R D 352# 191i adda ADD OP 0x8e 2 R L M L 353# 193a adwc HARD HARD 0x8d 2 R L M L 354# 194a andb2 AND OP 0xa8 2 R B M B 355# 194b andb3 AND OP 0xb8 3 R B R B W B 356# 194c andw2 AND OP 0xaa 2 R W M W 357# 194d andw3 AND OP 0xba 3 R W R W W W 358# 194e andl2 AND OP 0xac 2 R L M L 359# 194f andl3 AND OP 0xbc 3 R L R L W L 360# 195c subb2 SUB OP 0x28 2 R B M B 361# 195d subb3 SUB OP 0x38 3 R B R B W B 362# 195e subw2 SUB OP 0x2a 2 R W M W 363# 195f subw3 SUB OP 0x3a 3 R W R W W W 364# 195g subl2 SUB OP 0x2c 2 R L M L 365# 195h subl3 SUB OP 0x3c 3 R L R L W L 366# 195i subf SUB OP 0xd6 1 R F 367# 195j subd SUB OP 0xd7 1 R D 368# 195k suba SUB OP 0x9e 2 R L M L 369# 197a decb DEC TN1 0x79 1 M B 370# 197b decw DEC TN1 0x7b 1 M W 371# 197c decl DEC TN1 0x7d 1 M L 372# 198a sbwc HARD HARD 0x9d 2 R L M L 373# 199a mull2 MUL OP 0x4c 2 R L M L 374# 199b mull3 MUL OP 0x5c 3 R L R L W L 375# 199c mulf MUL OP 0xe6 1 R F 376# 199d muld MUL OP 0xe7 1 R D 377# 201a emul HARD HARD 0x2e 4 R L R L R L W Q 378# 204a divl2 DIV OP 0x6c 2 R L M L 379# 204b divl3 DIV OP 0x7c 3 R L R L W L 380# 204c divf DIV OP 0xf6 1 R F 381# 204d divd DIV OP 0xf7 1 R D 382# 205a ediv HARD HARD 0x3e 4 R L R Q W L W L 383# 207a bitb BIT TN1 0x39 2 R B R B 384# 207b bitw BIT TN1 0x3b 2 R W R W 385# 207c bitl BIT TN1 0x3d 2 R L R L 386# 208a ldf HARD HARD 0x06 1 R F 387# 208b ldd HARD HARD 0x07 1 R D 388# 208c ldfd HARD HARD 0x97 1 R F 389# 208d lnf HARD HARD 0x16 1 R F 390# 208e lnd HARD HARD 0x17 1 R D 391# 208f stf HARD HARD 0x26 1 W F 392# 208g std HARD HARD 0x27 1 W D 393# 209a orb2 OR OP 0x88 2 R B M B 394# 209b orb3 OR OP 0x98 3 R B R B W B 395# 209c orw2 OR OP 0x8a 2 R W M W 396# 209d orw3 OR OP 0x9a 3 R W R W W W 397# 209e orl2 OR OP 0x8c 2 R L M L 398# 209f orl3 OR OP 0x9c 3 R L R L W L 399# 210a xorb2 XOR OP 0xc8 2 R B M B 400# 210b xorb3 XOR OP 0xd8 3 R B R B W B 401# 210c xorw2 XOR OP 0xca 2 R W M W 402# 210d xorw3 XOR OP 0xda 3 R W R W W W 403# 210e xorl2 XOR OP 0xcc 2 R L M L 404# 210f xorl3 XOR OP 0xdc 3 R L R L W L 405# 211a shal HARD HARD 0x4e 3 R B R L W L 406# 211b shar HARD HARD 0x5e 3 R B R L W L 407# 212a shll HARD HARD 0x48 3 R B R L W L 408# 212b shlq HARD HARD 0x4a 3 R B R Q W Q 409# 212c shrl HARD HARD 0x58 3 R B R L W L 410# 212c shrq HARD HARD 0x5a 3 R B R Q W Q 411# 220a storer HARD HARD 0xbb 2 R W A L 412# 221a loadr HARD HARD 0xab 2 R W A L 413# 222a movpsl HARD HARD 0xcd 1 W L 414# 223a bispsw HARD HARD 0x8b 1 R W 415# 223b bicpsw HARD HARD 0x9b 1 R W 416# 224a movab MOVA TN1 0xe9 2 A B W L 417# 224a pushab PUSHA TN1 0xf9 1 A B 418# 224b movaw MOVA TN1 0xeb 2 A W W L 419# 224b pushaw PUSHA TN1 0xfb 1 A W 420# 224c moval MOVA TN1 0xed 2 A L W L 421# 224c pushal PUSHA TN1 0xfd 1 A L 422# 232a insque HARD HARD 0xe0 2 A L A L 423# 234a remque HARD HARD 0xf0 1 A L 424# 251a ffc HARD HARD 0xbe 2 R L W L 425# 251b ffs HARD HARD 0xae 2 R L W L 426# 261a bneq CBR JNE 0x21 1 B B 427# 261b bnequ CBR JNE 0x21 1 B B 428# 261c beql CBR JEQ 0x31 1 B B 429# 261d beqlu CBR JEQ 0x31 1 B B 430# 261e bgtr CBR JGT 0x41 1 B B 431# 261f bleq CBR JLE 0x51 1 B B 432# 261g bgeq CBR JGE 0x81 1 B B 433# 261h blss CBR JLT 0x91 1 B B 434# 261i bgtru CBR JHI 0xa1 1 B B 435# 261j blequ CBR JLOS 0xb1 1 B B 436# 261k bvc CBR 0 0xc1 1 B B 437# 261l bvs CBR 0 0xd1 1 B B 438# 261m bgequ CBR JHIS 0xe1 1 B B 439# 261n bcc CBR JHIS 0xf1 1 B B 440# 261o blssu CBR JLO 0xf1 1 B B 441# 261p bcs CBR JLO 0xe1 1 B B 442# 261q btcs CBR 0 0xce 1 R B 443# 263a brb JBR S 0x11 1 B B 444# 263b brw JBR S 0x13 1 B W 445# 263c jmp JMP S 0x71 1 A B 446# 264a bbs CBR JBS 0x0e 3 R L R L B W 447# 264b bbc CBR JBC 0x1e 3 R L R L B W 448# 266a bbssi CBR JBSS 0x5f 3 R L M L B W 449# 270a aoblss AOBLSS S 0x2f 3 R L M L B W 450# 270b aobleq AOBLEQ S 0x3f 3 R L M L B W 451# 273a casel CASE TN1 0xfc 3 R L R L R L 452# 282a calls CALL S 0xbf 2 R B A B 453# 282b callf CALL S 0xfe 2 R B A B 454# 284a ret JBR RET 0x40 0 455# 288a movs2 HARD HARD 0x82 0 456# 288b movs3 HARD HARD 0xc2 0 457# 294a cmps2 HARD HARD 0x92 0 458# 294b cmps3 HARD HARD 0xd2 0 459# 300a sinf HARD HARD 0x05 0 460# 300b cosf HARD HARD 0x15 0 461# 300c atanf HARD HARD 0x25 0 462# 300d logf HARD HARD 0x35 0 463# 300e sqrtf HARD HARD 0x45 0 464# 300f expf HARD HARD 0x55 0 465# 385a nop HARD HARD 0x10 0 466