|
|
1.1 root 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:
102: BEGIN{
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.