xref: /nrf52832-nimble/rt-thread/components/finsh/finsh_ops.h (revision 104654410c56c573564690304ae786df310c91fc)
1 /*
2  * Copyright (c) 2006-2018, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2010-03-22     Bernard      first version
9  */
10 #ifndef __FINSH_OP_H__
11 #define __FINSH_OP_H__
12 
13 #include "finsh_vm.h"
14 
15 /*
16  * FinC VM specification
17  * Memory
18  * .VAR
19  *
20  * .STACK
21  *
22  * .HEAP
23  *
24  * .TEXT
25  * OP [op1]
26  */
27 
28 #define FINSH_OP_NOOP			0x00
29 
30 /* add @ r1 = r2 + r3 */
31 #define FINSH_OP_ADD_BYTE		0x01
32 #define FINSH_OP_ADD_WORD		0x02
33 #define FINSH_OP_ADD_DWORD		0x03
34 
35 /* sub @ r1 = r2 - r3 */
36 #define FINSH_OP_SUB_BYTE		0x04
37 #define FINSH_OP_SUB_WORD		0x05
38 #define FINSH_OP_SUB_DWORD		0x06
39 
40 /* div @ r1 = r2 / r3 */
41 #define FINSH_OP_DIV_BYTE		0x07
42 #define FINSH_OP_DIV_WORD		0x08
43 #define FINSH_OP_DIV_DWORD		0x09
44 
45 /* mod @ r1 = r2 % r3 */
46 #define FINSH_OP_MOD_BYTE		0x0A
47 #define FINSH_OP_MOD_WORD		0x0B
48 #define FINSH_OP_MOD_DWORD		0x0C
49 
50 /* mul @ r1 = r2 * r3 */
51 #define FINSH_OP_MUL_BYTE		0x0D
52 #define FINSH_OP_MUL_WORD		0x0E
53 #define FINSH_OP_MUL_DWORD		0x0F
54 
55 /* and @ r1 = r2 & r3 */
56 #define FINSH_OP_AND_BYTE		0x10
57 #define FINSH_OP_AND_WORD		0x11
58 #define FINSH_OP_AND_DWORD		0x12
59 
60 /* or  @ r1 = r2 | r3 */
61 #define FINSH_OP_OR_BYTE		0x13
62 #define FINSH_OP_OR_WORD		0x14
63 #define FINSH_OP_OR_DWORD		0x15
64 
65 /* xor @ r1 = r2 ^ r3 */
66 #define FINSH_OP_XOR_BYTE		0x16
67 #define FINSH_OP_XOR_WORD		0x17
68 #define FINSH_OP_XOR_DWORD		0x18
69 
70 /* bw  @ r1 = ~r2 */
71 #define FINSH_OP_BITWISE_BYTE	0x19
72 #define FINSH_OP_BITWISE_WORD	0x1A
73 #define FINSH_OP_BITWISE_DWORD	0x1B
74 
75 /* shl @ r1 = r2 << r3 */
76 #define FINSH_OP_SHL_BYTE		0x1C
77 #define FINSH_OP_SHL_WORD		0x1D
78 #define FINSH_OP_SHL_DWORD		0x1E
79 
80 /* shr @ r1 = r2 >> r3 */
81 #define FINSH_OP_SHR_BYTE		0x1F
82 #define FINSH_OP_SHR_WORD		0x20
83 #define FINSH_OP_SHR_DWORD		0x21
84 
85 /* ld  @ r1 = [r2] */
86 #define FINSH_OP_LD_BYTE		0x22
87 #define FINSH_OP_LD_WORD		0x23
88 #define FINSH_OP_LD_DWORD		0x24
89 
90 #define FINSH_OP_LD_VALUE_BYTE	0x25
91 #define FINSH_OP_LD_VALUE_WORD	0x26
92 #define FINSH_OP_LD_VALUE_DWORD	0x27
93 
94 /* st  @ [r2] = r1 */
95 #define FINSH_OP_ST_BYTE		0x28
96 #define FINSH_OP_ST_WORD		0x29
97 #define FINSH_OP_ST_DWORD		0x2A
98 
99 /* pop */
100 #define FINSH_OP_POP			0x2B
101 
102 /* call r1 @ [r1](stack) */
103 #define FINSH_OP_SYSCALL		0x2C
104 
105 /* load value from stack */
106 #define FINSH_OP_LD_VALUE_BYTE_STACK	0x2D
107 #define FINSH_OP_LD_VALUE_WORD_STACK	0x2E
108 #define FINSH_OP_LD_VALUE_DWORD_STACK	0x2F
109 
110 /* halt */
111 #define FINSH_OP_HALT			0xFF
112 
113 typedef void (*op_func)();
114 extern const op_func op_table[];
115 
116 #endif
117