summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/l-macro-imp-optimize.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/l-macro-imp-optimize.lua')
-rw-r--r--tex/context/base/mkiv/l-macro-imp-optimize.lua62
1 files changed, 62 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/l-macro-imp-optimize.lua b/tex/context/base/mkiv/l-macro-imp-optimize.lua
new file mode 100644
index 000000000..e04b37eab
--- /dev/null
+++ b/tex/context/base/mkiv/l-macro-imp-optimize.lua
@@ -0,0 +1,62 @@
+if not modules then modules = { } end modules ['l-macro-imp-optimize'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- This is for ConTeXt only and used in development. Only in rare cases we
+-- will use this to gain a bit of performance or adapt to specific versions
+-- of Lua.
+
+-- There is no real gain as we hardly use these:
+--
+-- lua.macros.resolvestring [[
+-- #define div(a,b) floor(a/b)
+-- #define mod(a,b) (a % b)
+-- #define odd(a) (a % 2 ~= 0)
+-- #define even(a) (a % 2 == 0)
+-- #define pow(x,y) (x^y)
+-- ]]
+
+if LUAVERSION >= 5.3 and lua.macros then
+
+ -- For the moment we only optimize in Lua 5.3:
+
+ lua.macros.enabled = true
+
+ -- This indirect method makes it possible to use both the functions
+ -- and the inline variant (which often looks better). Also, a mixed
+ -- 5,2 and 5.3 source is not possible because the 5.2 doesn't deal
+ -- with the newer 5.3 syntax.
+
+ -- We need to check for 64 usage: 0xFFFFFFFFFFFFFFFF (-1)
+
+ -- lua.macros.resolvestring [[
+ -- #define band(a,b) (a & b)
+ -- #define bnot(a) (~a & 0xFFFFFFFF)
+ -- #define bor(a,b) ((a | b) & 0xFFFFFFFF)
+ -- #define btest(a,b) ((a & b) ~= 0)
+ -- #define bxor(a,b) ((a ~ b) & 0xFFFFFFFF)
+ -- #define rshift(a,b) ((a & b) ~= 0)
+ -- #define extract(a,b,c) ((a >> b) & ~(-1 << c))
+ -- #define extract(a,b) ((a >> b) & 0x1))
+ -- #define lshift(a,b) ((a << b) & 0xFFFFFFFF)
+ -- #define rshift(a,b) ((a >> b) & 0xFFFFFFFF)
+ -- ]]
+
+ lua.macros.resolvestring [[
+ #define band(a,b) (a&b)
+ #define bnot(a) (~a&0xFFFFFFFF)
+ #define bor(a,b) ((a|b)&0xFFFFFFFF)
+ #define btest(a,b) ((a&b)~=0)
+ #define bxor(a,b) ((a~b)&0xFFFFFFFF)
+ #define rshift(a,b) ((a&b)~=0)
+ #define extract(a,b,c) ((a>>b)&~(-1<<c))
+ #define extract(a,b) ((a>>b)&0x1))
+ #define lshift(a,b) ((a<<b)&0xFFFFFFFF)
+ #define rshift(a,b) ((a>>b)&0xFFFFFFFF)
+ ]]
+
+end