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