diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-04-26 14:46:52 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-04-26 14:46:52 -0300 |
commit | 173e41b2ebed59a716d299470de25e50aee3b921 (patch) | |
tree | d106140f6940b987f28f4eaf962c2d3ab745afa1 /lopcodes.h | |
parent | a3f9c1a77abb2add30334160055dc2ed11eb0b2e (diff) | |
download | lua-173e41b2ebed59a716d299470de25e50aee3b921.tar.gz lua-173e41b2ebed59a716d299470de25e50aee3b921.tar.bz2 lua-173e41b2ebed59a716d299470de25e50aee3b921.zip |
new opcode OP_ADDI (for immediate integer operand) (Experimental)
Diffstat (limited to 'lopcodes.h')
-rw-r--r-- | lopcodes.h | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lopcodes.h,v 1.150 2017/04/20 19:53:55 roberto Exp roberto $ | 2 | ** $Id: lopcodes.h,v 1.151 2017/04/24 20:26:39 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 | */ |
@@ -90,7 +90,7 @@ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */ | |||
90 | #define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ | 90 | #define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ |
91 | ((cast(Instruction, o)<<POS_OP)&MASK1(SIZE_OP,POS_OP)))) | 91 | ((cast(Instruction, o)<<POS_OP)&MASK1(SIZE_OP,POS_OP)))) |
92 | 92 | ||
93 | #define getarg(i,pos,size) (cast(int, ((i)>>pos) & MASK1(size,0))) | 93 | #define getarg(i,pos,size) (cast(int, ((i)>>(pos)) & MASK1(size,0))) |
94 | #define setarg(i,v,pos,size) ((i) = (((i)&MASK0(size,pos)) | \ | 94 | #define setarg(i,v,pos,size) ((i) = (((i)&MASK0(size,pos)) | \ |
95 | ((cast(Instruction, v)<<pos)&MASK1(size,pos)))) | 95 | ((cast(Instruction, v)<<pos)&MASK1(size,pos)))) |
96 | 96 | ||
@@ -100,6 +100,9 @@ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */ | |||
100 | #define GETARG_B(i) getarg(i, POS_B, SIZE_B) | 100 | #define GETARG_B(i) getarg(i, POS_B, SIZE_B) |
101 | #define SETARG_B(i,v) setarg(i, v, POS_B, SIZE_B) | 101 | #define SETARG_B(i,v) setarg(i, v, POS_B, SIZE_B) |
102 | 102 | ||
103 | #define GETARG_Br(i) getarg(i, POS_B, SIZE_B - 1) | ||
104 | #define GETARG_Bk(i) getarg(i, (POS_B + SIZE_B - 1), 1) | ||
105 | |||
103 | #define GETARG_C(i) getarg(i, POS_C, SIZE_C) | 106 | #define GETARG_C(i) getarg(i, POS_C, SIZE_C) |
104 | #define SETARG_C(i,v) setarg(i, v, POS_C, SIZE_C) | 107 | #define SETARG_C(i,v) setarg(i, v, POS_C, SIZE_C) |
105 | 108 | ||
@@ -187,6 +190,7 @@ OP_NEWTABLE,/* A B C R(A) := {} (size = B,C) */ | |||
187 | 190 | ||
188 | OP_SELF,/* A B C R(A+1) := R(B); R(A) := R(B)[RK(C)] */ | 191 | OP_SELF,/* A B C R(A+1) := R(B); R(A) := R(B)[RK(C)] */ |
189 | 192 | ||
193 | OP_ADDI,/* A B C R(A) := R(B) + C */ | ||
190 | OP_ADD,/* A B C R(A) := RK(B) + RK(C) */ | 194 | OP_ADD,/* A B C R(A) := RK(B) + RK(C) */ |
191 | OP_SUB,/* A B C R(A) := RK(B) - RK(C) */ | 195 | OP_SUB,/* A B C R(A) := RK(B) - RK(C) */ |
192 | OP_MUL,/* A B C R(A) := RK(B) * RK(C) */ | 196 | OP_MUL,/* A B C R(A) := RK(B) * RK(C) */ |