summaryrefslogtreecommitdiff
path: root/src/h/opdefs.h
blob: 8f32e3000b325adc95c2694e3c8fec7ec08f8754 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * Opcode definitions used in icode.
 */

/*
 * Operators. These must be in the same order as in odefs.h.  Not very nice,
 *  but it'll have to do until we think of another way to do this.  (It's
 *  always been thus.)
 */
#define Op_Asgn		  1
#define Op_Bang		  2
#define Op_Cat		  3
#define Op_Compl	  4
#define Op_Diff		  5
#define Op_Div		  6
#define Op_Eqv		  7
#define Op_Inter	  8
#define Op_Lconcat	  9
#define Op_Lexeq	 10
#define Op_Lexge	 11
#define Op_Lexgt	 12
#define Op_Lexle	 13
#define Op_Lexlt	 14
#define Op_Lexne	 15
#define Op_Minus	 16
#define Op_Mod		 17
#define Op_Mult		 18
#define Op_Neg		 19
#define Op_Neqv		 20
#define Op_Nonnull	 21
#define Op_Null		 22
#define Op_Number	 23
#define Op_Numeq	 24
#define Op_Numge	 25
#define Op_Numgt	 26
#define Op_Numle	 27
#define Op_Numlt	 28
#define Op_Numne	 29
#define Op_Plus		 30
#define Op_Power	 31
#define Op_Random	 32
#define Op_Rasgn	 33
#define Op_Refresh	 34
#define Op_Rswap	 35
#define Op_Sect		 36
#define Op_Size		 37
#define Op_Subsc	 38
#define Op_Swap		 39
#define Op_Tabmat	 40
#define Op_Toby		 41
#define Op_Unions	 42
#define Op_Value	 43
/*
 * Other instructions.
 */
#define Op_Bscan	 44
#define Op_Ccase	 45
#define Op_Chfail	 46
#define Op_Coact	 47
#define Op_Cofail	 48
#define Op_Coret	 49
#define Op_Create	 50
#define Op_Cset		 51
#define Op_Dup		 52
#define Op_Efail	 53
#define Op_Eret		 54
#define Op_Escan	 55
#define Op_Esusp	 56
#define Op_Field	 57
#define Op_Goto		 58
#define Op_Init		 59
#define Op_Int		 60
#define Op_Invoke	 61
#define Op_Keywd	 62
#define Op_Limit	 63
#define Op_Line		 64
#define Op_Llist	 65
#define Op_Lsusp	 66
#define Op_Mark		 67
#define Op_Pfail	 68
#define Op_Pnull	 69
#define Op_Pop		 70
#define Op_Pret		 71
#define Op_Psusp	 72
#define Op_Push1	 73
#define Op_Pushn1	 74
#define Op_Real		 75
#define Op_Sdup		 76
#define Op_Str		 77
#define Op_Unmark	 78
#define Op_Var		 80
#define Op_Arg		 81
#define Op_Static	 82
#define Op_Local	 83
#define Op_Global	 84
#define Op_Mark0	 85
#define Op_Quit		 86
#define Op_FQuit	 87
#define Op_Tally	 88
#define Op_Apply	 89

/*
 * "Absolute" address operations.  These codes are inserted in the
 * icode at run-time by the interpreter to overwrite operations
 * that initially compute a location relative to locations not known until
 * the icode file is loaded.
 */
#define Op_Acset	 90
#define Op_Areal	 91
#define Op_Astr		 92
#define Op_Aglobal	 93
#define Op_Astatic	 94
#define Op_Agoto	 95
#define Op_Amark	 96

#define Op_Noop		 98

#define Op_Colm		108		/* column number */

/*
 * Declarations and such -- used by the linker but not the run-time system.
 */

#define Op_Proc		101
#define Op_Declend	102
#define Op_End		103
#define Op_Link		104
#define Op_Version	105
#define Op_Con		106
#define Op_Filen	107

/*
 * Global symbol table declarations.
 */
#define Op_Record	105
#define Op_Impl		106
#define Op_Error	107
#define Op_Trace	108
#define Op_Lab		109
#define Op_Invocable	110