This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.
For details, refer to the following.
http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/436
Note:There is a change in rtt0.h from the original source in the mruby/c. It was necessary for inclusion in C ++ source.
mrubyc/opcode.h@0:33feccbba3ff, 2017-02-15 (annotated)
- Committer:
- tk_takateku
- Date:
- Wed Feb 15 01:03:35 2017 +0000
- Revision:
- 0:33feccbba3ff
Commit before publishing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tk_takateku | 0:33feccbba3ff | 1 | /*! @file |
tk_takateku | 0:33feccbba3ff | 2 | @brief |
tk_takateku | 0:33feccbba3ff | 3 | |
tk_takateku | 0:33feccbba3ff | 4 | |
tk_takateku | 0:33feccbba3ff | 5 | <pre> |
tk_takateku | 0:33feccbba3ff | 6 | Copyright (C) 2015 Kyushu Institute of Technology. |
tk_takateku | 0:33feccbba3ff | 7 | Copyright (C) 2015 Shimane IT Open-Innovation Center. |
tk_takateku | 0:33feccbba3ff | 8 | |
tk_takateku | 0:33feccbba3ff | 9 | This file is distributed under BSD 3-Clause License. |
tk_takateku | 0:33feccbba3ff | 10 | |
tk_takateku | 0:33feccbba3ff | 11 | |
tk_takateku | 0:33feccbba3ff | 12 | </pre> |
tk_takateku | 0:33feccbba3ff | 13 | */ |
tk_takateku | 0:33feccbba3ff | 14 | |
tk_takateku | 0:33feccbba3ff | 15 | #ifndef MRBC_SRC_OPCODE_H_ |
tk_takateku | 0:33feccbba3ff | 16 | #define MRBC_SRC_OPCODE_H_ |
tk_takateku | 0:33feccbba3ff | 17 | |
tk_takateku | 0:33feccbba3ff | 18 | #ifdef __cplusplus |
tk_takateku | 0:33feccbba3ff | 19 | extern "C" { |
tk_takateku | 0:33feccbba3ff | 20 | #endif |
tk_takateku | 0:33feccbba3ff | 21 | |
tk_takateku | 0:33feccbba3ff | 22 | |
tk_takateku | 0:33feccbba3ff | 23 | #define GET_OPCODE(code) ((code) & 0x7f) |
tk_takateku | 0:33feccbba3ff | 24 | #define GETARG_A(code) (((code) >> 23) & 0x1ff) |
tk_takateku | 0:33feccbba3ff | 25 | #define GETARG_B(code) (((code) >> 14) & 0x1ff) |
tk_takateku | 0:33feccbba3ff | 26 | #define GETARG_C(code) (((code) >> 7) & 0x7f) |
tk_takateku | 0:33feccbba3ff | 27 | #define GETARG_Ax(code) (((code) >> 7) & 0x1ffffff) |
tk_takateku | 0:33feccbba3ff | 28 | |
tk_takateku | 0:33feccbba3ff | 29 | #define GETARG_b(code) GETARG_UNPACK_b(code,14,2) |
tk_takateku | 0:33feccbba3ff | 30 | |
tk_takateku | 0:33feccbba3ff | 31 | #define GETARG_UNPACK_b(i,n1,n2) ((((code)) >> (7+(n2))) & (((1<<(n1))-1))) |
tk_takateku | 0:33feccbba3ff | 32 | |
tk_takateku | 0:33feccbba3ff | 33 | |
tk_takateku | 0:33feccbba3ff | 34 | #define MAXARG_Bx (0xffff) |
tk_takateku | 0:33feccbba3ff | 35 | #define MAXARG_sBx (MAXARG_Bx>>1) |
tk_takateku | 0:33feccbba3ff | 36 | #define GETARG_Bx(code) (((code) >> 7) & 0xffff) |
tk_takateku | 0:33feccbba3ff | 37 | #define GETARG_sBx(code) (GETARG_Bx(code)-MAXARG_sBx) |
tk_takateku | 0:33feccbba3ff | 38 | #define GETARG_C(code) (((code) >> 7) & 0x7f) |
tk_takateku | 0:33feccbba3ff | 39 | |
tk_takateku | 0:33feccbba3ff | 40 | |
tk_takateku | 0:33feccbba3ff | 41 | //================================================================ |
tk_takateku | 0:33feccbba3ff | 42 | /*!@brief |
tk_takateku | 0:33feccbba3ff | 43 | |
tk_takateku | 0:33feccbba3ff | 44 | */ |
tk_takateku | 0:33feccbba3ff | 45 | enum OPCODE { |
tk_takateku | 0:33feccbba3ff | 46 | OP_NOP = 0x00, |
tk_takateku | 0:33feccbba3ff | 47 | OP_MOVE = 0x01, |
tk_takateku | 0:33feccbba3ff | 48 | OP_LOADL = 0x02, |
tk_takateku | 0:33feccbba3ff | 49 | OP_LOADI = 0x03, |
tk_takateku | 0:33feccbba3ff | 50 | OP_LOADSYM = 0x04, |
tk_takateku | 0:33feccbba3ff | 51 | OP_LOADNIL = 0x05, |
tk_takateku | 0:33feccbba3ff | 52 | OP_LOADSELF = 0x06, |
tk_takateku | 0:33feccbba3ff | 53 | OP_LOADT = 0x07, |
tk_takateku | 0:33feccbba3ff | 54 | OP_LOADF = 0x08, |
tk_takateku | 0:33feccbba3ff | 55 | OP_GETGLOBAL = 0x09, |
tk_takateku | 0:33feccbba3ff | 56 | OP_SETGLOBAL = 0x0a, |
tk_takateku | 0:33feccbba3ff | 57 | |
tk_takateku | 0:33feccbba3ff | 58 | OP_GETCONST = 0x11, |
tk_takateku | 0:33feccbba3ff | 59 | OP_SETCONST = 0x12, |
tk_takateku | 0:33feccbba3ff | 60 | |
tk_takateku | 0:33feccbba3ff | 61 | OP_JMP = 0x17, |
tk_takateku | 0:33feccbba3ff | 62 | OP_JMPIF = 0x18, |
tk_takateku | 0:33feccbba3ff | 63 | OP_JMPNOT = 0x19, |
tk_takateku | 0:33feccbba3ff | 64 | OP_SEND = 0x20, |
tk_takateku | 0:33feccbba3ff | 65 | |
tk_takateku | 0:33feccbba3ff | 66 | OP_ENTER = 0x26, |
tk_takateku | 0:33feccbba3ff | 67 | |
tk_takateku | 0:33feccbba3ff | 68 | OP_RETURN = 0x29, |
tk_takateku | 0:33feccbba3ff | 69 | |
tk_takateku | 0:33feccbba3ff | 70 | OP_ADD = 0x2c, |
tk_takateku | 0:33feccbba3ff | 71 | OP_ADDI = 0x2d, |
tk_takateku | 0:33feccbba3ff | 72 | OP_SUB = 0x2e, |
tk_takateku | 0:33feccbba3ff | 73 | OP_SUBI = 0x2f, |
tk_takateku | 0:33feccbba3ff | 74 | OP_MUL = 0x30, |
tk_takateku | 0:33feccbba3ff | 75 | OP_DIV = 0x31, |
tk_takateku | 0:33feccbba3ff | 76 | OP_EQ = 0x32, |
tk_takateku | 0:33feccbba3ff | 77 | OP_LT = 0x33, |
tk_takateku | 0:33feccbba3ff | 78 | OP_LE = 0x34, |
tk_takateku | 0:33feccbba3ff | 79 | OP_GT = 0x35, |
tk_takateku | 0:33feccbba3ff | 80 | OP_GE = 0x36, |
tk_takateku | 0:33feccbba3ff | 81 | OP_ARRAY = 0x37, |
tk_takateku | 0:33feccbba3ff | 82 | |
tk_takateku | 0:33feccbba3ff | 83 | OP_STRING = 0x3d, |
tk_takateku | 0:33feccbba3ff | 84 | |
tk_takateku | 0:33feccbba3ff | 85 | OP_HASH = 0x3f, |
tk_takateku | 0:33feccbba3ff | 86 | OP_LAMBDA = 0x40, |
tk_takateku | 0:33feccbba3ff | 87 | OP_RANGE = 0x41, |
tk_takateku | 0:33feccbba3ff | 88 | |
tk_takateku | 0:33feccbba3ff | 89 | OP_CLASS = 0x43, |
tk_takateku | 0:33feccbba3ff | 90 | |
tk_takateku | 0:33feccbba3ff | 91 | OP_METHOD = 0x46, |
tk_takateku | 0:33feccbba3ff | 92 | |
tk_takateku | 0:33feccbba3ff | 93 | OP_TCLASS = 0x48, |
tk_takateku | 0:33feccbba3ff | 94 | |
tk_takateku | 0:33feccbba3ff | 95 | OP_STOP = 0x4a, |
tk_takateku | 0:33feccbba3ff | 96 | }; |
tk_takateku | 0:33feccbba3ff | 97 | |
tk_takateku | 0:33feccbba3ff | 98 | #ifdef __cplusplus |
tk_takateku | 0:33feccbba3ff | 99 | } |
tk_takateku | 0:33feccbba3ff | 100 | #endif |
tk_takateku | 0:33feccbba3ff | 101 | #endif |
tk_takateku | 0:33feccbba3ff | 102 |