diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2004-08-04 17:18:13 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2004-08-04 17:18:13 -0300 |
| commit | 6bddbbde7aaedbea2d5240964dc544f801655941 (patch) | |
| tree | f5af79485f2433b57a1a9dc21124b5b8f91483d4 /lopcodes.h | |
| parent | 31e48f26ed449ecfea88241106da98f66f00b9c0 (diff) | |
| download | lua-6bddbbde7aaedbea2d5240964dc544f801655941.tar.gz lua-6bddbbde7aaedbea2d5240964dc544f801655941.tar.bz2 lua-6bddbbde7aaedbea2d5240964dc544f801655941.zip | |
details (opcode may not be the first field)
Diffstat (limited to 'lopcodes.h')
| -rw-r--r-- | lopcodes.h | 14 |
1 files changed, 8 insertions, 6 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lopcodes.h,v 1.109 2004/05/31 18:51:50 roberto Exp roberto $ | 2 | ** $Id: lopcodes.h,v 1.110 2004/06/29 18:49:02 roberto Exp roberto $ |
| 3 | ** Opcodes for Lua virtual machine | 3 | ** Opcodes for Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -41,10 +41,11 @@ enum OpMode {iABC, iABx, iAsBx}; /* basic instruction format */ | |||
| 41 | 41 | ||
| 42 | #define SIZE_OP 6 | 42 | #define SIZE_OP 6 |
| 43 | 43 | ||
| 44 | #define POS_OP 0 | ||
| 45 | #define POS_A (POS_OP + SIZE_OP) | ||
| 44 | #define POS_C (POS_A + SIZE_A) | 46 | #define POS_C (POS_A + SIZE_A) |
| 45 | #define POS_B (POS_C + SIZE_C) | 47 | #define POS_B (POS_C + SIZE_C) |
| 46 | #define POS_Bx POS_C | 48 | #define POS_Bx POS_C |
| 47 | #define POS_A SIZE_OP | ||
| 48 | 49 | ||
| 49 | 50 | ||
| 50 | /* | 51 | /* |
| @@ -76,8 +77,9 @@ enum OpMode {iABC, iABx, iAsBx}; /* basic instruction format */ | |||
| 76 | ** the following macros help to manipulate instructions | 77 | ** the following macros help to manipulate instructions |
| 77 | */ | 78 | */ |
| 78 | 79 | ||
| 79 | #define GET_OPCODE(i) (cast(OpCode, (i)&MASK1(SIZE_OP,0))) | 80 | #define GET_OPCODE(i) (cast(OpCode, ((i)>>POS_OP) & MASK1(SIZE_OP,0))) |
| 80 | #define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,0)) | cast(Instruction, o))) | 81 | #define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ |
| 82 | ((cast(Instruction, o)<<POS_OP)&MASK1(SIZE_OP,POS_OP)))) | ||
| 81 | 83 | ||
| 82 | #define GETARG_A(i) (cast(int, ((i)>>POS_A) & MASK1(SIZE_A,0))) | 84 | #define GETARG_A(i) (cast(int, ((i)>>POS_A) & MASK1(SIZE_A,0))) |
| 83 | #define SETARG_A(i,u) ((i) = (((i)&MASK0(SIZE_A,POS_A)) | \ | 85 | #define SETARG_A(i,u) ((i) = (((i)&MASK0(SIZE_A,POS_A)) | \ |
| @@ -99,12 +101,12 @@ enum OpMode {iABC, iABx, iAsBx}; /* basic instruction format */ | |||
| 99 | #define SETARG_sBx(i,b) SETARG_Bx((i),cast(unsigned int, (b)+MAXARG_sBx)) | 101 | #define SETARG_sBx(i,b) SETARG_Bx((i),cast(unsigned int, (b)+MAXARG_sBx)) |
| 100 | 102 | ||
| 101 | 103 | ||
| 102 | #define CREATE_ABC(o,a,b,c) (cast(Instruction, o) \ | 104 | #define CREATE_ABC(o,a,b,c) ((cast(Instruction, o)<<POS_OP) \ |
| 103 | | (cast(Instruction, a)<<POS_A) \ | 105 | | (cast(Instruction, a)<<POS_A) \ |
| 104 | | (cast(Instruction, b)<<POS_B) \ | 106 | | (cast(Instruction, b)<<POS_B) \ |
| 105 | | (cast(Instruction, c)<<POS_C)) | 107 | | (cast(Instruction, c)<<POS_C)) |
| 106 | 108 | ||
| 107 | #define CREATE_ABx(o,a,bc) (cast(Instruction, o) \ | 109 | #define CREATE_ABx(o,a,bc) ((cast(Instruction, o)<<POS_OP) \ |
| 108 | | (cast(Instruction, a)<<POS_A) \ | 110 | | (cast(Instruction, a)<<POS_A) \ |
| 109 | | (cast(Instruction, bc)<<POS_Bx)) | 111 | | (cast(Instruction, bc)<<POS_Bx)) |
| 110 | 112 | ||
