CPU Profiler

This internal page contains the source code for the profiler used for in creating the data in the CPU page (from version 0.2.0 and on), to allow more easily adding & updating information on that page.

It also contains (further below) the results of running this profiler on the last version the CPU page was updated for, to allow more easily determining whether there were any changes in the cycle counts.

You are encouraged to update this page whenever you add to or update the CPU page.

(But note that there is no blind 1:1 correspondence between the output of this program and the information in the CPU page - thinking is required to interpret the results correctly.)

[By the by, it can be enlightening to know that the cycle count is (most likely) not really affected by the pico8 lua source, but by the lua VM bytecode that the source gets compiled into]

TODO: update CPU page from API function results below.

## Profiler code

```
line\_i = 0
paging = false -- set this to true to enable paging

function testme\_calib(name, func, calibrate\_func, ...)
  -- based on https://www.lexaloffle.com/bbs/?pid=60198#p
  local n = 1024

  -- calibrate
  flip()
  local unused -- I am not sure why this helps give better results, but it does, so.

  local x,t=stat(1),stat(2)
  for i=1,n do
    calibrate\_func(...)
  end
  local y,u=stat(1),stat(2)

  -- measure
  for i=1,n do
    func(...)
  end
  local z,v=stat(1),stat(2)

  -- report
  local function c(t0,t1,t2) return(t0+t2-2\*t1)\*128/n\*256/60\*256\*2 end -- \*2 for 0.2.x

  local s=name.." :"
  local lc=c(x-t,y-u,z-v)
  if (lc != 0) s..=" lua="..lc
  local sc=c(t,u,v)
  if (sc != 0) s..=" sys="..sc

  if paging and line\_i == 19 then
    print("press any button") line\_i = 0
    repeat until btn() != 0
  end

  printh(s)
  print(s)
  line\_i += 1
end

function testme(name, func, ...)
  return testme\_calib(name, func, function() end, ...)
end

-- these guys aren't strictly necessary since args are equivalent to locals, but...

function testme\_local\_1(name, func, ...)
  return testme\_calib(name, func, function() local x=1 end, ...)
end

function testme\_local\_1\_2(name, func, ...)
  return testme\_calib(name, func, function() local x,y=1,2 end, ...)
end

-- operators
testme("+", function(x, y) return x + y end, 1, 2)
testme("-", function(x, y) return x - y end, 1, 2)
testme("\*", function(x, y) return x \* y end, 2, 3)
testme("/", function(x, y) return x / y end, 2, 3)
testme("\\", function(x, y) return x \ y end, 2, 3)
testme("%", function(x, y) return x % y end, 2, 3)
testme("&", function(x, y) return x & y end, 2, 3)
testme("|", function(x, y) return x | y end, 2, 3)
testme("^^", function(x, y) return x ^^ y end, 2, 3)
testme("<<", function(x, y) return x << y end, 2, 3)
testme(">>", function(x, y) return x >> y end, 2, 3)
testme(">>>", function(x, y) return x >>> y end, 2, 3)
testme("<<>", function(x, y) return x <<> y end, 2, 3)
testme(">><", function(x, y) return x >>< y end, 2, 3)

testme("unary -", function(x) return -x end, 1)
testme("unary ~", function(x) return ~x end, 1)
testme("unary not", function(x) return not x end, 1)

testme("@", function(x) return @x end, 0)
testme("%", function(x) return %x end, 0)
testme("$", function(x) return $x end, 0)

testme("..0", function(x, y) return x .. y end, "", "")
s16 = "1234567812345678"
testme("..32", function(x, y) return x .. y end, s16, s16)
s16k = s16; for \_i=1,10 do s16k = s16k+s16k end
testme("..32k", function(x, y) return x .. y end, s16k, s16k)

testme("2^3", function(x, y) return x ^ y end, 2, 3)
testme("100^2.5", function(x, y) return x ^ y end, 100, 2.5)
testme("2^14.5", function(x, y) return x ^ y end, 2, 14.5)

testme("<", function(x, y) return x < y end, 1, 5)
testme(">", function(x, y) return x > y end, 1, 5)
testme("<=", function(x, y) return x <= y end, 1, 5)
testme(">=", function(x, y) return x >= y end, 1, 5)
testme("==", function(x, y) return x == y end, 1, 5)
testme("!=", function(x, y) return x != y end, 1, 5)

testme("and:t", function(x, y) return x and y end, 1, 2)
testme("and:f", function(x, y) return x and y end, false, 2)
testme("and+", function(x, y) return (x and y)+1 end, 1, 2)
testme("andand", function(x, y) return (x and y) and y end, 1, 2)
testme("or:t", function(x, y) return x or y end, 1, 2)
testme("or:f", function(x, y) return x or y end, false, 2)
testme("oror", function(x, y) return (x or y) or y end, false, 2)

testme("==and", function(x, y, z, w) return x == y and z end, 1, 1, 2, 2)
testme("and==", function(x, y, z, w) return z and x == y end, 1, 1, 2, 2)
testme("==and==", function(x, y, z, w) return x == y and z == w end, 1, 1, 2, 2)
testme("==and==and==", function(x, y, z, w) return x == y and z == w and x == y end, 1, 1, 2, 2)
testme("====", function(x, y, z) return x == y == z end, 1, 1, 1)

-- statements
g\_x = 1
local up\_x, up\_y = 1, 1

testme("return", function(x) return end, 1) -- if this is 0, this merely means cost of "return" is equivalent to the cost of implicit return, which may yet be non-0 (compare gcall vs primcall for cost)
testme("return 1", function(x) return 1 end, 1)
testme("return 1,2", function(x) return x,x end, 1)
testme("return 1,2,3", function(x) return x,x,x end, 1)
testme("return nil", function() return nil end)
testme("return false", function() return false end)
testme(";", function() ;;; end)
testme("local", function() local x end)
testme("local=init", function() local x=1 end)
testme("local=init+y", function(y) local x=1+y end, 2)
testme("local\*3", function() local x,y,z end)
testme("local\*3=init\*2", function() local x,y,z=1,2 end)
testme("local\*3=init\*3", function() local x,y,z=1,2,3 end)
testme("local\*4", function() local x,y,z,w end)
testme("local\*4=init\*1", function() local x,y,z,w=1 end)
testme("local\*4=init\*4", function() local x,y,z,w=1,2,3,4 end)
testme("return arg", function(x) return x end, 1)
testme("return arg + arg", function(x) return x + x end, 1)
testme\_local\_1("return local", function() local x=1; return x end)
testme\_local\_1("return local + local", function() local x=1; return x + x end)
testme("return global", function() return g\_x end)
testme("return global(new)", function() return g\_x\_NEW end)
testme("return global + global", function() return g\_x + g\_x end)
testme("return upvalue", function() return up\_x end)
testme("return upvalue + upvalue", function() return up\_x + up\_x end)
testme("arg=", function(x) x = 1 end, 1)
testme\_local\_1("local=", function() local x=1; x = 1 end)
testme("global=", function() g\_x = 1 end)
testme("global=global + global", function() g\_x = g\_x + g\_x end)
testme("upvalue=", function() up\_x = 1 end)
testme("upvalue=upvalue + upvalue", function() up\_x = up\_x + up\_x end)
testme\_local\_1("x=x+y", function(y) local x=1; x = x + y end, 3)
testme\_local\_1("x+=y", function(y) local x=1; x += y end, 3)
testme("global+=", function() g\_x += 1 end)
testme\_local\_1("x=y", function(y) local x=1; x = y end, 3)
testme("arg x,y=y,x", function(x,y) x,y = y,x end)
testme\_local\_1\_2("x,y=y,x", function() local x,y=1,2; x,y = y,x end)
testme\_local\_1\_2("x,y=1,2", function() local x,y=1,2; x,y = 1,2 end)
testme\_local\_1\_2("x,x=1,2", function() local x,y=1,2; x,x = 1,2 end)
testme\_local\_1\_2("x,x,x=1,2,3", function() local x,y=1,2; x,x,x = 1,2,3 end)
testme\_local\_1\_2("x,x,x=1+,2+,3+", function() local x,y=1,2; x,x,x = 1+y,2+y,3+y end)
testme\_local\_1\_2("x,x,x=1", function() local x,y=1,2; x,x,x = 1 end)
testme\_local\_1\_2("x,x,x=1,2,3,4", function() local x,y=1,2; x,x,x = 1,2,3,4 end)
testme\_local\_1\_2("x,x,x=1,2,3,4+", function() local x,y=1,2; x,x,x = 1,2,3,4+y end)
testme\_local\_1\_2("x,x,x=1+,2+,3+,4+", function() local x,y=1,2; x,x,x = 1+y,2+y,3+y,4+y end)

-- tables
testme("[i]", function(x) return x[1] end, {1,2,3})
testme("[i](NEW)", function(x) return x[1] end, {})
testme("[k]", function(x) return x['a'] end, {a=1})
testme("[k](NEW)", function(x) return x['a'] end, {})
testme(".x", function(x) return x.y end, {y=2})
testme(".x(NEW)", function(x) return x.y end, {})
testme("[i]=", function(x) x[1]=1 end, {2,3,4})
testme("[i](NEW)=", function(x) x[1]=1 end, {})
testme("[k]=", function(x) x['a']=1 end, {a=2})
testme("[k](NEW)=", function(x) x['a']=1 end, {})
testme(".x=", function(x) x.y=1 end, {y=2})
testme(".x(NEW)=", function(x) x.y=1 end, {})

testme("{}", function(x) return {} end)
testme("{1}", function(x) return {1} end)
testme("{1,2}", function(x) return {1,2} end)
testme("{1..3}", function(x) return {1,2,3} end)
testme("{1..6}", function(x) return {1,2,3,4,5,6} end)
testme("{a}", function(x) return {a=1} end)
testme("{a,b}", function(x) return {a=1,b=2} end)
testme("{a..c}", function(x) return {a=1,b=2,c=3} end)
testme("{a..e}", function(x) return {a=1,b=2,c=3,d=4,e=5} end)
testme("{a..e,1}", function(x) return {a=1,b=2,c=3,d=4,e=5,1} end)
testme("{a..e,1..4}", function(x) return {a=1,b=2,c=3,d=4,e=5,1,2,3,4} end)

testme("{1+2}", function(x) return {1+2} end)

testme("#", function(x) return #x end, {1,2,3})

-- functions
gcall = function() end
local upcall = function() end

testme("func", function() return function() end end)
testme("func<up>", function(x) return function() return x end end)
testme("func<upup>", function(x) return function() return g\_up end end)
testme("func<\_env>", function(x) return function() return sin end end)

testme("call()", function(f) f() end, function() end)
testme("call(1)", function(f) f(1) end, function() end)
testme("call(1,2)", function(f) f(1,2) end, function() end)
testme("call(1..5)", function(f) f(1,2,3,4,5) end, function() end)
testme("gcall()", function() gcall() end)
testme("gcall(1)", function() gcall(1) end)
testme("gcall(1,2)", function() gcall(1,2) end)
testme("gcall(1..5)", function() gcall(1,2,3,4,5) end)
testme("upcall()", function() upcall() end)
testme("upcall(1)", function() upcall(1) end)
testme("upcall(1,2)", function() upcall(1,2) end)
testme("upcall(1..5)", function() upcall(1,2,3,4,5) end)
testme("primcall()", function() min() end)
testme("primcall(1)", function() min(1) end)
testme("primcall(1,2)", function() min(1,2) end)
testme("primcall(1..5)", function() min(1,2,3,4,5) end)

testme("call(1+2)", function(f) f(1+2) end, function() end)
testme("call(1==2)", function(f) f(1==2) end, function() end)
testme("call(call())", function(f) f(f()) end, function() end)

-- complex statements
testme("if:t", function(x) if x then end end, true)
testme("if:f", function(x) if x then end end, false)
testme("if==", function(x) if x==x then end end, false)
testme("if!=", function(x) if x!=x then end end, false)
testme("ifel", function(x) if x then elseif x then end end, false)
testme("ifelelse", function(x) if x then elseif x then else end end, false)
testme("while:f", function(x) while x do end end, false)
testme("while<=:f", function(x) while x<=0 do end end, 1)
testme\_local\_1("while<0>,+=", function() local x=1; while x<=0 do x+=1 end end) -- don't forget to discount the x+=1
testme\_local\_1("while<1>,+=", function() local x=1; while x<=1 do x+=1 end end)
testme\_local\_1("while<2>,+=", function() local x=1; while x<=2 do x+=1 end end)
testme\_local\_1("while<5>,+=", function() local x=1; while x<=5 do x+=1 end end)
testme\_local\_1("while<10>,+=", function() local x=1; while x<=10 do x+=1 end end)
testme("for<n:0>", function() for i=1,0 do end end)
testme("for<n:1>", function() for i=1,1 do end end)
testme("for<n:2>", function() for i=1,2 do end end)
testme("for<n:5>", function() for i=1,5 do end end)
testme("for<n:10>", function() for i=1,10 do end end)
-- TODO: non-numeric for!
testme("do", function() do end end)

-- misc
local meta = {\_\_add=function() end,\_\_index=function() end,\_\_newindex=function() end}
setmetatable(meta, meta)
testme("+meta", function(x) return x+x end, meta)
testme(".idx.meta", function(x) return x.a end, meta)
testme(".newidx.meta", function(x) x.a = 3 end, meta)

-- funcs

testme("abs", function() abs(123) end)
testme("add", function(x) add(x, 1) end, {1,2,3,4,5,6,7,8})
testme("add\_i5", function(x) add(x, 1, 4) end, {1,2,3,4,5,6,7,8})
testme("add\_i8", function(x) add(x, 1, 1) end, {1,2,3,4,5,6,7,8})
testme("add\_i2", function(x) add(x, 1, 1) end, {1,2})
testme("add\_i0", function(x) add(x, 1, 3) end, {1,2})
testme("all", function(x) all(x) end, {1,2,3,4,5,6,7,8})
testme("all:step", function(f,s,v) f(s,v) end, all({1,2,3,4,5,6,7,8}))
testme("assert", function() assert(true) end)
testme("assert\_1", function() assert(true, "bla") end)
testme("atan2", function() abs(123,456) end)

testme("band", function() band(4,5) end)
testme("bnot", function() bnot(3) end)
testme("bor", function() bor(3,4) end)
testme("bxor", function() bxor(3,4) end)

testme("ceil", function() ceil(3.2) end)
testme("chr", function() chr(3) end)
testme("chr4", function() chr(3,20,23,24) end)
testme("chr8", function() chr(3,20,23,24,1,2,3,4) end)
testme("cocreate", function(f) cocreate(f) end, function() end)
coco = cocreate(function() end)
testme("coresume\_t", function(c) coresume(c) end, coco)
testme("coresume\_f", function(c) coresume(c) end, coco)
testme("cos", function() cos(3.2) end)
testme("costatus", function(c) costatus(c) end, coco)
testme("count\_3", function(x) count(x) end, {1,2,3})
testme("count\_6", function(x) count(x) end, {1,2,3,4,5,6})
testme("count\_v3", function(x) count(x,1) end, {1,2,3})
testme("count\_v6", function(x) count(x,1) end, {1,2,3})

testme("del\_1", function(x) del(x, 6) end, {1,2,3,4,5,6})
testme("del\_4", function(x) del(x, 3) end, {1,2,3,4,5,6})
testme("del\_6", function(x) del(x, 1) end, {1,2,3,4,5,6})
testme("del\_0", function(x) del(x, 0) end, {1,2,3,4,5,6})
testme("deli\_1", function(x) deli(x, 6) end, {1,2,3,4,5,6})
testme("deli\_4", function(x) deli(x, 3) end, {1,2,3,4,5,6})
testme("deli\_6", function(x) deli(x, 1) end, {1,2,3,4,5,6})

testme("flr", function() flr(1.4) end)
testme("foreach\_3", function(x,f) foreach(x,f) end, {1,2,3}, function() end)
testme("foreach\_5", function(x,f) foreach(x,f) end, {1,2,3,4,5}, function() end)

testme("getmetatable", function(x) getmetatable(x) end, {1,2,3})

testme("ipairs", function(x) ipairs(x) end, {1,2,3,4,5,6,7,8})
testme("ipairs:step", function(f,s,v) f(s,v) end, ipairs({1,2,3,4,5,6,7,8}))

testme("lshr", function() lshr(1,3) end)

testme("max", function() max(3,4) end)
testme("max0", function() max(3) end)
testme("memcpy\_10", function() memcpy(0, 10, 10) end)
testme("memcpy\_100", function() memcpy(0, 10, 100) end)
testme("memcpy\_1000", function() memcpy(0, 10, 1000) end)
testme("memset\_10", function() memset(0, 10, 10) end)
testme("memset\_100", function() memset(0, 10, 100) end)
testme("memset\_1000", function() memset(0, 10, 1000) end)
testme("mid", function() mid(3,4,5) end)
testme("min", function() min(3,4) end)
testme("min0", function() min(3) end)

testme("next", function(x) next(x) end, {1,2,3,4})
testme("next\_", function(x) next(x,3) end, {1,2,3,4})

testme("ord", function() ord("a") end)
testme("ord\_i", function() ord("abcdefg", 4) end)

testme("pack\_0", function() pack() end)
testme("pack\_1", function() pack(1) end)
testme("pack\_4", function() pack(1,2,3,4) end)
testme("pairs", function(x) pairs(x) end, {1,2,3,4,5,6,7,8})
testme("pairs:step", function(f,s,v) f(s,v) end, pairs({1,2,3,4,5,6,7,8}))
testme("peek", function() peek(0) end)
testme("peek2", function() peek2(0) end)
testme("peek4", function() peek4(0) end)
testme("poke", function() poke(0,0) end)
testme("poke2", function() poke2(0,0) end)
testme("poke4", function() poke4(0,0) end)

testme("rawequal", function(x,y) rawequal(x,y) end, {}, {})
testme("rawget", function(x) rawget(x,1) end, {})
testme("rawlen", function(x) rawlen(x) end, {})
testme("rawset", function(x) rawset(x,1,2) end, {})
testme("rnd", function(x) rnd() end)
testme("rnd\_v", function(x) rnd(100) end)
testme("rotl", function() rotl(1,2) end)
testme("rotr", function() rotr(1,2) end)

testme("select\_5\_1", function(...) select(1, ...) end, 1,2,3,4,5)
testme("select\_10\_5", function(...) select(5, ...) end, 1,2,3,4,5,6,7,8,9,10)
testme("select\_5\_#", function(...) select('#', ...) end, 1,2,3,4,5)
testme("setmetatable", function(x,y) setmetatable(x,y) end, {}, {})
testme("sgn", function() sgn(3) end)
testme("shl", function() shl(1,2) end)
testme("shr", function() shr(1,2) end)
testme("sin", function() sin(5) end)
testme("split\_0", function() split("123\_456\_789", ";") end)
testme("split\_2", function() split("123\_456\_789", "5") end)
testme("split\_3", function() split("123\_456\_789", "\_") end)
testme("split\_3\_num", function() split("123\_456\_789", "\_", true) end)
testme("split\_6", function() split("123\_456\_789\_123\_456\_789123456", "\_") end)
testme("sqrt", function() sqrt(1234) end)
testme("sub\_3", function() sub("123\_456\_789", 1, 3) end)
testme("sub\_11", function() sub("123\_456\_789", 1) end)
testme("sub\_4", function() sub("123\_456\_789", 7) end)
testme("sub\_1", function() sub("123\_456\_789", 5,5) end)

testme("tonum\_1", function() tonum("0") end)
testme("tonum\_2", function() tonum("-4") end)
testme("tonum\_3", function() tonum("123") end)
testme("tonum\_5", function() tonum("55555") end)
testme("tonum\_x", function() tonum("x") end)
testme("tostr\_1", function() tostr(0) end)
testme("tostr\_2", function() tostr(-4) end)
testme("tostr\_3", function() tostr(123) end)
testme("tostr\_5", function() tostr(55555) end)
testme("tostr\_x1", function() tostr(1,true) end)
testme("tostr\_x5", function() tostr(55555,true) end)
testme("type", function() type(1) end)

testme("unpack\_1", function(t) unpack(t) end, {1})
testme("unpack\_3", function(t) unpack(t,5,7) end, {1,2,3,4,5,6,7,8,9,10})
testme("unpack\_10", function(t) unpack(t) end, {1,2,3,4,5,6,7,8,9,10})

testme("band\_#0", function() band() end)
testme("band\_#1", function() band(0) end)
testme("band\_#3", function() band(0,0,0) end)

```

## Results:

These results are for v0.2.4b.

```
+ : lua=1
- : lua=1
* : lua=2
/ : lua=2
\ : lua=2
% : lua=2
& : lua=1
^^ : lua=1
<< : lua=1
>> : lua=1
>>> : lua=1
<<> : lua=1
>>< : lua=1
unary - : lua=1
unary ~ : lua=1
unary not : lua=2
@ : lua=1
% : lua=1
$ : lua=1
..0 : lua=4
..32 : lua=4
..32k : lua=4
2^3 : lua=2 sys=16
100^2.5 : lua=2 sys=32
2^14.5 : lua=2 sys=32
< : lua=4
> : lua=4
<= : lua=4
>= : lua=4
== : lua=4
!= : lua=4
and:t : lua=3
and:f : lua=2
and+ : lua=4
andand : lua=5
or:t : lua=2
or:f : lua=3
oror : lua=4
==and : lua=5
and== : lua=6
==and== : lua=6
==and==and== : lua=8
==== : lua=8
return :
return 1 : lua=1
return 1,2 : lua=2
return 1,2,3 : lua=3
return nil : lua=2
return false : lua=2
; :
local : lua=2
local=init : lua=1
local=init+y : lua=1
local*3 : lua=2
local*3=init*2 : lua=4
local*3=init*3 : lua=3
local*4 : lua=2
local*4=init*1 : lua=3
local*4=init*4 : lua=4
return arg :
return arg + arg : lua=1
return local :
return local + local : lua=1
return global : lua=2
return global(new) : lua=2
return global + global : lua=5
return upvalue : lua=2
return upvalue + upvalue : lua=5
arg= : lua=1
local= : lua=1
global= : lua=2
global=global + global : lua=7
upvalue= : lua=3
upvalue=upvalue + upvalue : lua=7
x=x+y : lua=1
x+=y : lua=1
global+= : lua=5
x=y : lua=1
arg x,y=y,x : lua=3
x,y=y,x : lua=3
x,y=1,2 : lua=3
x,x=1,2 : lua=3
x,x,x=1,2,3 : lua=5
x,x,x=1+,2+,3+ : lua=5
x,x,x=1 : lua=6
x,x,x=1,2,3,4 : lua=7
x,x,x=1,2,3,4+ : lua=7
x,x,x=1+,2+,3+,4+ : lua=7
[i] : lua=2
[i](NEW) : lua=2
[k] : lua=2
[k](NEW) : lua=2
.x : lua=2
.x(NEW) : lua=2
[i]= : lua=2
[i](NEW)= : lua=2
[k]= : lua=2
[k](NEW)= : lua=2
.x= : lua=2
.x(NEW)= : lua=2
{} : lua=2
{1} : lua=5
{1,2} : lua=6
{1..3} : lua=7
{1..6} : lua=10
{a} : lua=4
{a,b} : lua=6
{a..c} : lua=8
{a..e} : lua=12
{a..e,1} : lua=15
{a..e,1..4} : lua=18
{1+2} : lua=5
# : lua=2
func : lua=2
func<up> : lua=2
func<upup> : lua=2
func<_env> : lua=2
call() : lua=5
call(1) : lua=6
call(1,2) : lua=7
call(1..5) : lua=10
gcall() : lua=6
gcall(1) : lua=7
gcall(1,2) : lua=8
gcall(1..5) : lua=11
upcall() : lua=6
upcall(1) : lua=7
upcall(1,2) : lua=8
upcall(1..5) : lua=11
primcall() : lua=4
primcall(1) : lua=5
primcall(1,2) : lua=6
primcall(1..5) : lua=9
call(1+2) : lua=6
call(1==2) : lua=9
call(call()) : lua=10
if:t : lua=2
if:f : lua=2
if== : lua=2
if!= : lua=2
ifel : lua=4
ifelelse : lua=4
while:f : lua=2
while<=:f : lua=2
while<0>,+= : lua=2
while<1>,+= : lua=7
while<2>,+= : lua=12
while<5>,+= : lua=27
while<10>,+= : lua=52
for<n:0> : lua=7
for<n:1> : lua=9
for<n:2> : lua=11
for<n:5> : lua=17
for<n:10> : lua=27
do :
+meta : lua=3
.idx.meta : lua=4
.newidx.meta : lua=4
abs : lua=5
add : lua=6
add_i5 : lua=7 sys=1033
add_i8 : lua=7 sys=1039
add_i2 : lua=7 sys=1027
add_i0 : lua=7 sys=1023
all : lua=13
all:step : lua=12.9297
assert : lua=6
assert_1 : lua=7
atan2 : lua=6
band : lua=4
bnot : lua=4
bor : lua=4
bxor : lua=4
ceil : lua=4
chr : lua=5 sys=2
chr4 : lua=8 sys=8
chr8 : lua=12 sys=16
cocreate : lua=5
coresume_t : lua=32
coresume_f : lua=32
cos : lua=5
costatus : lua=5
count_3 : lua=5 sys=2
count_6 : lua=5 sys=2
count_v3 : lua=6 sys=6
count_v6 : lua=6 sys=6
del_1 : lua=6 sys=10
del_4 : lua=6 sys=10
del_6 : lua=6 sys=10
del_0 : lua=6 sys=12
deli_1 : lua=6
deli_4 : lua=6
deli_6 : lua=6
flr : lua=4
foreach_3 : lua=62
foreach_5 : lua=74
getmetatable : lua=5
ipairs : lua=14
ipairs:step : lua=5
lshr : lua=4
max : lua=6
max0 : lua=5
memcpy_10 : lua=7 sys=4
memcpy_100 : lua=7 sys=50
memcpy_1000 : lua=7 sys=500
memset_10 : lua=7 sys=4
memset_100 : lua=7 sys=50
memset_1000 : lua=7 sys=500
mid : lua=7
min : lua=6
min0 : lua=5
next : lua=5
next_ : lua=6
ord : lua=5 sys=2
ord_i : lua=6 sys=2
pack_0 : lua=4 sys=2
pack_1 : lua=5 sys=4
pack_4 : lua=8 sys=16
pairs : lua=14
pairs:step : lua=5
peek : lua=3 sys=2
peek2 : lua=3 sys=2
peek4 : lua=3 sys=2
poke : lua=4 sys=2
poke2 : lua=4 sys=2
poke4 : lua=4 sys=2
rawequal : lua=6
rawget : lua=6
rawlen : lua=5
rawset : lua=7
rnd : lua=4 sys=8
rnd_v : lua=5 sys=8
rotl : lua=4
rotr : lua=4
select_5_1 : lua=7
select_10_5 : lua=7
select_5_# : lua=7
setmetatable : lua=6
sgn : lua=5
shl : lua=4
shr : lua=4
sin : lua=5
split_0 : lua=6 sys=22
split_2 : lua=6 sys=22
split_3 : lua=6 sys=22
split_3_num : lua=8 sys=22
split_6 : lua=6 sys=58
sqrt : lua=5 sys=28
sub_3 : lua=7 sys=2
sub_11 : lua=6 sys=10
sub_4 : lua=6 sys=4
sub_1 : lua=7 sys=2
tonum_1 : lua=5 sys=4
tonum_2 : lua=5 sys=4
tonum_3 : lua=5 sys=4
tonum_5 : lua=5 sys=4
tonum_x : lua=5 sys=4
tostr_1 : lua=41 sys=4
tostr_2 : lua=41 sys=4
tostr_3 : lua=41 sys=4
tostr_5 : lua=41 sys=4
tostr_x1 : lua=43 sys=4
tostr_x5 : lua=43 sys=4
type : lua=5
unpack_1 : lua=5 sys=4
unpack_3 : lua=7 sys=12
unpack_10 : lua=5 sys=40
band_#0 : lua=4
band_#1 : lua=4
band_#3 : lua=4

```