BSD 4_3_Tahoe release
[unix-history] / usr / src / lib / old_compiler / as / as.tahoe / instrs
##
## 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