Commit Graph

1968 Commits

Author SHA1 Message Date
Michael Munday
5c697cc772 Fix ffi calls returning structs. 2017-01-11 12:13:59 -05:00
Michael Munday
f660d36138 Fix ffi calls with complex parameters. 2017-01-11 12:13:52 -05:00
Michael Munday
938f964b6a Fix single-precision floating point parameters passed on stack.
The opposite way round to the registers for some reason.
2017-01-10 16:56:43 -05:00
Michael Munday
86a24eac4a Various fixes for FFI calls.
Fixes the following scenarios:
 * Returning floating point value.
 * More than 4 GPR arguments.
2017-01-10 16:11:30 -05:00
Michael Munday
e933353feb Use execute rather than loop for mvc and avoid jumps in fast path.
Not sure if this works, the tests don't exercise the stack code.
2017-01-10 14:12:06 -05:00
Michael Munday
660ddd1db2 Replace some instruction sequences with their SI equivalents. 2017-01-10 12:52:45 -05:00
Michael Munday
55af819e97 Remove TODO. 2017-01-10 12:04:17 -05:00
Michael Munday
102d848577 Minor instruction changes. 2017-01-10 11:58:24 -05:00
Michael Munday
d44390a2d3 Use tm{,y} instructions where possible. 2017-01-10 11:44:27 -05:00
Michael Munday
a8562b7f34 Allow displacements to be used directly without register values.
Allows sllg r1, r1, 3(r0,r0) to be written as sllg r1, r1, 3.
2017-01-10 10:50:41 -05:00
Michael Munday
dae61f59d6 Delete some unused function stubs. 2017-01-09 15:57:37 -05:00
Michael Munday
4c738134df Improve ins_NEXT performance.
Prioritise critical path and reduce number of instructions. About
10% improvement on md5 benchmark.
2017-01-09 14:16:44 -05:00
Michael Munday
99b3668995 Add stub dis_s390x.lua file to allow make install to work. 2017-01-09 11:20:13 -05:00
Michael Munday
bb98985db3 Add partial FFI support.
Interestingly, enough to pass all the FFI tests. So s390x now
passes all the tests in LuaJIT-test-cleanup.
2017-01-06 16:19:56 -05:00
Michael Munday
5dec8c2211 Fix vm_tsetr (needed by table.remove).
The A argument was being loaded as 2-bytes instead of 1.
2017-01-06 13:54:28 -05:00
Michael Munday
ed2d43d73c Fix VARG. 2017-01-06 11:47:56 -05:00
Michael Munday
2e05e7ca67 Implement math.floor/math.ceil. 2017-01-06 11:16:33 -05:00
Michael Munday
a3501b062d Various fixes for coroutines.
Now passing the tests.
2017-01-05 23:39:25 -05:00
Michael Munday
d90293f55e Implement coroutines.
TODO: delete LREG, caused problems while implementing this (x64
doesn't have LREG).
2017-01-05 23:39:25 -05:00
Michael Munday
60fb35cb68 Implement rawget. 2017-01-05 23:39:25 -05:00
Michael Munday
1b16e7ce3c Fix math.pow.
The second floating point argument is placed into f2, not f1.
Use the macros FARG{1,2} instead of using the registers directly.
2017-01-05 10:52:27 -05:00
Michael Munday
dfb95646f8 Implement call_tail. 2017-01-04 16:05:55 -05:00
Michael Munday
faef0fb092 Fix for __newindex metamethod. 2017-01-04 15:54:21 -05:00
Michael Munday
80191dcab7 Implement cont_cat.
Required to pass cat tests.
2017-01-04 15:34:30 -05:00
Michael Munday
e598c067c3 Fixes for negative string.sub arguments and __index metamethod calls. 2017-01-04 14:50:19 -05:00
Michael Munday
705784a4f9 Implement math.min and math.max.
Replicates the standard Lua behaviour in the presence of NaNs.
2017-01-04 11:48:07 -05:00
Michael Munday
86e5e57f4c Add emptystr implementation and stub out co-routine functions. 2017-01-03 16:44:36 -05:00
Michael Munday
e739ffedce Implement string.byte and string.char. 2017-01-03 16:36:34 -05:00
Michael Munday
65af21e2ed Implement more math functions.
Everything apart from min/max should now be working.
2017-01-03 16:12:22 -05:00
Michael Munday
8e747c5406 Implement metamethod support.
Allows metamethod tables to be get and set.
2017-01-03 12:17:34 -05:00
niravthakkar
d02e076507 Minor fix, for arguments in shift operations 2017-01-03 15:55:25 +05:30
Michael Munday
39c37a1a1a Remove debug code from tostring. 2016-12-30 16:33:35 -05:00
Michael Munday
4f1c4dc514 Implement pairs (including ISNEXT and ITERN).
Allows use of the pairs iterator, for example:

t = { alpha = 1, beta = 2 }
for k,v in pairs(t)
  print(k, v)
end

-- prints:
-- alpha	1
-- beta	2
2016-12-30 14:51:30 -05:00
Michael Munday
6fbe356507 Implement USETN, USETP and USETS.
Allows constant numbers, primitives (nil, true, false) and strings
to be assigned to upvalues in closures.
2016-12-30 13:33:31 -05:00
Michael Munday
a5d9604419 Implement USETV.
Allows upvalues to be set in closures, for example:

function f(x)
  local y = x
  local j = function(z)
    y = y + z
  end
  for i=1,3 do
    j(i)
    print(y)
  end
end

f(2) -- prints: 3 5 8
2016-12-30 13:00:38 -05:00
Michael Munday
21073df0dc Add FORL implementation (just fallthrough). 2016-12-30 12:27:08 -05:00
Michael Munday
5e7121c625 Implement ipairs.
Allows the use of the ipairs iterator, for example:

t = { "i", "robot" }
for i,v in ipairs(t) do
  print(i, v)
end
-- prints:
-- 1	i
-- 2	robot
2016-12-30 11:40:39 -05:00
Michael Munday
21f2fdfab2 Partially implement ipairs.
Still need to handle ipairs_aux.
2016-12-29 17:37:11 -05:00
Michael Munday
e6eb12b268 Implement bit operations.
See http://bitop.luajit.org/api.html for more information.

Bytecode listing is now supported, for example:

$ ./luajit -bl -e 'a=1'
-- BYTECODE -- "a=1":0-1
0001    KSHORT   0   1
0002    GSET     0   0      ; "a"
0003    RET0     0   1
2016-12-29 15:07:51 -05:00
Michael Munday
e8ca7b8799 Implement CAT.
Allows the use of the '..' operator, for example:

x = "hello"
y = " "
z = "world!"
print(x..y..z) -- prints 'hello world!'
2016-12-29 11:23:45 -05:00
Michael Munday
29223bb979 Implement POW.
Allows use of the '^' operator, for example:

x = 2
y = 3
print(x ^ y) -- prints 8
2016-12-29 11:10:18 -05:00
Michael Munday
230a4aa424 Implement KNIL and CALLMT. 2016-12-28 17:55:10 -05:00
Michael Munday
2584c6d5a8 Implement ISNUM, ISTYPE, TGETR and TSETR. 2016-12-28 17:01:09 -05:00
Michael Munday
5dc644ad89 Implement LOOP.
Allows for while and repeat loops, for example:

x = 0
while x < 5 do
  print(x)
  x = x + 1
end

-- prints:
-- 0
-- 1
-- 2
-- 3
-- 4
2016-12-28 14:13:08 -05:00
Michael Munday
6673652fd9 Implement TSETM and VARG.
Allows varargs to be used, for example:

function sel(n, ...)
  local arg = {...}
  return arg[n]
end

print(sel(2, 3, 4, 5)) -- prints 4
2016-12-28 13:21:06 -05:00
Michael Munday
aba9cfb2a8 Implement UGET.
Allows simple closures, for example:

function f(x)
  return function() return x end
end

y = f(1)
print(y()) -- prints 1
2016-12-28 10:58:45 -05:00
Michael Munday
354b5c748b Implement a UCLO, ff_assert and a couple of other bits.
Needed to get -bl working, still more to do though.
2016-12-22 15:40:25 -05:00
Michael Munday
077ccc8658 Implement LEN.
Enables length of tables and strings to be taken, for example:

t = "hello"
print(#t) -- prints 5
t = {1,2}
print(#t) -- prints 2
2016-12-22 14:59:37 -05:00
Michael Munday
c0c155e45e Implement/fix TGETS and TSETS.
Allows string keys in tables, for example:

t = {}
t["hello"] = 1
print(t["hello"]) -- prints 1
2016-12-22 14:40:31 -05:00
Michael Munday
cab03375f1 Implement TGETV and TSETV.
Allows table entries to be get and set using variables, for example:

t = {4,5}
i = 1
print(t[i]) -- prints 4
t[i] = 3
print(t[i]) -- prints 3
2016-12-22 14:20:47 -05:00