summaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source/c_cmd_bytecodes.h
blob: 6051aba90f92e5aac833d1d39d3ba97e55646e0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef C_CMD_BYTECODES
#define C_CMD_BYTECODES
//
// opcode definitions
// symbol, bits, arg format
//
#define OPCODE_COUNT  0x36

//Family: Math
#define OP_ADD      0x00  // dest, src1, src2
#define OP_SUB      0x01  // dest, src1, src2
#define OP_NEG      0x02  // dest, src
#define OP_MUL      0x03  // dest, src1, src2
#define OP_DIV      0x04  // dest, src1, src2
#define OP_MOD      0x05  // dest, src1, src2

//Family: Logic
#define OP_AND      0x06  // dest, src1, src2
#define OP_OR       0x07  // dest, src1, src2
#define OP_XOR      0x08  // dest, src1, src2
#define OP_NOT      0x09  // dest, src

//Family: Bit manipulation
#define OP_CMNT     0x0A  // dest, src
#define OP_LSL      0x0B  // dest, src
#define OP_LSR      0x0C  // dest, src
#define OP_ASL      0x0D  // dest, src
#define OP_ASR      0x0E  // dest, src
#define OP_ROTL     0x0F  // dest, src
#define OP_ROTR     0x10  // dest, src

//Family: Comparison
#define OP_CMP      0x11  // dest, src1, src2
#define OP_TST      0x12  // dest, src
#define OP_CMPSET   0x13  // dest, src, testsrc, testsrc
#define OP_TSTSET   0x14  // dest, src, testsrc

//Family: Array ops
#define OP_INDEX    0x15  // dest, src, index
#define OP_REPLACE  0x16  // dest, src, index, val
#define OP_ARRSIZE  0x17  // dest, src
#define OP_ARRBUILD 0x18  // instrsize, dest, src1, src2, �
#define OP_ARRSUBSET  0x19  // dest, src, index, length
#define OP_ARRINIT  0x1A  // dest, elem, length

//Family: Memory ops
#define OP_MOV      0x1B  // dest, src
#define OP_SET      0x1C  // dest, imm

//Family: String ops
#define OP_FLATTEN  0x1D  // dest, src
#define OP_UNFLATTEN  0x1E  // dest, err, src, type
#define OP_NUMTOSTRING  0x1F  // dest, src
#define OP_STRINGTONUM  0x20  // dest, offsetpast, src, offset, default
#define OP_STRCAT   0x21  // instrsize, dest, src1, src2, �
#define OP_STRSUBSET  0x22  // dest, src, index, length
#define OP_STRTOBYTEARR 0x23  // dest, src
#define OP_BYTEARRTOSTR 0x24  // dest, src

//Family: Control flow
#define OP_JMP      0x25  // offset
#define OP_BRCMP    0x26  // offset, src1, src2
#define OP_BRTST    0x27  // offset, src
#define OP_SYSCALL  0x28  // func, args
#define OP_STOP     0x29  // stop?

//Family: Clump scheduling
#define OP_FINCLUMP 0x2A  // start, end
#define OP_FINCLUMPIMMED  0x2B  // clumpID
#define OP_ACQUIRE  0x2C  // mutexID
#define OP_RELEASE  0x2D  // mutexID
#define OP_SUBCALL  0x2E  // subroutine, callerID
#define OP_SUBRET   0x2F  // callerID

//Family: IO ops
#define OP_SETIN    0x30  // src, port, propid
#define OP_SETOUT   0x31  // instrsize, port/portlist, propid1, src1, ...
#define OP_GETIN    0x32  // dest, port, propid
#define OP_GETOUT   0x33  // dest, port, propid

//Family: Timing
#define OP_WAIT     0x34  // milliseconds
#define OP_GETTICK  0x35  // dest

// condition code definitions
#define OPCC1_LT   0x00
#define OPCC1_GT   0x01
#define OPCC1_LTEQ 0x02
#define OPCC1_GTEQ 0x03
#define OPCC1_EQ   0x04
#define OPCC1_NEQ  0x05



//
// short op definitions
//
#define USE_SHORT_OPS
#define SHORT_OP_MOV  0
#define SHORT_OP_ACQUIRE  1
#define SHORT_OP_RELEASE  2
#define SHORT_OP_SUBCALL  3

//
// short op mapping table
//
static UBYTE ShortOpMap[4] =
{
  OP_MOV,
  OP_ACQUIRE,
  OP_RELEASE,
  OP_SUBCALL
};

#endif  // C_CMD_BYTECODES