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