ic10c-node 2.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +300 -0
- package/README.zh.md +300 -0
- package/package.json +50 -0
- package/src/ic10c-node.node +0 -0
- package/src/stdLib.ic +692 -0
- package/static/stdLib.ic.json +3 -0
- package/tsconfig.json +16 -0
- package/types/common.d.ts +145 -0
- package/types/incremental.d.ts +83 -0
- package/types/index.d.ts +53 -0
- package/types/lexer/index.d.ts +18 -0
- package/types/lexer/lexer.d.ts +83 -0
- package/types/lexer/token.d.ts +341 -0
- package/types/linker.d.ts +156 -0
- package/types/locale.d.ts +36 -0
- package/types/parser/ast.d.ts +848 -0
- package/types/parser/index.d.ts +19 -0
- package/types/parser/instructions/binary.d.ts +1209 -0
- package/types/parser/instructions/index.d.ts +22 -0
- package/types/parser/instructions/nullary.d.ts +85 -0
- package/types/parser/instructions/quaternary.d.ts +603 -0
- package/types/parser/instructions/quinary.d.ts +150 -0
- package/types/parser/instructions/senary.d.ts +104 -0
- package/types/parser/instructions/ternary.d.ts +1551 -0
- package/types/parser/instructions/unary.d.ts +518 -0
- package/types/parser/parser.d.ts +84 -0
- package/types/parser/program.d.ts +136 -0
- package/types/semantic/analyser.d.ts +98 -0
- package/types/semantic/index.d.ts +19 -0
- package/types/semantic/semantic.d.ts +81 -0
- package/types/semantic/type_table.d.ts +119 -0
- package/types/semantic/types.d.ts +100 -0
|
@@ -0,0 +1,1551 @@
|
|
|
1
|
+
// Copyright (c) 2026. All rights reserved.
|
|
2
|
+
// This source code is licensed under the CC BY-NC-SA
|
|
3
|
+
// (Creative Commons Attribution-NonCommercial-NoDerivatives) License, By Xiao Songtao.
|
|
4
|
+
// This software is protected by copyright law. Reproduction, distribution, or use for commercial
|
|
5
|
+
// purposes is prohibited without the author's permission. If you have any questions or require
|
|
6
|
+
// permission, please contact the author: edocsitahw@qq.com
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @file ternary.d.ts
|
|
10
|
+
* @author edocsitahw
|
|
11
|
+
* @version 1.1
|
|
12
|
+
* @date 2026/07/22 15:45
|
|
13
|
+
* @desc
|
|
14
|
+
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
|
+
* */
|
|
16
|
+
import {
|
|
17
|
+
ErrorNode,
|
|
18
|
+
RegisterOrIdentifierNode,
|
|
19
|
+
OperandNode,
|
|
20
|
+
DeviceReferenceNode,
|
|
21
|
+
LogicTypeNode,
|
|
22
|
+
ReagentModeNode,
|
|
23
|
+
OperandType
|
|
24
|
+
} from "../ast";
|
|
25
|
+
import {BinaryInstruction} from "./binary";
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
// 三元指令(3 个操作数)
|
|
29
|
+
|
|
30
|
+
export interface TernaryInstruction extends BinaryInstruction {
|
|
31
|
+
type3: OperandType;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @summary 三元指令概述
|
|
37
|
+
*
|
|
38
|
+
* @desc 三元指令是包含三个操作数的指令。
|
|
39
|
+
* 根据操作数类型可分为以下几类:
|
|
40
|
+
* - **TernaryInstruction_RI_O_O**:寄存器/标识符 + 操作数 + 操作数
|
|
41
|
+
* - **TernaryInstruction_RI_DR_O**:寄存器/标识符 + 设备引用 + 操作数
|
|
42
|
+
* - **TernaryInstruction_DR_O_O**:设备引用 + 操作数 + 操作数
|
|
43
|
+
* - **TernaryInstruction_RI_DR_LT**:寄存器/标识符 + 设备引用 + 逻辑类型
|
|
44
|
+
* - **TernaryInstruction_RI_DR_RM**:寄存器/标识符 + 设备引用 + 试剂模式
|
|
45
|
+
* - **TernaryInstruction_DR_LT_RI**:设备引用 + 逻辑类型 + 寄存器/标识符
|
|
46
|
+
* - **TernaryInstruction_O_LT_RI**:操作数 + 逻辑类型 + 寄存器/标识符
|
|
47
|
+
* - **TernaryInstruction_DR_LT_O**:设备引用 + 逻辑类型 + 操作数
|
|
48
|
+
* - **TernaryInstruction_O_O_O**:操作数 + 操作数 + 操作数
|
|
49
|
+
*
|
|
50
|
+
* @elseif en
|
|
51
|
+
* @summary Ternary Instructions Overview
|
|
52
|
+
*
|
|
53
|
+
* @desc Ternary instructions contain three operands.
|
|
54
|
+
* They are categorized by operand types:
|
|
55
|
+
* - **TernaryInstruction_RI_O_O**: Register/identifier + operand + operand
|
|
56
|
+
* - **TernaryInstruction_RI_DR_O**: Register/identifier + device reference + operand
|
|
57
|
+
* - **TernaryInstruction_DR_O_O**: Device reference + operand + operand
|
|
58
|
+
* - **TernaryInstruction_RI_DR_LT**: Register/identifier + device reference + logic type
|
|
59
|
+
* - **TernaryInstruction_RI_DR_RM**: Register/identifier + device reference + reagent mode
|
|
60
|
+
* - **TernaryInstruction_DR_LT_RI**: Device reference + logic type + register/identifier
|
|
61
|
+
* - **TernaryInstruction_O_LT_RI**: Operand + logic type + register/identifier
|
|
62
|
+
* - **TernaryInstruction_DR_LT_O**: Device reference + logic type + operand
|
|
63
|
+
* - **TernaryInstruction_O_O_O**: Operand + operand + operand
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @summary 含 RegisterOrIdentifier + Operand + Operand 操作数的三元指令基类
|
|
68
|
+
*
|
|
69
|
+
* @desc 第一个操作数为寄存器或标识符,第二、三个为通用操作数。
|
|
70
|
+
* @elseif en
|
|
71
|
+
* @summary Base interface for ternary instructions with RegisterOrIdentifier + Operand + Operand operands
|
|
72
|
+
*
|
|
73
|
+
* @desc First operand is a register or identifier, second and third are general operands.
|
|
74
|
+
*
|
|
75
|
+
* @public
|
|
76
|
+
*/
|
|
77
|
+
interface TernaryInstruction_RI_O_O extends TernaryInstruction {
|
|
78
|
+
operand1: RegisterOrIdentifierNode;
|
|
79
|
+
operand2: OperandNode;
|
|
80
|
+
operand3: OperandNode;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @summary ADD(加法)指令节点
|
|
86
|
+
*
|
|
87
|
+
* @desc 将第二个和第三个操作数相加,结果存入目标寄存器。
|
|
88
|
+
* @elseif en
|
|
89
|
+
* @summary ADD (Addition) instruction node
|
|
90
|
+
*
|
|
91
|
+
* @desc Adds the second and third operands, storing the result in the target register.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // ADD r0 r1 r2
|
|
96
|
+
* // 计算 r1 + r2 并存入 r0
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
export interface AddInstructionNode extends TernaryInstruction_RI_O_O {
|
|
102
|
+
type: "addInstruction";
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @summary ATAN2(反正切2)指令节点
|
|
108
|
+
*
|
|
109
|
+
* @desc 计算第二个操作数除以第三个操作数的反正切值(弧度制)。
|
|
110
|
+
* @elseif en
|
|
111
|
+
* @summary ATAN2 (Arc Tangent 2) instruction node
|
|
112
|
+
*
|
|
113
|
+
* @desc Computes the arc tangent of the second operand divided by the third operand (in radians).
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```typescript
|
|
117
|
+
* // ATAN2 r0 r1 r2
|
|
118
|
+
* // 计算 atan2(r1, r2) 并存入 r0
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @public
|
|
122
|
+
*/
|
|
123
|
+
export interface Atan2InstructionNode extends TernaryInstruction_RI_O_O {
|
|
124
|
+
type: "atan2Instruction";
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @summary DIV(除法)指令节点
|
|
130
|
+
*
|
|
131
|
+
* @desc 将第二个操作数除以第三个操作数,结果存入目标寄存器。
|
|
132
|
+
* @elseif en
|
|
133
|
+
* @summary DIV (Division) instruction node
|
|
134
|
+
*
|
|
135
|
+
* @desc Divides the second operand by the third operand, storing the result in the target register.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* // DIV r0 r1 r2
|
|
140
|
+
* // 计算 r1 / r2 并存入 r0
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* @public
|
|
144
|
+
*/
|
|
145
|
+
export interface DivInstructionNode extends TernaryInstruction_RI_O_O {
|
|
146
|
+
type: "divInstruction";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @summary MAX(最大值)指令节点
|
|
152
|
+
*
|
|
153
|
+
* @desc 比较第二个和第三个操作数,将较大值存入目标寄存器。
|
|
154
|
+
* @elseif en
|
|
155
|
+
* @summary MAX (Maximum) instruction node
|
|
156
|
+
*
|
|
157
|
+
* @desc Compares the second and third operands, storing the larger value in the target register.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```typescript
|
|
161
|
+
* // MAX r0 r1 r2
|
|
162
|
+
* // 将 r1 和 r2 中的较大值存入 r0
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* @public
|
|
166
|
+
*/
|
|
167
|
+
export interface MaxInstructionNode extends TernaryInstruction_RI_O_O {
|
|
168
|
+
type: "maxInstruction";
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @summary MIN(最小值)指令节点
|
|
174
|
+
*
|
|
175
|
+
* @desc 比较第二个和第三个操作数,将较小值存入目标寄存器。
|
|
176
|
+
* @elseif en
|
|
177
|
+
* @summary MIN (Minimum) instruction node
|
|
178
|
+
*
|
|
179
|
+
* @desc Compares the second and third operands, storing the smaller value in the target register.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* // MIN r0 r1 r2
|
|
184
|
+
* // 将 r1 和 r2 中的较小值存入 r0
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* @public
|
|
188
|
+
*/
|
|
189
|
+
export interface MinInstructionNode extends TernaryInstruction_RI_O_O {
|
|
190
|
+
type: "minInstruction";
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* @summary MOD(取模)指令节点
|
|
196
|
+
*
|
|
197
|
+
* @desc 计算第二个操作数除以第三个操作数的余数。
|
|
198
|
+
* @elseif en
|
|
199
|
+
* @summary MOD (Modulo) instruction node
|
|
200
|
+
*
|
|
201
|
+
* @desc Computes the remainder of the second operand divided by the third operand.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* // MOD r0 r1 r2
|
|
206
|
+
* // 计算 r1 % r2 并存入 r0
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @public
|
|
210
|
+
*/
|
|
211
|
+
export interface ModInstructionNode extends TernaryInstruction_RI_O_O {
|
|
212
|
+
type: "modInstruction";
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* @summary MUL(乘法)指令节点
|
|
218
|
+
*
|
|
219
|
+
* @desc 将第二个和第三个操作数相乘,结果存入目标寄存器。
|
|
220
|
+
* @elseif en
|
|
221
|
+
* @summary MUL (Multiplication) instruction node
|
|
222
|
+
*
|
|
223
|
+
* @desc Multiplies the second and third operands, storing the result in the target register.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* // MUL r0 r1 r2
|
|
228
|
+
* // 计算 r1 * r2 并存入 r0
|
|
229
|
+
* ```
|
|
230
|
+
*
|
|
231
|
+
* @public
|
|
232
|
+
*/
|
|
233
|
+
export interface MulInstructionNode extends TernaryInstruction_RI_O_O {
|
|
234
|
+
type: "mulInstruction";
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* @summary POW(幂运算)指令节点
|
|
240
|
+
*
|
|
241
|
+
* @desc 计算第二个操作数的第三次操作数次幂。
|
|
242
|
+
* @elseif en
|
|
243
|
+
* @summary POW (Power) instruction node
|
|
244
|
+
*
|
|
245
|
+
* @desc Computes the second operand raised to the power of the third operand.
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* // POW r0 r1 r2
|
|
250
|
+
* // 计算 r1 ^ r2 并存入 r0
|
|
251
|
+
* ```
|
|
252
|
+
*
|
|
253
|
+
* @public
|
|
254
|
+
*/
|
|
255
|
+
export interface PowInstructionNode extends TernaryInstruction_RI_O_O {
|
|
256
|
+
type: "powInstruction";
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @summary AND(按位与)指令节点
|
|
262
|
+
*
|
|
263
|
+
* @desc 对第二个和第三个操作数进行按位与运算。
|
|
264
|
+
* @elseif en
|
|
265
|
+
* @summary AND (Bitwise AND) instruction node
|
|
266
|
+
*
|
|
267
|
+
* @desc Performs bitwise AND operation on the second and third operands.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```typescript
|
|
271
|
+
* // AND r0 r1 r2
|
|
272
|
+
* // 计算 r1 & r2 并存入 r0
|
|
273
|
+
* ```
|
|
274
|
+
*
|
|
275
|
+
* @public
|
|
276
|
+
*/
|
|
277
|
+
export interface AndInstructionNode extends TernaryInstruction_RI_O_O {
|
|
278
|
+
type: "andInstruction";
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* @summary NOR(按位或非)指令节点
|
|
284
|
+
*
|
|
285
|
+
* @desc 对第二个和第三个操作数进行按位或运算,然后取反。
|
|
286
|
+
* @elseif en
|
|
287
|
+
* @summary NOR (Bitwise NOR) instruction node
|
|
288
|
+
*
|
|
289
|
+
* @desc Performs bitwise OR operation on the second and third operands, then negates the result.
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* ```typescript
|
|
293
|
+
* // NOR r0 r1 r2
|
|
294
|
+
* // 计算 ~(r1 | r2) 并存入 r0
|
|
295
|
+
* ```
|
|
296
|
+
*
|
|
297
|
+
* @public
|
|
298
|
+
*/
|
|
299
|
+
export interface NorInstructionNode extends TernaryInstruction_RI_O_O {
|
|
300
|
+
type: "norInstruction";
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* @summary OR(按位或)指令节点
|
|
306
|
+
*
|
|
307
|
+
* @desc 对第二个和第三个操作数进行按位或运算。
|
|
308
|
+
* @elseif en
|
|
309
|
+
* @summary OR (Bitwise OR) instruction node
|
|
310
|
+
*
|
|
311
|
+
* @desc Performs bitwise OR operation on the second and third operands.
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```typescript
|
|
315
|
+
* // OR r0 r1 r2
|
|
316
|
+
* // 计算 r1 | r2 并存入 r0
|
|
317
|
+
* ```
|
|
318
|
+
*
|
|
319
|
+
* @public
|
|
320
|
+
*/
|
|
321
|
+
export interface OrInstructionNode extends TernaryInstruction_RI_O_O {
|
|
322
|
+
type: "orInstruction";
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* @summary SLA(算术左移)指令节点
|
|
328
|
+
*
|
|
329
|
+
* @desc 将第二个操作数左移第三个操作数指定的位数(算术左移)。
|
|
330
|
+
* @elseif en
|
|
331
|
+
* @summary SLA (Shift Left Arithmetic) instruction node
|
|
332
|
+
*
|
|
333
|
+
* @desc Arithmetically shifts the second operand left by the number of bits specified by the third operand.
|
|
334
|
+
*
|
|
335
|
+
* @example
|
|
336
|
+
* ```typescript
|
|
337
|
+
* // SLA r0 r1 r2
|
|
338
|
+
* // 将 r1 左移 r2 位并存入 r0
|
|
339
|
+
* ```
|
|
340
|
+
*
|
|
341
|
+
* @public
|
|
342
|
+
*/
|
|
343
|
+
export interface SlaInstructionNode extends TernaryInstruction_RI_O_O {
|
|
344
|
+
type: "slaInstruction";
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* @summary SLL(逻辑左移)指令节点
|
|
350
|
+
*
|
|
351
|
+
* @desc 将第二个操作数左移第三个操作数指定的位数(逻辑左移)。
|
|
352
|
+
* @elseif en
|
|
353
|
+
* @summary SLL (Shift Left Logical) instruction node
|
|
354
|
+
*
|
|
355
|
+
* @desc Logically shifts the second operand left by the number of bits specified by the third operand.
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* ```typescript
|
|
359
|
+
* // SLL r0 r1 r2
|
|
360
|
+
* // 将 r1 左移 r2 位并存入 r0
|
|
361
|
+
* ```
|
|
362
|
+
*
|
|
363
|
+
* @public
|
|
364
|
+
*/
|
|
365
|
+
export interface SllInstructionNode extends TernaryInstruction_RI_O_O {
|
|
366
|
+
type: "sllInstruction";
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* @summary SRA(算术右移)指令节点
|
|
372
|
+
*
|
|
373
|
+
* @desc 将第二个操作数右移第三个操作数指定的位数(算术右移,符号位扩展)。
|
|
374
|
+
* @elseif en
|
|
375
|
+
* @summary SRA (Shift Right Arithmetic) instruction node
|
|
376
|
+
*
|
|
377
|
+
* @desc Arithmetically shifts the second operand right by the number of bits specified by the third operand (sign-extended).
|
|
378
|
+
*
|
|
379
|
+
* @example
|
|
380
|
+
* ```typescript
|
|
381
|
+
* // SRA r0 r1 r2
|
|
382
|
+
* // 将 r1 右移 r2 位并存入 r0
|
|
383
|
+
* ```
|
|
384
|
+
*
|
|
385
|
+
* @public
|
|
386
|
+
*/
|
|
387
|
+
export interface SraInstructionNode extends TernaryInstruction_RI_O_O {
|
|
388
|
+
type: "sraInstruction";
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* @summary SRL(逻辑右移)指令节点
|
|
394
|
+
*
|
|
395
|
+
* @desc 将第二个操作数右移第三个操作数指定的位数(逻辑右移,零扩展)。
|
|
396
|
+
* @elseif en
|
|
397
|
+
* @summary SRL (Shift Right Logical) instruction node
|
|
398
|
+
*
|
|
399
|
+
* @desc Logically shifts the second operand right by the number of bits specified by the third operand (zero-extended).
|
|
400
|
+
*
|
|
401
|
+
* @example
|
|
402
|
+
* ```typescript
|
|
403
|
+
* // SRL r0 r1 r2
|
|
404
|
+
* // 将 r1 右移 r2 位并存入 r0
|
|
405
|
+
* ```
|
|
406
|
+
*
|
|
407
|
+
* @public
|
|
408
|
+
*/
|
|
409
|
+
export interface SrlInstructionNode extends TernaryInstruction_RI_O_O {
|
|
410
|
+
type: "srlInstruction";
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* @summary XOR(按位异或)指令节点
|
|
416
|
+
*
|
|
417
|
+
* @desc 对第二个和第三个操作数进行按位异或运算。
|
|
418
|
+
* @elseif en
|
|
419
|
+
* @summary XOR (Bitwise XOR) instruction node
|
|
420
|
+
*
|
|
421
|
+
* @desc Performs bitwise XOR operation on the second and third operands.
|
|
422
|
+
*
|
|
423
|
+
* @example
|
|
424
|
+
* ```typescript
|
|
425
|
+
* // XOR r0 r1 r2
|
|
426
|
+
* // 计算 r1 ^ r2 并存入 r0
|
|
427
|
+
* ```
|
|
428
|
+
*
|
|
429
|
+
* @public
|
|
430
|
+
*/
|
|
431
|
+
export interface XorInstructionNode extends TernaryInstruction_RI_O_O {
|
|
432
|
+
type: "xorInstruction";
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* @summary SAPZ(Set if And Predicate Zero)指令节点
|
|
438
|
+
*
|
|
439
|
+
* @desc 如果第二个和第三个操作数的按位与结果为零,则将目标寄存器设置为1。
|
|
440
|
+
* @elseif en
|
|
441
|
+
* @summary SAPZ (Set if And Predicate Zero) instruction node
|
|
442
|
+
*
|
|
443
|
+
* @desc Sets the target register to 1 if the bitwise AND of the second and third operands is zero.
|
|
444
|
+
*
|
|
445
|
+
* @example
|
|
446
|
+
* ```typescript
|
|
447
|
+
* // SAPZ r0 r1 r2
|
|
448
|
+
* // 如果 (r1 & r2) == 0,则 r0 = 1
|
|
449
|
+
* ```
|
|
450
|
+
*
|
|
451
|
+
* @public
|
|
452
|
+
*/
|
|
453
|
+
export interface SapzInstructionNode extends TernaryInstruction_RI_O_O {
|
|
454
|
+
type: "sapzInstruction";
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* @summary SNAZ(Set if And Predicate Non-Zero)指令节点
|
|
460
|
+
*
|
|
461
|
+
* @desc 如果第二个和第三个操作数的按位与结果非零,则将目标寄存器设置为1。
|
|
462
|
+
* @elseif en
|
|
463
|
+
* @summary SNAZ (Set if And Predicate Non-Zero) instruction node
|
|
464
|
+
*
|
|
465
|
+
* @desc Sets the target register to 1 if the bitwise AND of the second and third operands is non-zero.
|
|
466
|
+
*
|
|
467
|
+
* @example
|
|
468
|
+
* ```typescript
|
|
469
|
+
* // SNAZ r0 r1 r2
|
|
470
|
+
* // 如果 (r1 & r2) != 0,则 r0 = 1
|
|
471
|
+
* ```
|
|
472
|
+
*
|
|
473
|
+
* @public
|
|
474
|
+
*/
|
|
475
|
+
export interface SnazInstructionNode extends TernaryInstruction_RI_O_O {
|
|
476
|
+
type: "snazInstruction";
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* @summary SEQ(Set if EQual)指令节点
|
|
482
|
+
*
|
|
483
|
+
* @desc 如果第二个操作数等于第三个操作数,则将目标寄存器设置为1。
|
|
484
|
+
* @elseif en
|
|
485
|
+
* @summary SEQ (Set if EQual) instruction node
|
|
486
|
+
*
|
|
487
|
+
* @desc Sets the target register to 1 if the second operand equals the third operand.
|
|
488
|
+
*
|
|
489
|
+
* @example
|
|
490
|
+
* ```typescript
|
|
491
|
+
* // SEQ r0 r1 r2
|
|
492
|
+
* // 如果 r1 == r2,则 r0 = 1
|
|
493
|
+
* ```
|
|
494
|
+
*
|
|
495
|
+
* @public
|
|
496
|
+
*/
|
|
497
|
+
export interface SeqInstructionNode extends TernaryInstruction_RI_O_O {
|
|
498
|
+
type: "seqInstruction";
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* @summary SNE(Set if Not Equal)指令节点
|
|
504
|
+
*
|
|
505
|
+
* @desc 如果第二个操作数不等于第三个操作数,则将目标寄存器设置为1。
|
|
506
|
+
* @elseif en
|
|
507
|
+
* @summary SNE (Set if Not Equal) instruction node
|
|
508
|
+
*
|
|
509
|
+
* @desc Sets the target register to 1 if the second operand does not equal the third operand.
|
|
510
|
+
*
|
|
511
|
+
* @example
|
|
512
|
+
* ```typescript
|
|
513
|
+
* // SNE r0 r1 r2
|
|
514
|
+
* // 如果 r1 != r2,则 r0 = 1
|
|
515
|
+
* ```
|
|
516
|
+
*
|
|
517
|
+
* @public
|
|
518
|
+
*/
|
|
519
|
+
export interface SneInstructionNode extends TernaryInstruction_RI_O_O {
|
|
520
|
+
type: "sneInstruction";
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* @summary SGE(Set if Greater than or Equal)指令节点
|
|
526
|
+
*
|
|
527
|
+
* @desc 如果第二个操作数大于等于第三个操作数,则将目标寄存器设置为1。
|
|
528
|
+
* @elseif en
|
|
529
|
+
* @summary SGE (Set if Greater than or Equal) instruction node
|
|
530
|
+
*
|
|
531
|
+
* @desc Sets the target register to 1 if the second operand is greater than or equal to the third operand.
|
|
532
|
+
*
|
|
533
|
+
* @example
|
|
534
|
+
* ```typescript
|
|
535
|
+
* // SGE r0 r1 r2
|
|
536
|
+
* // 如果 r1 >= r2,则 r0 = 1
|
|
537
|
+
* ```
|
|
538
|
+
*
|
|
539
|
+
* @public
|
|
540
|
+
*/
|
|
541
|
+
export interface SgeInstructionNode extends TernaryInstruction_RI_O_O {
|
|
542
|
+
type: "sgeInstruction";
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* @summary SGT(Set if Greater Than)指令节点
|
|
548
|
+
*
|
|
549
|
+
* @desc 如果第二个操作数大于第三个操作数,则将目标寄存器设置为1。
|
|
550
|
+
* @elseif en
|
|
551
|
+
* @summary SGT (Set if Greater Than) instruction node
|
|
552
|
+
*
|
|
553
|
+
* @desc Sets the target register to 1 if the second operand is greater than the third operand.
|
|
554
|
+
*
|
|
555
|
+
* @example
|
|
556
|
+
* ```typescript
|
|
557
|
+
* // SGT r0 r1 r2
|
|
558
|
+
* // 如果 r1 > r2,则 r0 = 1
|
|
559
|
+
* ```
|
|
560
|
+
*
|
|
561
|
+
* @public
|
|
562
|
+
*/
|
|
563
|
+
export interface SgtInstructionNode extends TernaryInstruction_RI_O_O {
|
|
564
|
+
type: "sgtInstruction";
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* @summary SLE(Set if Less than or Equal)指令节点
|
|
570
|
+
*
|
|
571
|
+
* @desc 如果第二个操作数小于等于第三个操作数,则将目标寄存器设置为1。
|
|
572
|
+
* @elseif en
|
|
573
|
+
* @summary SLE (Set if Less than or Equal) instruction node
|
|
574
|
+
*
|
|
575
|
+
* @desc Sets the target register to 1 if the second operand is less than or equal to the third operand.
|
|
576
|
+
*
|
|
577
|
+
* @example
|
|
578
|
+
* ```typescript
|
|
579
|
+
* // SLE r0 r1 r2
|
|
580
|
+
* // 如果 r1 <= r2,则 r0 = 1
|
|
581
|
+
* ```
|
|
582
|
+
*
|
|
583
|
+
* @public
|
|
584
|
+
*/
|
|
585
|
+
export interface SleInstructionNode extends TernaryInstruction_RI_O_O {
|
|
586
|
+
type: "sleInstruction";
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* @summary SLT(Set if Less Than)指令节点
|
|
592
|
+
*
|
|
593
|
+
* @desc 如果第二个操作数小于第三个操作数,则将目标寄存器设置为1。
|
|
594
|
+
* @elseif en
|
|
595
|
+
* @summary SLT (Set if Less Than) instruction node
|
|
596
|
+
*
|
|
597
|
+
* @desc Sets the target register to 1 if the second operand is less than the third operand.
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```typescript
|
|
601
|
+
* // SLT r0 r1 r2
|
|
602
|
+
* // 如果 r1 < r2,则 r0 = 1
|
|
603
|
+
* ```
|
|
604
|
+
*
|
|
605
|
+
* @public
|
|
606
|
+
*/
|
|
607
|
+
export interface SltInstructionNode extends TernaryInstruction_RI_O_O {
|
|
608
|
+
type: "sltInstruction";
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* @summary 含 RegisterOrIdentifier + DeviceReference + Operand 操作数的三元指令基类
|
|
614
|
+
*
|
|
615
|
+
* @desc 第一个操作数为寄存器或标识符,第二个为设备引用,第三个为通用操作数。
|
|
616
|
+
* @elseif en
|
|
617
|
+
* @summary Base interface for ternary instructions with RegisterOrIdentifier + DeviceReference + Operand operands
|
|
618
|
+
*
|
|
619
|
+
* @desc First operand is a register or identifier, second is a device reference, third is a general operand.
|
|
620
|
+
*
|
|
621
|
+
* @public
|
|
622
|
+
*/
|
|
623
|
+
interface TernaryInstruction_RI_DR_O extends TernaryInstruction {
|
|
624
|
+
operand1: RegisterOrIdentifierNode;
|
|
625
|
+
operand2: DeviceReferenceNode;
|
|
626
|
+
operand3: OperandNode;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* @summary GET(获取设备属性)指令节点
|
|
632
|
+
*
|
|
633
|
+
* @desc 从设备获取指定类型的属性值到目标寄存器。
|
|
634
|
+
* @elseif en
|
|
635
|
+
* @summary GET (Get Device Property) instruction node
|
|
636
|
+
*
|
|
637
|
+
* @desc Gets the property of a specified type from the device into the target register.
|
|
638
|
+
*
|
|
639
|
+
* @example
|
|
640
|
+
* ```typescript
|
|
641
|
+
* // GET r0 console1 Setting
|
|
642
|
+
* // 从 console1 获取 Setting 属性到 r0
|
|
643
|
+
* ```
|
|
644
|
+
*
|
|
645
|
+
* @public
|
|
646
|
+
*/
|
|
647
|
+
export interface GetInstructionNode extends TernaryInstruction_RI_DR_O {
|
|
648
|
+
type: "getInstruction";
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
/**
|
|
653
|
+
* @summary RMAP(重新映射设备)指令节点
|
|
654
|
+
*
|
|
655
|
+
* @desc 重新映射目标设备到源设备。
|
|
656
|
+
* @elseif en
|
|
657
|
+
* @summary RMAP (ReMAP Device) instruction node
|
|
658
|
+
*
|
|
659
|
+
* @desc Remaps the target device to the source device.
|
|
660
|
+
*
|
|
661
|
+
* @example
|
|
662
|
+
* ```typescript
|
|
663
|
+
* // RMAP r0 console1 console2
|
|
664
|
+
* // 将 console1 重新映射到 console2
|
|
665
|
+
* ```
|
|
666
|
+
*
|
|
667
|
+
* @public
|
|
668
|
+
*/
|
|
669
|
+
export interface RmapInstructionNode extends TernaryInstruction_RI_DR_O {
|
|
670
|
+
type: "rmapInstruction";
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
/**
|
|
675
|
+
* @summary 含 DeviceReference + Operand + Operand 操作数的三元指令基类
|
|
676
|
+
*
|
|
677
|
+
* @desc 第一个操作数为设备引用,第二、三个为通用操作数。
|
|
678
|
+
* @elseif en
|
|
679
|
+
* @summary Base interface for ternary instructions with DeviceReference + Operand + Operand operands
|
|
680
|
+
*
|
|
681
|
+
* @desc First operand is a device reference, second and third are general operands.
|
|
682
|
+
*
|
|
683
|
+
* @public
|
|
684
|
+
*/
|
|
685
|
+
interface TernaryInstruction_DR_O_O extends TernaryInstruction {
|
|
686
|
+
operand1: DeviceReferenceNode;
|
|
687
|
+
operand2: OperandNode;
|
|
688
|
+
operand3: OperandNode;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
/**
|
|
693
|
+
* @summary PUT(放置物品到设备)指令节点
|
|
694
|
+
*
|
|
695
|
+
* @desc 将物品从库存放置到目标设备。
|
|
696
|
+
* @elseif en
|
|
697
|
+
* @summary PUT instruction node
|
|
698
|
+
*
|
|
699
|
+
* @desc Places items from inventory to the target device.
|
|
700
|
+
*
|
|
701
|
+
* @example
|
|
702
|
+
* ```typescript
|
|
703
|
+
* // PUT console1 r0 r1
|
|
704
|
+
* // 将物品从 r0 放置到 console1
|
|
705
|
+
* ```
|
|
706
|
+
*
|
|
707
|
+
* @public
|
|
708
|
+
*/
|
|
709
|
+
export interface PutInstructionNode extends TernaryInstruction_DR_O_O {
|
|
710
|
+
type: "putInstruction";
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* @summary 含 RegisterOrIdentifier + DeviceReference + LogicType 操作数的三元指令基类
|
|
716
|
+
*
|
|
717
|
+
* @desc 第一个操作数为寄存器或标识符,第二个为设备引用,第三个为逻辑类型。
|
|
718
|
+
* @elseif en
|
|
719
|
+
* @summary Base interface for ternary instructions with RegisterOrIdentifier + DeviceReference + LogicType operands
|
|
720
|
+
*
|
|
721
|
+
* @desc First operand is a register or identifier, second is a device reference, third is a logic type.
|
|
722
|
+
*
|
|
723
|
+
* @public
|
|
724
|
+
*/
|
|
725
|
+
interface TernaryInstruction_RI_DR_LT extends TernaryInstruction {
|
|
726
|
+
operand1: RegisterOrIdentifierNode;
|
|
727
|
+
operand2: DeviceReferenceNode;
|
|
728
|
+
operand3: LogicTypeNode;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
/**
|
|
733
|
+
* @summary L(读取设备逻辑)指令节点
|
|
734
|
+
*
|
|
735
|
+
* @desc 从目标设备的指定逻辑类型读取数据到寄存器。
|
|
736
|
+
* @elseif en
|
|
737
|
+
* @summary L (Read Device Logic) instruction node
|
|
738
|
+
*
|
|
739
|
+
* @desc Reads data from the target device's specified logic type into the register.
|
|
740
|
+
*
|
|
741
|
+
* @example
|
|
742
|
+
* ```typescript
|
|
743
|
+
* // L r0 console1 Color
|
|
744
|
+
* // 从 console1 读取 Color 数据到 r0
|
|
745
|
+
* ```
|
|
746
|
+
*
|
|
747
|
+
* @public
|
|
748
|
+
*/
|
|
749
|
+
export interface LInstructionNode extends TernaryInstruction_RI_DR_LT {
|
|
750
|
+
type: "lInstruction";
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* @summary 含 RegisterOrIdentifier + DeviceReference + ReagentMode 操作数的三元指令基类
|
|
756
|
+
*
|
|
757
|
+
* @desc 第一个操作数为寄存器或标识符,第二个为设备引用,第三个为试剂模式。
|
|
758
|
+
* @elseif en
|
|
759
|
+
* @summary Base interface for ternary instructions with RegisterOrIdentifier + DeviceReference + ReagentMode operands
|
|
760
|
+
*
|
|
761
|
+
* @desc First operand is a register or identifier, second is a device reference, third is a reagent mode.
|
|
762
|
+
*
|
|
763
|
+
* @public
|
|
764
|
+
*/
|
|
765
|
+
interface TernaryInstruction_RI_DR_RM extends TernaryInstruction {
|
|
766
|
+
operand1: RegisterOrIdentifierNode;
|
|
767
|
+
operand2: DeviceReferenceNode;
|
|
768
|
+
operand3: ReagentModeNode;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* @summary LR(读取设备库存试剂)指令节点
|
|
774
|
+
*
|
|
775
|
+
* @desc 从目标设备的库存中读取指定试剂的数量到寄存器。
|
|
776
|
+
* @elseif en
|
|
777
|
+
* @summary LR (Read Device Reagent) instruction node
|
|
778
|
+
*
|
|
779
|
+
* @desc Reads the quantity of a specified reagent from the target device's inventory into the register.
|
|
780
|
+
*
|
|
781
|
+
* @example
|
|
782
|
+
* ```typescript
|
|
783
|
+
* // LR r0 tank1 Water
|
|
784
|
+
* // 从 tank1 读取 Water 试剂数量到 r0
|
|
785
|
+
* ```
|
|
786
|
+
*
|
|
787
|
+
* @public
|
|
788
|
+
*/
|
|
789
|
+
export interface LrInstructionNode extends TernaryInstruction_RI_DR_RM {
|
|
790
|
+
type: "lrInstruction";
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
/**
|
|
795
|
+
* @summary 含 DeviceReference + LogicType + RegisterOrIdentifier 操作数的三元指令基类
|
|
796
|
+
*
|
|
797
|
+
* @desc 第一个操作数为设备引用,第二个为逻辑类型,第三个为寄存器或标识符。
|
|
798
|
+
* @elseif en
|
|
799
|
+
* @summary Base interface for ternary instructions with DeviceReference + LogicType + RegisterOrIdentifier operands
|
|
800
|
+
*
|
|
801
|
+
* @desc First operand is a device reference, second is a logic type, third is a register or identifier.
|
|
802
|
+
*
|
|
803
|
+
* @public
|
|
804
|
+
*/
|
|
805
|
+
interface TernaryInstruction_DR_LT_RI extends TernaryInstruction {
|
|
806
|
+
operand1: DeviceReferenceNode;
|
|
807
|
+
operand2: LogicTypeNode;
|
|
808
|
+
operand3: RegisterOrIdentifierNode;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
/**
|
|
813
|
+
* @summary S(设置设备逻辑)指令节点
|
|
814
|
+
*
|
|
815
|
+
* @desc 将寄存器的值设置到目标设备的指定逻辑类型属性。
|
|
816
|
+
* @elseif en
|
|
817
|
+
* @summary S (Set Device Logic) instruction node
|
|
818
|
+
*
|
|
819
|
+
* @desc Sets the value of the register to the specified logic type property of the target device.
|
|
820
|
+
*
|
|
821
|
+
* @example
|
|
822
|
+
* ```typescript
|
|
823
|
+
* // S console1 Color r0
|
|
824
|
+
* // 将 r0 的值设置到 console1 的 Color 属性
|
|
825
|
+
* ```
|
|
826
|
+
*
|
|
827
|
+
* @public
|
|
828
|
+
*/
|
|
829
|
+
export interface SInstructionNode extends TernaryInstruction_DR_LT_RI {
|
|
830
|
+
type: "sInstruction";
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
/**
|
|
835
|
+
* @summary 含 Operand + LogicType + RegisterOrIdentifier 操作数的三元指令基类
|
|
836
|
+
*
|
|
837
|
+
* @desc 第一个操作数为通用操作数,第二个为逻辑类型,第三个为寄存器或标识符。
|
|
838
|
+
* @elseif en
|
|
839
|
+
* @summary Base interface for ternary instructions with Operand + LogicType + RegisterOrIdentifier operands
|
|
840
|
+
*
|
|
841
|
+
* @desc First operand is a general operand, second is a logic type, third is a register or identifier.
|
|
842
|
+
*
|
|
843
|
+
* @public
|
|
844
|
+
*/
|
|
845
|
+
interface TernaryInstruction_O_LT_RI extends TernaryInstruction {
|
|
846
|
+
operand1: OperandNode;
|
|
847
|
+
operand2: LogicTypeNode;
|
|
848
|
+
operand3: RegisterOrIdentifierNode;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* @summary SB(设置设备逻辑批量)指令节点
|
|
854
|
+
*
|
|
855
|
+
* @desc 将多个寄存器的值批量设置到目标设备的指定逻辑类型属性。
|
|
856
|
+
* @elseif en
|
|
857
|
+
* @summary SB (Set Device Logic Batch) instruction node
|
|
858
|
+
*
|
|
859
|
+
* @desc Batch sets values from multiple registers to the specified logic type property of the target device.
|
|
860
|
+
*
|
|
861
|
+
* @example
|
|
862
|
+
* ```typescript
|
|
863
|
+
* // SB tank1 Mode r0
|
|
864
|
+
* // 将 r0 的值批量设置到 tank1 的 Mode 属性
|
|
865
|
+
* ```
|
|
866
|
+
*
|
|
867
|
+
* @public
|
|
868
|
+
*/
|
|
869
|
+
export interface SbInstructionNode extends TernaryInstruction_O_LT_RI {
|
|
870
|
+
type: "sbInstruction";
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
/**
|
|
875
|
+
* @summary 含 DeviceReference + LogicType + Operand 操作数的三元指令基类
|
|
876
|
+
*
|
|
877
|
+
* @desc 第一个操作数为设备引用,第二个为逻辑类型,第三个为通用操作数。
|
|
878
|
+
* @elseif en
|
|
879
|
+
* @summary Base interface for ternary instructions with DeviceReference + LogicType + Operand operands
|
|
880
|
+
*
|
|
881
|
+
* @desc First operand is a device reference, second is a logic type, third is a general operand.
|
|
882
|
+
*
|
|
883
|
+
* @public
|
|
884
|
+
*/
|
|
885
|
+
interface TernaryInstruction_DR_LT_O extends TernaryInstruction {
|
|
886
|
+
operand1: DeviceReferenceNode;
|
|
887
|
+
operand2: LogicTypeNode;
|
|
888
|
+
operand3: OperandNode;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
/**
|
|
893
|
+
* @summary BDNVL(Branches on Device No Variant Leak)指令节点
|
|
894
|
+
*
|
|
895
|
+
* @desc 如果设备没有变体泄漏,则跳转到目标地址。
|
|
896
|
+
* @elseif en
|
|
897
|
+
* @summary BDNVL (Branches on Device No Variant Leak) instruction node
|
|
898
|
+
*
|
|
899
|
+
* @desc Jumps to the target address if the device has no variant leak.
|
|
900
|
+
*
|
|
901
|
+
* @example
|
|
902
|
+
* ```typescript
|
|
903
|
+
* // BDNVL tank1 loop
|
|
904
|
+
* // 如果 tank1 没有变体泄漏,跳转到 loop
|
|
905
|
+
* ```
|
|
906
|
+
*
|
|
907
|
+
* @public
|
|
908
|
+
*/
|
|
909
|
+
export interface BdnvlInstructionNode extends TernaryInstruction_DR_LT_O {
|
|
910
|
+
type: "bdnvlInstruction";
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
/**
|
|
915
|
+
* @summary BDNVS(Branches on Device No Variant Stuck)指令节点
|
|
916
|
+
*
|
|
917
|
+
* @desc 如果设备没有变体卡住,则跳转到目标地址。
|
|
918
|
+
* @elseif en
|
|
919
|
+
* @summary BDNVS (Branches on Device No Variant Stuck) instruction node
|
|
920
|
+
*
|
|
921
|
+
* @desc Jumps to the target address if the device has no variant stuck.
|
|
922
|
+
*
|
|
923
|
+
* @example
|
|
924
|
+
* ```typescript
|
|
925
|
+
* // BDNVS tank1 loop
|
|
926
|
+
* // 如果 tank1 没有变体卡住,跳转到 loop
|
|
927
|
+
* ```
|
|
928
|
+
*
|
|
929
|
+
* @public
|
|
930
|
+
*/
|
|
931
|
+
export interface BdnvsInstructionNode extends TernaryInstruction_DR_LT_O {
|
|
932
|
+
type: "bdnvsInstruction";
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
/**
|
|
937
|
+
* @summary 含 Operand + Operand + Operand 操作数的三元指令基类
|
|
938
|
+
*
|
|
939
|
+
* @desc 三个操作数都为通用操作数类型。
|
|
940
|
+
* @elseif en
|
|
941
|
+
* @summary Base interface for ternary instructions with Operand + Operand + Operand operands
|
|
942
|
+
*
|
|
943
|
+
* @desc All three operands are general operand types.
|
|
944
|
+
*
|
|
945
|
+
* @public
|
|
946
|
+
*/
|
|
947
|
+
interface TernaryInstruction_O_O_O extends TernaryInstruction {
|
|
948
|
+
operand1: OperandNode;
|
|
949
|
+
operand2: OperandNode;
|
|
950
|
+
operand3: OperandNode;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
/**
|
|
955
|
+
* @summary BEQ(Branch if EQual)指令节点
|
|
956
|
+
*
|
|
957
|
+
* @desc 如果第二个操作数等于第三个操作数,则跳转到第一个操作数指定的目标地址。
|
|
958
|
+
* @elseif en
|
|
959
|
+
* @summary BEQ (Branch if EQual) instruction node
|
|
960
|
+
*
|
|
961
|
+
* @desc Jumps to the target address specified by the first operand if the second operand equals the third operand.
|
|
962
|
+
*
|
|
963
|
+
* @example
|
|
964
|
+
* ```typescript
|
|
965
|
+
* // BEQ loop r0 r1
|
|
966
|
+
* // 如果 r0 == r1,跳转到 loop
|
|
967
|
+
* ```
|
|
968
|
+
*
|
|
969
|
+
* @public
|
|
970
|
+
*/
|
|
971
|
+
export interface BeqInstructionNode extends TernaryInstruction_O_O_O {
|
|
972
|
+
type: "beqInstruction";
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
/**
|
|
977
|
+
* @summary BEQAL(Branch if EQual And Link)指令节点
|
|
978
|
+
*
|
|
979
|
+
* @desc 如果第二个操作数等于第三个操作数,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
980
|
+
* @elseif en
|
|
981
|
+
* @summary BEQAL (Branch if EQual And Link) instruction node
|
|
982
|
+
*
|
|
983
|
+
* @desc Jumps to the target address specified by the first operand if the second operand equals the third operand, and saves the return address.
|
|
984
|
+
*
|
|
985
|
+
* @example
|
|
986
|
+
* ```typescript
|
|
987
|
+
* // BEQAL loop r0 r1
|
|
988
|
+
* // 如果 r0 == r1,跳转到 loop 并保存返回地址
|
|
989
|
+
* ```
|
|
990
|
+
*
|
|
991
|
+
* @public
|
|
992
|
+
*/
|
|
993
|
+
export interface BeqalInstructionNode extends TernaryInstruction_O_O_O {
|
|
994
|
+
type: "beqalInstruction";
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
|
|
998
|
+
/**
|
|
999
|
+
* @summary BNE(Branch if Not Equal)指令节点
|
|
1000
|
+
*
|
|
1001
|
+
* @desc 如果第二个操作数不等于第三个操作数,则跳转到第一个操作数指定的目标地址。
|
|
1002
|
+
* @elseif en
|
|
1003
|
+
* @summary BNE (Branch if Not Equal) instruction node
|
|
1004
|
+
*
|
|
1005
|
+
* @desc Jumps to the target address specified by the first operand if the second operand does not equal the third operand.
|
|
1006
|
+
*
|
|
1007
|
+
* @example
|
|
1008
|
+
* ```typescript
|
|
1009
|
+
* // BNE loop r0 r1
|
|
1010
|
+
* // 如果 r0 != r1,跳转到 loop
|
|
1011
|
+
* ```
|
|
1012
|
+
*
|
|
1013
|
+
* @public
|
|
1014
|
+
*/
|
|
1015
|
+
export interface BneInstructionNode extends TernaryInstruction_O_O_O {
|
|
1016
|
+
type: "bneInstruction";
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
|
|
1020
|
+
/**
|
|
1021
|
+
* @summary BNEAL(Branch if Not Equal And Link)指令节点
|
|
1022
|
+
*
|
|
1023
|
+
* @desc 如果第二个操作数不等于第三个操作数,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1024
|
+
* @elseif en
|
|
1025
|
+
* @summary BNEAL (Branch if Not Equal And Link) instruction node
|
|
1026
|
+
*
|
|
1027
|
+
* @desc Jumps to the target address specified by the first operand if the second operand does not equal the third operand, and saves the return address.
|
|
1028
|
+
*
|
|
1029
|
+
* @example
|
|
1030
|
+
* ```typescript
|
|
1031
|
+
* // BNEAL loop r0 r1
|
|
1032
|
+
* // 如果 r0 != r1,跳转到 loop 并保存返回地址
|
|
1033
|
+
* ```
|
|
1034
|
+
*
|
|
1035
|
+
* @public
|
|
1036
|
+
*/
|
|
1037
|
+
export interface BnealInstructionNode extends TernaryInstruction_O_O_O {
|
|
1038
|
+
type: "bnealInstruction";
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
/**
|
|
1043
|
+
* @summary BGE(Branch if Greater than or Equal)指令节点
|
|
1044
|
+
*
|
|
1045
|
+
* @desc 如果第二个操作数大于等于第三个操作数,则跳转到第一个操作数指定的目标地址。
|
|
1046
|
+
* @elseif en
|
|
1047
|
+
* @summary BGE (Branch if Greater than or Equal) instruction node
|
|
1048
|
+
*
|
|
1049
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is greater than or equal to the third operand.
|
|
1050
|
+
*
|
|
1051
|
+
* @example
|
|
1052
|
+
* ```typescript
|
|
1053
|
+
* // BGE loop r0 r1
|
|
1054
|
+
* // 如果 r0 >= r1,跳转到 loop
|
|
1055
|
+
* ```
|
|
1056
|
+
*
|
|
1057
|
+
* @public
|
|
1058
|
+
*/
|
|
1059
|
+
export interface BgeInstructionNode extends TernaryInstruction_O_O_O {
|
|
1060
|
+
type: "bgeInstruction";
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
/**
|
|
1065
|
+
* @summary BGEAL(Branch if Greater than or Equal And Link)指令节点
|
|
1066
|
+
*
|
|
1067
|
+
* @desc 如果第二个操作数大于等于第三个操作数,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1068
|
+
* @elseif en
|
|
1069
|
+
* @summary BGEAL (Branch if Greater than or Equal And Link) instruction node
|
|
1070
|
+
*
|
|
1071
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is greater than or equal to the third operand, and saves the return address.
|
|
1072
|
+
*
|
|
1073
|
+
* @example
|
|
1074
|
+
* ```typescript
|
|
1075
|
+
* // BGEAL loop r0 r1
|
|
1076
|
+
* // 如果 r0 >= r1,跳转到 loop 并保存返回地址
|
|
1077
|
+
* ```
|
|
1078
|
+
*
|
|
1079
|
+
* @public
|
|
1080
|
+
*/
|
|
1081
|
+
export interface BgealInstructionNode extends TernaryInstruction_O_O_O {
|
|
1082
|
+
type: "bgealInstruction";
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
|
|
1086
|
+
/**
|
|
1087
|
+
* @summary BGT(Branch if Greater Than)指令节点
|
|
1088
|
+
*
|
|
1089
|
+
* @desc 如果第二个操作数大于第三个操作数,则跳转到第一个操作数指定的目标地址。
|
|
1090
|
+
* @elseif en
|
|
1091
|
+
* @summary BGT (Branch if Greater Than) instruction node
|
|
1092
|
+
*
|
|
1093
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is greater than the third operand.
|
|
1094
|
+
*
|
|
1095
|
+
* @example
|
|
1096
|
+
* ```typescript
|
|
1097
|
+
* // BGT loop r0 r1
|
|
1098
|
+
* // 如果 r0 > r1,跳转到 loop
|
|
1099
|
+
* ```
|
|
1100
|
+
*
|
|
1101
|
+
* @public
|
|
1102
|
+
*/
|
|
1103
|
+
export interface BgtInstructionNode extends TernaryInstruction_O_O_O {
|
|
1104
|
+
type: "bgtInstruction";
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
/**
|
|
1109
|
+
* @summary BGTAL(Branch if Greater Than And Link)指令节点
|
|
1110
|
+
*
|
|
1111
|
+
* @desc 如果第二个操作数大于第三个操作数,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1112
|
+
* @elseif en
|
|
1113
|
+
* @summary BGTAL (Branch if Greater Than And Link) instruction node
|
|
1114
|
+
*
|
|
1115
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is greater than the third operand, and saves the return address.
|
|
1116
|
+
*
|
|
1117
|
+
* @example
|
|
1118
|
+
* ```typescript
|
|
1119
|
+
* // BGTAL loop r0 r1
|
|
1120
|
+
* // 如果 r0 > r1,跳转到 loop 并保存返回地址
|
|
1121
|
+
* ```
|
|
1122
|
+
*
|
|
1123
|
+
* @public
|
|
1124
|
+
*/
|
|
1125
|
+
export interface BgtalInstructionNode extends TernaryInstruction_O_O_O {
|
|
1126
|
+
type: "bgtalInstruction";
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
/**
|
|
1131
|
+
* @summary BLE(Branch if Less than or Equal)指令节点
|
|
1132
|
+
*
|
|
1133
|
+
* @desc 如果第二个操作数小于等于第三个操作数,则跳转到第一个操作数指定的目标地址。
|
|
1134
|
+
* @elseif en
|
|
1135
|
+
* @summary BLE (Branch if Less than or Equal) instruction node
|
|
1136
|
+
*
|
|
1137
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is less than or equal to the third operand.
|
|
1138
|
+
*
|
|
1139
|
+
* @example
|
|
1140
|
+
* ```typescript
|
|
1141
|
+
* // BLE loop r0 r1
|
|
1142
|
+
* // 如果 r0 <= r1,跳转到 loop
|
|
1143
|
+
* ```
|
|
1144
|
+
*
|
|
1145
|
+
* @public
|
|
1146
|
+
*/
|
|
1147
|
+
export interface BleInstructionNode extends TernaryInstruction_O_O_O {
|
|
1148
|
+
type: "bleInstruction";
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
/**
|
|
1153
|
+
* @summary BLEAL(Branch if Less than or Equal And Link)指令节点
|
|
1154
|
+
*
|
|
1155
|
+
* @desc 如果第二个操作数小于等于第三个操作数,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1156
|
+
* @elseif en
|
|
1157
|
+
* @summary BLEAL (Branch if Less than or Equal And Link) instruction node
|
|
1158
|
+
*
|
|
1159
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is less than or equal to the third operand, and saves the return address.
|
|
1160
|
+
*
|
|
1161
|
+
* @example
|
|
1162
|
+
* ```typescript
|
|
1163
|
+
* // BLEAL loop r0 r1
|
|
1164
|
+
* // 如果 r0 <= r1,跳转到 loop 并保存返回地址
|
|
1165
|
+
* ```
|
|
1166
|
+
*
|
|
1167
|
+
* @public
|
|
1168
|
+
*/
|
|
1169
|
+
export interface BlealInstructionNode extends TernaryInstruction_O_O_O {
|
|
1170
|
+
type: "blealInstruction";
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
|
|
1174
|
+
/**
|
|
1175
|
+
* @summary BLT(Branch if Less Than)指令节点
|
|
1176
|
+
*
|
|
1177
|
+
* @desc 如果第二个操作数小于第三个操作数,则跳转到第一个操作数指定的目标地址。
|
|
1178
|
+
* @elseif en
|
|
1179
|
+
* @summary BLT (Branch if Less Than) instruction node
|
|
1180
|
+
*
|
|
1181
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is less than the third operand.
|
|
1182
|
+
*
|
|
1183
|
+
* @example
|
|
1184
|
+
* ```typescript
|
|
1185
|
+
* // BLT loop r0 r1
|
|
1186
|
+
* // 如果 r0 < r1,跳转到 loop
|
|
1187
|
+
* ```
|
|
1188
|
+
*
|
|
1189
|
+
* @public
|
|
1190
|
+
*/
|
|
1191
|
+
export interface BltInstructionNode extends TernaryInstruction_O_O_O {
|
|
1192
|
+
type: "bltInstruction";
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
|
|
1196
|
+
/**
|
|
1197
|
+
* @summary BLTAL(Branch if Less Than And Link)指令节点
|
|
1198
|
+
*
|
|
1199
|
+
* @desc 如果第二个操作数小于第三个操作数,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1200
|
+
* @elseif en
|
|
1201
|
+
* @summary BLTAL (Branch if Less Than And Link) instruction node
|
|
1202
|
+
*
|
|
1203
|
+
* @desc Jumps to the target address specified by the first operand if the second operand is less than the third operand, and saves the return address.
|
|
1204
|
+
*
|
|
1205
|
+
* @example
|
|
1206
|
+
* ```typescript
|
|
1207
|
+
* // BLTAL loop r0 r1
|
|
1208
|
+
* // 如果 r0 < r1,跳转到 loop 并保存返回地址
|
|
1209
|
+
* ```
|
|
1210
|
+
*
|
|
1211
|
+
* @public
|
|
1212
|
+
*/
|
|
1213
|
+
export interface BltalInstructionNode extends TernaryInstruction_O_O_O {
|
|
1214
|
+
type: "bltalInstruction";
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
|
|
1218
|
+
/**
|
|
1219
|
+
* @summary BAPZ(Branch if And Predicate Zero)指令节点
|
|
1220
|
+
*
|
|
1221
|
+
* @desc 如果第二个和第三个操作数的按位与结果为零,则跳转到第一个操作数指定的目标地址。
|
|
1222
|
+
* @elseif en
|
|
1223
|
+
* @summary BAPZ (Branch if And Predicate Zero) instruction node
|
|
1224
|
+
*
|
|
1225
|
+
* @desc Jumps to the target address specified by the first operand if the bitwise AND of the second and third operands is zero.
|
|
1226
|
+
*
|
|
1227
|
+
* @example
|
|
1228
|
+
* ```typescript
|
|
1229
|
+
* // BAPZ loop r0 r1
|
|
1230
|
+
* // 如果 (r0 & r1) == 0,跳转到 loop
|
|
1231
|
+
* ```
|
|
1232
|
+
*
|
|
1233
|
+
* @public
|
|
1234
|
+
*/
|
|
1235
|
+
export interface BapzInstructionNode extends TernaryInstruction_O_O_O {
|
|
1236
|
+
type: "bapzInstruction";
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
|
|
1240
|
+
/**
|
|
1241
|
+
* @summary BAPZAL(Branch if And Predicate Zero And Link)指令节点
|
|
1242
|
+
*
|
|
1243
|
+
* @desc 如果第二个和第三个操作数的按位与结果为零,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1244
|
+
* @elseif en
|
|
1245
|
+
* @summary BAPZAL (Branch if And Predicate Zero And Link) instruction node
|
|
1246
|
+
*
|
|
1247
|
+
* @desc Jumps to the target address specified by the first operand if the bitwise AND of the second and third operands is zero, and saves the return address.
|
|
1248
|
+
*
|
|
1249
|
+
* @example
|
|
1250
|
+
* ```typescript
|
|
1251
|
+
* // BAPZAL loop r0 r1
|
|
1252
|
+
* // 如果 (r0 & r1) == 0,跳转到 loop 并保存返回地址
|
|
1253
|
+
* ```
|
|
1254
|
+
*
|
|
1255
|
+
* @public
|
|
1256
|
+
*/
|
|
1257
|
+
export interface BapzalInstructionNode extends TernaryInstruction_O_O_O {
|
|
1258
|
+
type: "bapzalInstruction";
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
|
|
1262
|
+
/**
|
|
1263
|
+
* @summary BNAZ(Branch if Not And Predicate Zero)指令节点
|
|
1264
|
+
*
|
|
1265
|
+
* @desc 如果第二个和第三个操作数的按位与非结果为零(即按位与非零),则跳转到第一个操作数指定的目标地址。
|
|
1266
|
+
* @elseif en
|
|
1267
|
+
* @summary BNAZ (Branch if Not And Predicate Zero) instruction node
|
|
1268
|
+
*
|
|
1269
|
+
* @desc Jumps to the target address specified by the first operand if the bitwise AND of the second and third operands is non-zero.
|
|
1270
|
+
*
|
|
1271
|
+
* @example
|
|
1272
|
+
* ```typescript
|
|
1273
|
+
* // BNAZ loop r0 r1
|
|
1274
|
+
* // 如果 (r0 & r1) != 0,跳转到 loop
|
|
1275
|
+
* ```
|
|
1276
|
+
*
|
|
1277
|
+
* @public
|
|
1278
|
+
*/
|
|
1279
|
+
export interface BnazInstructionNode extends TernaryInstruction_O_O_O {
|
|
1280
|
+
type: "bnazInstruction";
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
|
|
1284
|
+
/**
|
|
1285
|
+
* @summary BNAZAL(Branch if Not And Predicate Zero And Link)指令节点
|
|
1286
|
+
*
|
|
1287
|
+
* @desc 如果第二个和第三个操作数的按位与非结果为零,则跳转到第一个操作数指定的目标地址并保存返回地址。
|
|
1288
|
+
* @elseif en
|
|
1289
|
+
* @summary BNAZAL (Branch if Not And Predicate Zero And Link) instruction node
|
|
1290
|
+
*
|
|
1291
|
+
* @desc Jumps to the target address specified by the first operand if the bitwise AND of the second and third operands is non-zero, and saves the return address.
|
|
1292
|
+
*
|
|
1293
|
+
* @example
|
|
1294
|
+
* ```typescript
|
|
1295
|
+
* // BNAZAL loop r0 r1
|
|
1296
|
+
* // 如果 (r0 & r1) != 0,跳转到 loop 并保存返回地址
|
|
1297
|
+
* ```
|
|
1298
|
+
*
|
|
1299
|
+
* @public
|
|
1300
|
+
*/
|
|
1301
|
+
export interface BnazalInstructionNode extends TernaryInstruction_O_O_O {
|
|
1302
|
+
type: "bnazalInstruction";
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
|
|
1306
|
+
/**
|
|
1307
|
+
* @summary BREQ(Branches Register if EQual)指令节点
|
|
1308
|
+
*
|
|
1309
|
+
* @desc 如果第二个操作数等于第三个操作数,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1310
|
+
* @elseif en
|
|
1311
|
+
* @summary BREQ (Branches Register if EQual) instruction node
|
|
1312
|
+
*
|
|
1313
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the second operand equals the third operand.
|
|
1314
|
+
*
|
|
1315
|
+
* @example
|
|
1316
|
+
* ```typescript
|
|
1317
|
+
* // BREQ r0 r1 r2
|
|
1318
|
+
* // 如果 r1 == r2,跳转到 r1 存储的地址
|
|
1319
|
+
* ```
|
|
1320
|
+
*
|
|
1321
|
+
* @public
|
|
1322
|
+
*/
|
|
1323
|
+
export interface BreqInstructionNode extends TernaryInstruction_O_O_O {
|
|
1324
|
+
type: "breqInstruction";
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
/**
|
|
1329
|
+
* @summary BRNE(Branches Register if Not Equal)指令节点
|
|
1330
|
+
*
|
|
1331
|
+
* @desc 如果第二个操作数不等于第三个操作数,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1332
|
+
* @elseif en
|
|
1333
|
+
* @summary BRNE (Branches Register if Not Equal) instruction node
|
|
1334
|
+
*
|
|
1335
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the second operand does not equal the third operand.
|
|
1336
|
+
*
|
|
1337
|
+
* @example
|
|
1338
|
+
* ```typescript
|
|
1339
|
+
* // BRNE r0 r1 r2
|
|
1340
|
+
* // 如果 r1 != r2,跳转到 r1 存储的地址
|
|
1341
|
+
* ```
|
|
1342
|
+
*
|
|
1343
|
+
* @public
|
|
1344
|
+
*/
|
|
1345
|
+
export interface BrneInstructionNode extends TernaryInstruction_O_O_O {
|
|
1346
|
+
type: "brneInstruction";
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
|
|
1350
|
+
/**
|
|
1351
|
+
* @summary BRGE(Branches Register if Greater than or Equal)指令节点
|
|
1352
|
+
*
|
|
1353
|
+
* @desc 如果第二个操作数大于等于第三个操作数,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1354
|
+
* @elseif en
|
|
1355
|
+
* @summary BRGE (Branches Register if Greater than or Equal) instruction node
|
|
1356
|
+
*
|
|
1357
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the second operand is greater than or equal to the third operand.
|
|
1358
|
+
*
|
|
1359
|
+
* @example
|
|
1360
|
+
* ```typescript
|
|
1361
|
+
* // BRGE r0 r1 r2
|
|
1362
|
+
* // 如果 r1 >= r2,跳转到 r1 存储的地址
|
|
1363
|
+
* ```
|
|
1364
|
+
*
|
|
1365
|
+
* @public
|
|
1366
|
+
*/
|
|
1367
|
+
export interface BrgeInstructionNode extends TernaryInstruction_O_O_O {
|
|
1368
|
+
type: "brgeInstruction";
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
|
|
1372
|
+
/**
|
|
1373
|
+
* @summary BRGT(Branches Register if Greater Than)指令节点
|
|
1374
|
+
*
|
|
1375
|
+
* @desc 如果第二个操作数大于第三个操作数,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1376
|
+
* @elseif en
|
|
1377
|
+
* @summary BRGT (Branches Register if Greater Than) instruction node
|
|
1378
|
+
*
|
|
1379
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the second operand is greater than the third operand.
|
|
1380
|
+
*
|
|
1381
|
+
* @example
|
|
1382
|
+
* ```typescript
|
|
1383
|
+
* // BRGT r0 r1 r2
|
|
1384
|
+
* // 如果 r1 > r2,跳转到 r1 存储的地址
|
|
1385
|
+
* ```
|
|
1386
|
+
*
|
|
1387
|
+
* @public
|
|
1388
|
+
*/
|
|
1389
|
+
export interface BrgtInstructionNode extends TernaryInstruction_O_O_O {
|
|
1390
|
+
type: "brgtInstruction";
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
|
|
1394
|
+
/**
|
|
1395
|
+
* @summary BRLE(Branches Register if Less than or Equal)指令节点
|
|
1396
|
+
*
|
|
1397
|
+
* @desc 如果第二个操作数小于等于第三个操作数,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1398
|
+
* @elseif en
|
|
1399
|
+
* @summary BRLE (Branches Register if Less than or Equal) instruction node
|
|
1400
|
+
*
|
|
1401
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the second operand is less than or equal to the third operand.
|
|
1402
|
+
*
|
|
1403
|
+
* @example
|
|
1404
|
+
* ```typescript
|
|
1405
|
+
* // BRLE r0 r1 r2
|
|
1406
|
+
* // 如果 r1 <= r2,跳转到 r1 存储的地址
|
|
1407
|
+
* ```
|
|
1408
|
+
*
|
|
1409
|
+
* @public
|
|
1410
|
+
*/
|
|
1411
|
+
export interface BrleInstructionNode extends TernaryInstruction_O_O_O {
|
|
1412
|
+
type: "brleInstruction";
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
|
|
1416
|
+
/**
|
|
1417
|
+
* @summary BRLT(Branches Register if Less Than)指令节点
|
|
1418
|
+
*
|
|
1419
|
+
* @desc 如果第二个操作数小于第三个操作数,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1420
|
+
* @elseif en
|
|
1421
|
+
* @summary BRLT (Branches Register if Less Than) instruction node
|
|
1422
|
+
*
|
|
1423
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the second operand is less than the third operand.
|
|
1424
|
+
*
|
|
1425
|
+
* @example
|
|
1426
|
+
* ```typescript
|
|
1427
|
+
* // BRLT r0 r1 r2
|
|
1428
|
+
* // 如果 r1 < r2,跳转到 r1 存储的地址
|
|
1429
|
+
* ```
|
|
1430
|
+
*
|
|
1431
|
+
* @public
|
|
1432
|
+
*/
|
|
1433
|
+
export interface BrltInstructionNode extends TernaryInstruction_O_O_O {
|
|
1434
|
+
type: "brltInstruction";
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
|
|
1438
|
+
/**
|
|
1439
|
+
* @summary BRAPZ(Branches Register if And Predicate Zero)指令节点
|
|
1440
|
+
*
|
|
1441
|
+
* @desc 如果第二个和第三个操作数的按位与结果为零,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1442
|
+
* @elseif en
|
|
1443
|
+
* @summary BRAPZ (Branches Register if And Predicate Zero) instruction node
|
|
1444
|
+
*
|
|
1445
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the bitwise AND of the second and third operands is zero.
|
|
1446
|
+
*
|
|
1447
|
+
* @example
|
|
1448
|
+
* ```typescript
|
|
1449
|
+
* // BRAPZ r0 r1 r2
|
|
1450
|
+
* // 如果 (r1 & r2) == 0,跳转到 r1 存储的地址
|
|
1451
|
+
* ```
|
|
1452
|
+
*
|
|
1453
|
+
* @public
|
|
1454
|
+
*/
|
|
1455
|
+
export interface BrapzInstructionNode extends TernaryInstruction_O_O_O {
|
|
1456
|
+
type: "brapzInstruction";
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
|
|
1460
|
+
/**
|
|
1461
|
+
* @summary BRNAZ(Branches Register if Not And Predicate Zero)指令节点
|
|
1462
|
+
*
|
|
1463
|
+
* @desc 如果第二个和第三个操作数的按位与结果非零,则跳转到第二个操作数(作为地址寄存器)指定的目标地址。
|
|
1464
|
+
* @elseif en
|
|
1465
|
+
* @summary BRNAZ (Branches Register if Not And Predicate Zero) instruction node
|
|
1466
|
+
*
|
|
1467
|
+
* @desc Jumps to the target address specified by the second operand (as address register) if the bitwise AND of the second and third operands is non-zero.
|
|
1468
|
+
*
|
|
1469
|
+
* @example
|
|
1470
|
+
* ```typescript
|
|
1471
|
+
* // BRNAZ r0 r1 r2
|
|
1472
|
+
* // 如果 (r1 & r2) != 0,跳转到 r1 存储的地址
|
|
1473
|
+
* ```
|
|
1474
|
+
*
|
|
1475
|
+
* @public
|
|
1476
|
+
*/
|
|
1477
|
+
export interface BrnazInstructionNode extends TernaryInstruction_O_O_O {
|
|
1478
|
+
type: "brnazInstruction";
|
|
1479
|
+
}
|
|
1480
|
+
|
|
1481
|
+
|
|
1482
|
+
/**
|
|
1483
|
+
* @summary 三元指令联合类型
|
|
1484
|
+
*
|
|
1485
|
+
* @desc 包含所有三元指令类型的联合,包括可能的错误节点。
|
|
1486
|
+
* @elseif en
|
|
1487
|
+
* @summary Ternary instruction union type
|
|
1488
|
+
*
|
|
1489
|
+
* @desc Union of all ternary instruction types, including possible error nodes.
|
|
1490
|
+
*
|
|
1491
|
+
* @public
|
|
1492
|
+
*/
|
|
1493
|
+
export type TernaryInstructionNode =
|
|
1494
|
+
| AddInstructionNode
|
|
1495
|
+
| Atan2InstructionNode
|
|
1496
|
+
| DivInstructionNode
|
|
1497
|
+
| MaxInstructionNode
|
|
1498
|
+
| MinInstructionNode
|
|
1499
|
+
| ModInstructionNode
|
|
1500
|
+
| MulInstructionNode
|
|
1501
|
+
| PowInstructionNode
|
|
1502
|
+
| AndInstructionNode
|
|
1503
|
+
| NorInstructionNode
|
|
1504
|
+
| OrInstructionNode
|
|
1505
|
+
| SlaInstructionNode
|
|
1506
|
+
| SllInstructionNode
|
|
1507
|
+
| SraInstructionNode
|
|
1508
|
+
| SrlInstructionNode
|
|
1509
|
+
| XorInstructionNode
|
|
1510
|
+
| SapzInstructionNode
|
|
1511
|
+
| SnazInstructionNode
|
|
1512
|
+
| SeqInstructionNode
|
|
1513
|
+
| SneInstructionNode
|
|
1514
|
+
| SgeInstructionNode
|
|
1515
|
+
| SgtInstructionNode
|
|
1516
|
+
| SleInstructionNode
|
|
1517
|
+
| SltInstructionNode
|
|
1518
|
+
| GetInstructionNode
|
|
1519
|
+
| RmapInstructionNode
|
|
1520
|
+
| PutInstructionNode
|
|
1521
|
+
| LInstructionNode
|
|
1522
|
+
| LrInstructionNode
|
|
1523
|
+
| SInstructionNode
|
|
1524
|
+
| SbInstructionNode
|
|
1525
|
+
| BdnvlInstructionNode
|
|
1526
|
+
| BdnvsInstructionNode
|
|
1527
|
+
| BeqInstructionNode
|
|
1528
|
+
| BeqalInstructionNode
|
|
1529
|
+
| BneInstructionNode
|
|
1530
|
+
| BnealInstructionNode
|
|
1531
|
+
| BgeInstructionNode
|
|
1532
|
+
| BgealInstructionNode
|
|
1533
|
+
| BgtInstructionNode
|
|
1534
|
+
| BgtalInstructionNode
|
|
1535
|
+
| BleInstructionNode
|
|
1536
|
+
| BlealInstructionNode
|
|
1537
|
+
| BltInstructionNode
|
|
1538
|
+
| BltalInstructionNode
|
|
1539
|
+
| BapzInstructionNode
|
|
1540
|
+
| BapzalInstructionNode
|
|
1541
|
+
| BnazInstructionNode
|
|
1542
|
+
| BnazalInstructionNode
|
|
1543
|
+
| BreqInstructionNode
|
|
1544
|
+
| BrneInstructionNode
|
|
1545
|
+
| BrgeInstructionNode
|
|
1546
|
+
| BrgtInstructionNode
|
|
1547
|
+
| BrleInstructionNode
|
|
1548
|
+
| BrltInstructionNode
|
|
1549
|
+
| BrapzInstructionNode
|
|
1550
|
+
| BrnazInstructionNode
|
|
1551
|
+
| ErrorNode;
|