Roberto Ierusalimschy
|
fb8fa66136
|
no more 'luaH_emptyobject' and comparisons of addresses of global variables
(instead, use a different kind of nil to signal the fake entry returned
when a key is not found in a table)
|
2018-06-01 13:51:34 -03:00 |
Roberto Ierusalimschy
|
34aa0c5bd7
|
new macros 'likely'/'unlikely' with hints for jump predictions
(used only in errors for now)
|
2018-05-30 11:25:52 -03:00 |
Roberto Ierusalimschy
|
02ed0b2c30
|
in 'luaD_poscall', there is no need to compute 'firstResult' when 'nres==0'
|
2018-05-22 09:02:36 -03:00 |
Roberto Ierusalimschy
|
e64e20ac81
|
minimizing the code ran by 'vmfetch' + no more 'vra'
(the code is simpler without 'vra' and conversion is a no-op)
|
2018-05-02 15:17:59 -03:00 |
Roberto Ierusalimschy
|
03c6a05ec8
|
no more nil-in-table
|
2018-04-04 11:23:41 -03:00 |
Roberto Ierusalimschy
|
3d0b5edfe4
|
using unsigned comparison in 'l_intfitsf' (avoids one comparison)
|
2018-04-02 14:52:07 -03:00 |
Roberto Ierusalimschy
|
7b0b6b3b39
|
cannot use 'defined' inside a macro +
call to 'luaT_keydef' must be protected
|
2018-03-16 11:21:20 -03:00 |
Roberto Ierusalimschy
|
4a1612ff9b
|
new experimental syntax using reserved word 'undef'
|
2018-03-07 12:55:38 -03:00 |
Roberto Ierusalimschy
|
62a392ff46
|
using jump tables when available
|
2018-03-02 15:59:19 -03:00 |
Roberto Ierusalimschy
|
ef8263f81f
|
better names for macros for tags and types.
rttype -> rawtt; ttyperaw -> withvariant; ttype -> ttypetag;
tnov -> ttype
|
2018-02-26 11:16:05 -03:00 |
Roberto Ierusalimschy
|
9243c414d9
|
first version of empty entries in tables
(so that, in the future, tables can contain regular nil entries)
|
2018-02-23 10:16:18 -03:00 |
Roberto Ierusalimschy
|
c72ac048b9
|
conditional jumps "deunified"
(if a jump table is used, the unification may harm jump prediction.)
|
2018-02-21 16:43:44 -03:00 |
Roberto Ierusalimschy
|
212095a601
|
new opcodes OP_GTI/OP_GEI
|
2018-02-21 12:49:32 -03:00 |
Roberto Ierusalimschy
|
06865aa01d
|
simpler implementation for 'LTintfloat'/'LEintfloat'
+ 'LTfloatint'/'LEfloatint'
|
2018-02-21 10:47:03 -03:00 |
Roberto Ierusalimschy
|
465b474899
|
small reorganization of 'luaV_flttointeger'/'luaV_tointeger'
|
2018-02-21 09:54:26 -03:00 |
Roberto Ierusalimschy
|
1afd5a152d
|
more generic way to handle 'gclist'
|
2018-02-19 17:06:56 -03:00 |
Roberto Ierusalimschy
|
49dae52d08
|
correct way to check stack space for vararg functions
|
2018-02-17 17:20:00 -02:00 |
Roberto Ierusalimschy
|
0682fe8169
|
some simplifications/optimizations in returns from Lua functions
|
2018-02-15 13:34:29 -02:00 |
Roberto Ierusalimschy
|
b1379936cf
|
vararg back to '...' (but with another implementation)
new implementation should have zero overhead for non-vararg functions
|
2018-02-09 13:16:06 -02:00 |
Roberto Ierusalimschy
|
318a9a5859
|
new opcode 'PREPVARARG'
(avoids test for vararg function in all function calls)
|
2018-02-07 13:18:04 -02:00 |
Roberto Ierusalimschy
|
51280ef2ad
|
call hooks for Lua functions called by 'luaV_execute'
|
2018-02-06 17:16:56 -02:00 |
Roberto Ierusalimschy
|
dc0ab1e8ca
|
warnings in VS (implicit casts from ptrdiff_t to int)
|
2018-01-29 14:21:35 -02:00 |
Roberto Ierusalimschy
|
5bd8d388de
|
OP_CONCAT does not move its result (to simplify its execution)
|
2018-01-27 14:56:33 -02:00 |
Roberto Ierusalimschy
|
d2fb34ac88
|
'OP_TAILCALL' calling C functions finishes the call and returns
(instead of waiting for following 'OP_RETURN')
|
2018-01-14 15:27:50 -02:00 |
Roberto Ierusalimschy
|
ab0a851db4
|
'luaD_tryfuncTM' can ensure it does not change the stack
|
2018-01-10 17:19:27 -02:00 |
Roberto Ierusalimschy
|
ad960095bf
|
avoid jumping into a variable scope (C++ does not allow that)
|
2018-01-09 12:23:40 -02:00 |
Roberto Ierusalimschy
|
a9295a2b8e
|
typos in comments
|
2017-12-30 18:46:18 -02:00 |
Roberto Ierusalimschy
|
cf7eff45f3
|
keep control of stack top in Lua functions concentrated in 'luaV_execute'
|
2017-12-28 13:42:57 -02:00 |
Roberto Ierusalimschy
|
4676f6599e
|
new macros 'isOT'/'isIT'
(plus exchanged parameters of OP_VARARG to make it similar to other
'isOT' instructions)
|
2017-12-22 12:16:46 -02:00 |
Roberto Ierusalimschy
|
1d5b885437
|
when running Lua code, there is no need to keep 'L->top' "correct";
set it only when needed.
|
2017-12-20 12:58:05 -02:00 |
Roberto Ierusalimschy
|
3153a41e33
|
no need to save 'pc' in case of allocation errors
(allocation errors do not call message handlers)
|
2017-12-19 14:18:04 -02:00 |
Roberto Ierusalimschy
|
d388c165ef
|
new opcodes 'FORLOOP1'/'FORPREP1' for "basic for" (integer variable
with increment of 1)
|
2017-12-18 15:53:50 -02:00 |
Roberto Ierusalimschy
|
86431a2f1c
|
new opcodes BANDK/BORK/BXORK. (They do not use immediate operands
because, too often, masks in bitwise operations are integers larger
than one byte.)
|
2017-12-13 16:32:09 -02:00 |
Roberto Ierusalimschy
|
c7ee7fe026
|
new opcodes OP_SHLI/OP_SHRI
|
2017-12-04 15:41:30 -02:00 |
Roberto Ierusalimschy
|
10b8c99bbb
|
small peephole optimizations
|
2017-11-30 11:29:18 -02:00 |
Roberto Ierusalimschy
|
745eb41993
|
new opcodes OP_RETURN0/OP_RETURN1
|
2017-11-29 14:57:36 -02:00 |
Roberto Ierusalimschy
|
c766e4103d
|
'luaV_execute' gets call info as extra argument (it is always
available on call sites)
|
2017-11-29 11:02:17 -02:00 |
Roberto Ierusalimschy
|
1a5e8c1014
|
conditional jumps unified in label "condjump' + new variable 'vra'
to avoid excessive use of macro 's2v'
|
2017-11-28 12:51:00 -02:00 |
Roberto Ierusalimschy
|
ff5fe51044
|
using register 'k' for conditions in tests (we only need one bit there)
|
2017-11-28 10:58:18 -02:00 |
Roberto Ierusalimschy
|
093c16b67b
|
new opcodes 'OP_LTI' and 'OP_LEI'
|
2017-11-27 15:44:31 -02:00 |
Roberto Ierusalimschy
|
73abfde2ef
|
small simplifications around 'luaT_callorderTM'
|
2017-11-23 17:18:10 -02:00 |
Roberto Ierusalimschy
|
196c87c9ce
|
no more 'stackless' implementation; 'luaV_execute' calls itself
recursively to execute function calls. 'unroll' continues all
executions suspended by an yield (through a long jump)
|
2017-11-23 14:41:16 -02:00 |
Roberto Ierusalimschy
|
3c230cc825
|
using 'A' for register instead of 'B' in relational opcodes
('R(A)' is already created by default for all instructions.)
|
2017-11-22 17:15:44 -02:00 |
Roberto Ierusalimschy
|
41f2936d8f
|
new opcode 'OP_EQI' for equality with immediate numbers
|
2017-11-22 16:41:20 -02:00 |
Roberto Ierusalimschy
|
14c3aa12b5
|
more direct implementation for tail calls.
|
2017-11-21 12:18:03 -02:00 |
Roberto Ierusalimschy
|
f3ca52bfa9
|
in order comparison opcodes, fast track for floats too
|
2017-11-20 10:57:39 -02:00 |
Roberto Ierusalimschy
|
4c0e36a46e
|
new instruction 'OP_EQK' (for equality with constants)
|
2017-11-16 10:59:14 -02:00 |
Roberto Ierusalimschy
|
5440b42f43
|
using 'trap' to stop 'luaV_execute' when necessary (tracing and
to update its copy of 'base' when the stack is reallocated)
|
2017-11-13 13:36:52 -02:00 |
Roberto Ierusalimschy
|
32fef60743
|
detail ('Protect' defined as an expression)
|
2017-11-08 17:01:02 -02:00 |
Roberto Ierusalimschy
|
26679ea35b
|
new function 'luaV_flttointeger' to convert floats to integers (without
string coercions) + string operands to bitwise operations handled
by string metamethods
|
2017-11-08 12:50:23 -02:00 |
Roberto Ierusalimschy
|
c3e5946fb2
|
new format for JUMP instructions (to allow larger offsets)
|
2017-11-07 15:20:42 -02:00 |
Roberto Ierusalimschy
|
ad0704e40c
|
back to 'CallInfo' (no gains with its removal)
|
2017-11-07 11:25:26 -02:00 |
Roberto Ierusalimschy
|
93fd67b793
|
no more 'CallInfo' structure
|
2017-11-04 10:57:02 -02:00 |
Roberto Ierusalimschy
|
7612f7735d
|
removing uses of 'CallInfo'
|
2017-11-03 17:33:22 -02:00 |
Roberto Ierusalimschy
|
472c560705
|
no more useful fields in CallInfo
|
2017-11-03 15:22:54 -02:00 |
Roberto Ierusalimschy
|
54eb35a8aa
|
more fields moved out of 'CallInfo'
|
2017-11-03 10:12:30 -02:00 |
Roberto Ierusalimschy
|
b9e76be8a6
|
using 'L->func' when possible
|
2017-11-01 16:20:48 -02:00 |
Roberto Ierusalimschy
|
c5482468fd
|
baby steps to remove 'CallInfo': keeping 'L->func' correct
|
2017-10-31 15:54:35 -02:00 |
Roberto Ierusalimschy
|
a1ef58b3a5
|
eplicit 1-bit opcode operand 'k'
|
2017-10-04 18:56:32 -03:00 |
Roberto Ierusalimschy
|
8fbe9e3470
|
new opcodes with immediate integer operand for all arithmetic operations
|
2017-10-04 12:49:24 -03:00 |
Roberto Ierusalimschy
|
bc1b0733b8
|
avoid the use of bit 'Bk' ('B' will lose this bit soon)
|
2017-10-01 16:13:43 -03:00 |
Roberto Ierusalimschy
|
722bdbe17d
|
no more 'getBMode'-'getCMode' (imprecise + we will need more space
for op mode) + better control of op modes
|
2017-09-28 13:53:29 -03:00 |
Roberto Ierusalimschy
|
1b10033583
|
new function 'luaT_trybiniTM'
to handle tag methods for instructions with immediate integer arguments
|
2017-09-27 15:59:08 -03:00 |
Roberto Ierusalimschy
|
00e728af88
|
binary operators use R instead of RK
faster + nobody uses RK(B), so B can be smaller (freeing one bit
for more opcodes, soon)
|
2017-09-26 15:14:45 -03:00 |
Roberto Ierusalimschy
|
abb17cf19b
|
new opcode OP_LOADF (load immediate float)
|
2017-09-19 15:38:14 -03:00 |
Roberto Ierusalimschy
|
80d9b09f35
|
jumps do not close upvalues (to be faster and simpler);
explicit instruction to close upvalues; command 'break' not
handled like a 'goto' (to optimize removal of uneeded 'close'
instructions)
|
2017-09-13 16:50:08 -03:00 |
Roberto Ierusalimschy
|
ac65bab25f
|
jumps in 'for' loops don't need to be signed
|
2017-08-14 15:33:14 -03:00 |
Roberto Ierusalimschy
|
4dff277255
|
coercion string->number in arithmetic operations moved to string
library
|
2017-07-07 13:34:32 -03:00 |
Roberto Ierusalimschy
|
07db10813c
|
'OP_VARARG' has the vararg parameter as an operand
|
2017-06-29 12:38:41 -03:00 |
Roberto Ierusalimschy
|
f96497397a
|
new type 'StackValue' for stack elements
(we may want to put extra info there in the future)
|
2017-06-29 12:06:44 -03:00 |
Roberto Ierusalimschy
|
d13a3fb070
|
detail
(removed empty spaces at the end of lines)
|
2017-06-09 16:16:41 -03:00 |
Roberto Ierusalimschy
|
b029e7ea20
|
macro 'luaV_fastget' may need protection ({}) to be used inside
'if's
|
2017-06-01 17:22:33 -03:00 |
Roberto Ierusalimschy
|
c25380c28d
|
details (using proper version of 'setobj')
|
2017-05-23 09:50:11 -03:00 |
Roberto Ierusalimschy
|
de74289049
|
table field names for dedicated opcodes can be restricted to
small strings for slightly faster access
|
2017-05-18 16:44:19 -03:00 |
Roberto Ierusalimschy
|
92b3deaffa
|
details in OP_CALL + comments
|
2017-05-18 16:34:39 -03:00 |
Roberto Ierusalimschy
|
6d95de83c6
|
no more field 'base' in CallInfo (base is always equal to 'func + 1',
with old/new vararg implementation)
|
2017-05-13 10:54:47 -03:00 |
Roberto Ierusalimschy
|
5c8770f896
|
back to old-style vararg system (with vararg table collecting extra
arguments)
|
2017-05-13 10:04:33 -03:00 |
Roberto Ierusalimschy
|
7647d5d13d
|
revamp of fast track for table access (table set uses the same
macros as table get + new macro for integer keys)
|
2017-05-11 15:57:46 -03:00 |
Roberto Ierusalimschy
|
7184f6343a
|
more integer fast tracks (for OP_LT, OP_LE, OP_SETTABLE, and OP_GETTABLE)
|
2017-05-10 14:32:19 -03:00 |
Roberto Ierusalimschy
|
ab5a650029
|
details (direct access to 'Ck' bit in instructions)
|
2017-05-08 13:08:01 -03:00 |
Roberto Ierusalimschy
|
e8757a73e6
|
'luaV_execute' keeps local copy of program counter and hook mask,
to avoid excessive access to globals.
|
2017-05-05 14:16:11 -03:00 |
Roberto Ierusalimschy
|
2376eb6347
|
barrier for prototype's cache (with new gray list 'protogray' to keep
prototypes to have their caches visited again) + constant 'MAXMISS'
|
2017-05-04 10:32:01 -03:00 |
Roberto Ierusalimschy
|
8634b2a011
|
added 'cachemiss' field to prototype to avoid wasting time checking
hits that fail too often
|
2017-04-30 17:43:26 -03:00 |
Roberto Ierusalimschy
|
502a1d1108
|
new opcodes for table access with constant keys (strings and integers)
|
2017-04-28 17:57:45 -03:00 |
Roberto Ierusalimschy
|
173e41b2eb
|
new opcode OP_ADDI (for immediate integer operand) (Experimental)
|
2017-04-26 14:46:52 -03:00 |
Roberto Ierusalimschy
|
cb3d5dce30
|
opcodes 'OP_GETTABUP'/'OP_SETTABUP' operate only with string keys,
so they can use fast-track table access
|
2017-04-24 17:26:39 -03:00 |
Roberto Ierusalimschy
|
6a98aa0bb0
|
new opcode LOADI (for loading immediate integers)
|
2017-04-20 16:53:55 -03:00 |
Roberto Ierusalimschy
|
a3d36fe283
|
Upvalues collected like everything else (with mark-sweep) instead
of reference count (simpler and better for generational mode)
|
2017-04-11 15:41:09 -03:00 |
Roberto Ierusalimschy
|
2331e1beec
|
small changes in 'luaC_upvalbarrier'
|
2017-04-06 10:08:56 -03:00 |
Roberto Ierusalimschy
|
fd51651684
|
new macro 'vmfetch' to help changing code to computed goto's (macro
abstracts the code to run before each instruction)
|
2016-02-05 17:59:14 -02:00 |
Roberto Ierusalimschy
|
1a44e82200
|
'luaV_fastget' only treats the real fast case (table with a non-nil
value at given key, so that it does not need to check metamethods)
|
2016-01-05 14:07:21 -02:00 |
Roberto Ierusalimschy
|
a272fa66f0
|
bug: Metatable may access its own dealocated field when
it has a self reference in __newindex + some refactoring
|
2016-01-04 14:44:50 -02:00 |
Roberto Ierusalimschy
|
c5112f7b15
|
details (comments)
|
2015-11-23 09:30:45 -02:00 |
Roberto Ierusalimschy
|
d103312661
|
details (typos in comments)
|
2015-11-19 17:16:22 -02:00 |
Roberto Ierusalimschy
|
2e8f8a18e4
|
detail
|
2015-11-17 14:00:28 -02:00 |
Roberto Ierusalimschy
|
9a5d6aedb7
|
trying to optimize a little 'luaD_poscall'
|
2015-11-13 11:24:26 -02:00 |
Roberto Ierusalimschy
|
04587b6256
|
macro with empty argument can be seen as macro with no argument; better
to avoid that
|
2015-11-12 16:08:58 -02:00 |
Roberto Ierusalimschy
|
ff1289a361
|
in 'luaD_call', use two functions instead of one with fixed boolean
argument
|
2015-11-02 16:48:07 -02:00 |
Roberto Ierusalimschy
|
c5363a1b58
|
in 'luaD_precall', in vararg functions, complete missing parameters
only after moving them to final place (avoids checking the stack
again)
|
2015-11-02 12:06:01 -02:00 |
Roberto Ierusalimschy
|
07a2dcacbf
|
flag CIST_REENTRY changed to CIST_FRESH (its negation); fresh invocations
seem to be less frequent than reentries. (So, avoid setting flag on
the frequent case.)
|
2015-11-02 09:43:17 -02:00 |