## ## Copyright (c) 1982 Regents of the University of California ## @(#)instrs 4.9 6/30/83 ## ## Robert R. Henry ## University of California, Berkeley ## Berkeley, CA ## February 6, 1982 ## ## Updated 19 May 83 to include the page number in the ## architecture reference manual (1981 edition) the instruction ## is documented on, and to enumerate the instructions in the same ## order as the reference manual does. ## ## THIS FILE IS BOTH AN AWK SCRIPT AND THE DATA ## ## Instruction definitions for the TAHOE ## ## This file is processed by an awk script, viz: ## (echo "FLAVOR AS"; cat instrs) | awk -f instrs > as.instrs ## (echo "FLAVOR ADB"; cat instrs) | awk -f instrs > as.instrs ## (echo "FLAVOR SDB"; cat instrs) | awk -f instrs > as.instrs ## (echo "FLAVOR C2"; cat instrs) | awk -f instrs > c2.instrs ## ## The data in this file is shared between: ## as assembler ## c2 optimizer ## adb debugger ## sdb symbolic debugger ## ## The awk script reads itself, and produces macros understood ## by the appropriate consumer. The awk script determines how ## to interpret the file by looking for a line of the form: ## FLAVOR AS ## FLAVOR ADB (same as AS, but without pseudo instructions) ## FLAVOR SDB (same as ADB) ## FLAVOR C2 (radically different format for instructions) ## and proceeding accordingly. This line should be prepended to ## the front of this file. ## ## Lines starting with # are always comments to awk ## Lines starting with ## are always comments ## Lines starting with a single # are data lines, to be output. ## ## Empty lines are passed through ## ## field user(s) what ## ## $2 awk #: comment to awk ## ## $3 as, c2, adb instruction name ## ## $4 c2 instruction class ## $5 c2 instruction sub class ## HARD, TN1, TNX2, OP ## ## $6 as, adb opcode byte ## ## $7 as, adb number of arguments ## $8 as, adb 1st operand: access A,R,W,M,I,B ## $9 as, adb 1st operand: type, BWLQOFDGH ## ## $10 as, adb 2nd operand: access ## ... ## ## ## These are the definitions used in this file: ## instruction class (c2) ## understood only by c2. If it is HARD, the second field ## is ignored. ## instruction subclass: (c2) ## HARD paired with the class ## S single valued attribute to C2 ## TN1 class + type of 1st operand ## TNX2 class + type of 1st and 2nd operand ## OP class + type of 1st operand and # of args ## default class + subclass ## ## ## code byte ## number of arguments ## Access type ## A for address, only in memory ## W for writing ## R for reading ## M for modifying ## B for branch displacement ## Data types ## B byte ## W word ## L long ## Q quad ## F f_float ## D d_float ## ## The order of instructions in this table is not critical; ## the clients take care of their own table construction and ordering. ## The instructions are grouped (more or less) into functional groups. ## ## The following is the awk program to interpret this table. BEGIN{ flavor = AS; ## ## magic padding before the string for AS ## 4 bytes of 0's: seek position of the string ## 2 bytes, value 2, indicating core resident ## 2 bytes, value 0, length ## ASpad = "\\0\\0\\0\\0" "\\2\\0"; } { if (NF == 0){ printf("\n"); next; } if ($1 == "FLAVOR"){ flavor = $2; if (flavor == "SDB"){ flavor = "ADB"; } next; } if ($1 != "#"){ next; } if ($6 == "MACR"){ if (flavor == "ADB"){ next; } if (flavor == "AS"){ if ($4 == "CBR") $4 = "IJXXX"; printf("PSEUDO(\"%s\\0%o\\0%s\",", ASpad,length($3),$3); printf("%s, %s),\n", $7, $4); next; } if (flavor == "C2"){ if ($5 == "C2X") next; printf("\"%s\",", $3); if ($4 == "CBR" && $5 != "JBR"){ printf("T(CBR,%s),\n", $5); } else { printf("%s,\n", $5); } next; } } if (flavor == "C2"){ printf("\"%s\",", $3); if ($4 == "HARD"){ # 0 value printf("0,\n"); next; } if ($5 == "S"){ # single value printf("%s,\n", $4); next; } if ($5 == "TN1"){ # use type of 1st operand printf("T(%s,TYP%s),\n", $4, $10); next; } if ($5 == "TNX2"){ # cross product of 1st and 2nd operand printf("T(%s,U(TYP%s,TYP%s)),\n", $4, $10, $12); next; } if ($5 == "OP"){ # arithmetic operator printf("T(%s,U(TYP%s,OP%d)),\n", $4, $10, $8); next; } printf("T(%s,%s),\n", $4, $5); # special value next; } if (flavor == "AS"){ printf("OP(\"%s\\0%o\\0%s\", ", ASpad, length($3), $3); printf("%s, %d", $6, $7); } else { printf("OP(\"%s\", %s, %d", $3, $6, $7); } if (flavor == "AS" || flavor == "ADB"){ for (i = 8; i+1 <= NF; i = i + 2){ printf(", A_%s%s", $i, $(i+1)); } for (i = $7; i < 6; i++){ printf(",0"); } printf("),\n"); } } ## ##------------------------------------------------------- ##1 2 3 4 5 6 7 8 9 ## ## ## PSEUDO (MACR) operators come first ## Data initializers # 000a .byte IBYTE C2X MACR 0 VAR # 000b .word IWORD WGEN MACR 0 VAR # 000c .int IINT LGEN MACR 0 VAR # 000d .long ILONG LGEN MACR 0 VAR # 000a .quad IQUAD C2X MACR 0 VAR # 000a .float IFFLOAT C2X MACR 0 VAR # 000a .double IDFLOAT C2X MACR 0 VAR # 000a .ffloat IFFLOAT C2X MACR 0 VAR # 000a .dfloat IDFLOAT C2X MACR 0 VAR # 000a .space ISPACE C2X MACR 0 1 # 000a .fill IFILL C2X MACR 0 2 # 000a .ascii IASCII C2X MACR 0 VAR # 000a .asciz IASCIZ C2X MACR 0 VAR # 000a .data IDATA DATA MACR 0 1 # 000a .text ITEXT TEXT MACR 0 1 # 000a .align IALIGN ALIGN MACR 0 1 # 000a .line ILINENO C2X MACR 0 1 # 000a .file IFILE C2X MACR 0 1 # 000a .globl IGLOBAL EROU MACR 0 1 # 000a .comm ICOMM COMM MACR 0 2 # 000a .lcomm ILCOMM LCOMM MACR 0 2 # 000a .set ISET SET MACR 0 2 # 000a .lsym ILSYM C2X MACR 0 2 # 000a .org IORG C2X MACR 0 1 # 000a .stab ISTAB C2X MACR 0 6 # 000a .stabd ISTABDOT C2X MACR 0 3 # 000a .stabn ISTABNONE C2X MACR 0 3 # 000a .stabs ISTABSTR C2X MACR 0 3 # 000a .ABORT IABORT C2X MACR 0 0 ## Pseudo jumps # 000a jbc CBR JBC MACR 0x1e 1 B B # 000a jbs CBR JBS MACR 0x0e 1 B B # 000a jbr CBR JBR MACR 0x11 1 B B # 000a jcc CBR C2X MACR 0xf1 1 B B # 000a jcs CBR C2X MACR 0xe1 1 B B # 000a jvc CBR C2X MACR 0xc1 1 B B # 000a jvs CBR C2X MACR 0xd1 1 B B # 000a jlss CBR JLT MACR 0x91 1 B B # 000a jlssu CBR JLO MACR 0xf1 1 B B # 000a jleq CBR JLE MACR 0x51 1 B B # 000a jlequ CBR JLOS MACR 0xb1 1 B B # 000a jeql CBR JEQ MACR 0x31 1 B B # 000a jeqlu CBR JEQ MACR 0x31 1 B B # 000a jneq CBR JNE MACR 0x21 1 B B # 000a jnequ CBR JNE MACR 0x21 1 B B # 000a jgeq CBR JGE MACR 0x81 1 B B # 000a jgequ CBR JHIS MACR 0xe1 1 B B # 000a jgtr CBR JGT MACR 0x41 1 B B # 000a jgtru CBR JHI MACR 0xa1 1 B B ## ## Registers ## # 000a r0 REG C2X MACR 0 0 # 000a r1 REG C2X MACR 1 0 # 000a r2 REG C2X MACR 2 0 # 000a r3 REG C2X MACR 3 0 # 000a r4 REG C2X MACR 4 0 # 000a r5 REG C2X MACR 5 0 # 000a r6 REG C2X MACR 6 0 # 000a r7 REG C2X MACR 7 0 # 000a r8 REG C2X MACR 8 0 # 000a r9 REG C2X MACR 9 0 # 000a r10 REG C2X MACR 10 0 # 000a r11 REG C2X MACR 11 0 # 000a r12 REG C2X MACR 12 0 # 000a r13 REG C2X MACR 13 0 # 000a r14 REG C2X MACR 14 0 # 000a r15 REG C2X MACR 15 0 # 000a fp REG C2X MACR 13 0 # 000a sp REG C2X MACR 14 0 # 000a pc REG C2X MACR 15 0 ## Normal instructions # 158a kcall HARD HARD 0xcf 1 R W # 160a prober PROBER TN1 0xc0 3 R B A B R L # 160a probew PROBEW TN1 0xd0 3 R B A B R L # 161a rei HARD HARD 0x20 0 # 163a ldpctx HARD HARD 0x60 0 # 163b svpctx HARD HARD 0x70 0 # 165a mtpr MTPR TN1 0xad 2 R L R L # 165b mfpr MFPR TN1 0xbd 2 R L W L # 169a bpt HARD HARD 0x30 0 # 171a halt HARD HARD 0x00 0 # 175a movb MOV TN1 0x09 2 R B W B # 175b movw MOV TN1 0x0b 2 R W W W # 175c movl MOV TN1 0x0d 2 R L W L # 175d movblk HARD HARD 0xf8 0 # 177a movob HARD HARD 0xc9 2 R B W B # 177b movow HARD HARD 0xcb 2 R W W W # 180a pushb PUSH TN1 0xd9 1 R B # 180b pushw PUSH TN1 0xdb 1 R W # 180a pushl PUSH TN1 0xdd 1 R L # 180d pushd HARD HARD 0x67 0 # 181a clrb CLR TN1 0x49 1 W B # 181b clrw CLR TN1 0x4b 1 W W # 181c clrl CLR TN1 0x4d 1 W L # 182a mnegb NEG TN1 0xe8 2 R B W B # 182b mnegw NEG TN1 0xea 2 R W W W # 182c mnegl NEG TN1 0xec 2 R L W L # 182d negf HARD HARD 0xb6 0 # 182e negd HARD HARD 0xb7 0 # 183a mcomb COM TN1 0x29 2 R B W B # 183b mcomw COM TN1 0x2b 2 R W W W # 183c mcoml COM TN1 0x2d 2 R L W L # 184A cvtbw CVT TNX2 0x99 2 R B W W # 184B cvtbl CVT TNX2 0x89 2 R B W L # 184C cvtwb CVT TNX2 0x33 2 R W W B # 184D cvtwl CVT TNX2 0x23 2 R W W L # 184E cvtlb CVT TNX2 0x6f 2 R L W B # 184F cvtlw CVT TNX2 0x7f 2 R L W W # 184a cvfl CVT TN1 0x86 1 W L # 184b cvdl CVT TN1 0x87 1 W L # 184c cvlf CVT TN1 0x76 1 R L # 184d cvld CVT TN1 0x77 1 R L # 184e cvdf HARD HARD 0xa6 0 # 187a movzbw MOVZ TNX2 0xb9 2 R B W W # 187b movzbl MOVZ TNX2 0xa9 2 R B W L # 187c movzwl MOVZ TNX2 0xc3 2 R W W L # 188a cmpb CMP TN1 0x19 2 R B R B # 188b cmpw CMP TN1 0x1b 2 R W R W # 188c cmpl CMP TN1 0x1d 2 R L R L # 188d cmpf CMP TN1 0x36 1 R F # 188e cmpf2 CMP TN1 0x46 2 R F R F # 188f cmpd CMP TN1 0x37 1 R D # 188g cmpd2 CMP TN1 0x47 2 R D R D # 189a incb INC TN1 0x69 1 M B # 189b incw INC TN1 0x6b 1 M W # 189c incl INC TN1 0x6d 1 M L # 190a tstb TST TN1 0x59 1 R B # 190b tstw TST TN1 0x5b 1 R W # 190c tstl TST TN1 0x5d 1 R L # 190d tstf HARD HARD 0x56 0 # 190e tstd HARD HARD 0x57 0 # 191a addb2 ADD OP 0x08 2 R B M B # 191b addb3 ADD OP 0x18 3 R B R B W B # 191c addw2 ADD OP 0x0a 2 R W M W # 191d addw3 ADD OP 0x1a 3 R W R W W W # 191e addl2 ADD OP 0x0c 2 R L M L # 191f addl3 ADD OP 0x1c 3 R L R L W L # 191g addf ADD OP 0xc6 1 R F # 191h addd ADD OP 0xc7 1 R D # 191i adda ADD OP 0x8e 2 R L M L # 193a adwc HARD HARD 0x8d 2 R L M L # 194a andb2 AND OP 0xa8 2 R B M B # 194b andb3 AND OP 0xb8 3 R B R B W B # 194c andw2 AND OP 0xaa 2 R W M W # 194d andw3 AND OP 0xba 3 R W R W W W # 194e andl2 AND OP 0xac 2 R L M L # 194f andl3 AND OP 0xbc 3 R L R L W L # 195c subb2 SUB OP 0x28 2 R B M B # 195d subb3 SUB OP 0x38 3 R B R B W B # 195e subw2 SUB OP 0x2a 2 R W M W # 195f subw3 SUB OP 0x3a 3 R W R W W W # 195g subl2 SUB OP 0x2c 2 R L M L # 195h subl3 SUB OP 0x3c 3 R L R L W L # 195i subf SUB OP 0xd6 1 R F # 195j subd SUB OP 0xd7 1 R D # 195k suba SUB OP 0x9e 2 R L M L # 197a decb DEC TN1 0x79 1 M B # 197b decw DEC TN1 0x7b 1 M W # 197c decl DEC TN1 0x7d 1 M L # 198a sbwc HARD HARD 0x9d 2 R L M L # 199a mull2 MUL OP 0x4c 2 R L M L # 199b mull3 MUL OP 0x5c 3 R L R L W L # 199c mulf MUL OP 0xe6 1 R F # 199d muld MUL OP 0xe7 1 R D # 201a emul HARD HARD 0x2e 4 R L R L R L W Q # 204a divl2 DIV OP 0x6c 2 R L M L # 204b divl3 DIV OP 0x7c 3 R L R L W L # 204c divf DIV OP 0xf6 1 R F # 204d divd DIV OP 0xf7 1 R D # 205a ediv HARD HARD 0x3e 4 R L R Q W L W L # 207a bitb BIT TN1 0x39 2 R B R B # 207b bitw BIT TN1 0x3b 2 R W R W # 207c bitl BIT TN1 0x3d 2 R L R L # 208a ldf HARD HARD 0x06 1 R F # 208b ldd HARD HARD 0x07 1 R D # 208c ldfd HARD HARD 0x97 1 R F # 208d lnf HARD HARD 0x16 1 R F # 208e lnd HARD HARD 0x17 1 R D # 208f stf HARD HARD 0x26 1 W F # 208g std HARD HARD 0x27 1 W D # 209a orb2 OR OP 0x88 2 R B M B # 209b orb3 OR OP 0x98 3 R B R B W B # 209c orw2 OR OP 0x8a 2 R W M W # 209d orw3 OR OP 0x9a 3 R W R W W W # 209e orl2 OR OP 0x8c 2 R L M L # 209f orl3 OR OP 0x9c 3 R L R L W L # 210a xorb2 XOR OP 0xc8 2 R B M B # 210b xorb3 XOR OP 0xd8 3 R B R B W B # 210c xorw2 XOR OP 0xca 2 R W M W # 210d xorw3 XOR OP 0xda 3 R W R W W W # 210e xorl2 XOR OP 0xcc 2 R L M L # 210f xorl3 XOR OP 0xdc 3 R L R L W L # 211a shal HARD HARD 0x4e 3 R B R L W L # 211b shar HARD HARD 0x5e 3 R B R L W L # 212a shll HARD HARD 0x48 3 R B R L W L # 212b shlq HARD HARD 0x4a 3 R B R Q W Q # 212c shrl HARD HARD 0x58 3 R B R L W L # 212c shrq HARD HARD 0x5a 3 R B R Q W Q # 220a storer HARD HARD 0xbb 2 R W A L # 221a loadr HARD HARD 0xab 2 R W A L # 222a movpsl HARD HARD 0xcd 1 W L # 223a bispsw HARD HARD 0x8b 1 R W # 223b bicpsw HARD HARD 0x9b 1 R W # 224a movab MOVA TN1 0xe9 2 A B W L # 224a pushab PUSHA TN1 0xf9 1 A B # 224b movaw MOVA TN1 0xeb 2 A W W L # 224b pushaw PUSHA TN1 0xfb 1 A W # 224c moval MOVA TN1 0xed 2 A L W L # 224c pushal PUSHA TN1 0xfd 1 A L # 232a insque HARD HARD 0xe0 2 A L A L # 234a remque HARD HARD 0xf0 1 A L # 251a ffc HARD HARD 0xbe 2 R L W L # 251b ffs HARD HARD 0xae 2 R L W L # 261a bneq CBR JNE 0x21 1 B B # 261b bnequ CBR JNE 0x21 1 B B # 261c beql CBR JEQ 0x31 1 B B # 261d beqlu CBR JEQ 0x31 1 B B # 261e bgtr CBR JGT 0x41 1 B B # 261f bleq CBR JLE 0x51 1 B B # 261g bgeq CBR JGE 0x81 1 B B # 261h blss CBR JLT 0x91 1 B B # 261i bgtru CBR JHI 0xa1 1 B B # 261j blequ CBR JLOS 0xb1 1 B B # 261k bvc CBR 0 0xc1 1 B B # 261l bvs CBR 0 0xd1 1 B B # 261m bgequ CBR JHIS 0xe1 1 B B # 261n bcc CBR JHIS 0xf1 1 B B # 261o blssu CBR JLO 0xf1 1 B B # 261p bcs CBR JLO 0xe1 1 B B # 261q btcs CBR 0 0xce 1 R B # 263a brb JBR S 0x11 1 B B # 263b brw JBR S 0x13 1 B W # 263c jmp JMP S 0x71 1 A B # 264a bbs CBR JBS 0x0e 3 R L R L B W # 264b bbc CBR JBC 0x1e 3 R L R L B W # 266a bbssi CBR JBSS 0x5f 3 R L M L B W # 270a aoblss AOBLSS S 0x2f 3 R L M L B W # 270b aobleq AOBLEQ S 0x3f 3 R L M L B W # 273a casel CASE TN1 0xfc 3 R L R L R L # 282a calls CALL S 0xbf 2 R B A B # 282b callf CALL S 0xfe 2 R B A B # 284a ret JBR RET 0x40 0 # 288a movs2 HARD HARD 0x82 0 # 288b movs3 HARD HARD 0xc2 0 # 294a cmps2 HARD HARD 0x92 0 # 294b cmps3 HARD HARD 0xd2 0 # 300a sinf HARD HARD 0x05 0 # 300b cosf HARD HARD 0x15 0 # 300c atanf HARD HARD 0x25 0 # 300d logf HARD HARD 0x35 0 # 300e sqrtf HARD HARD 0x45 0 # 300f expf HARD HARD 0x55 0 # 385a nop HARD HARD 0x10 0