dev-master
9999999-dev https://github.com/krakjoe/jitfuStubs and sources for JITFu
PHP License
by Joe Watkins
jit
dev-PHP5
dev-PHP5 https://github.com/krakjoe/jitfuStubs and sources for JITFu
PHP License
by Joe Watkins
jit
Wallogit.com
2017 © Pedro Peláez
Stubs and sources for JITFu
A lesson in the art of JoeJITFu!, (*2)
JIT-Fu is a PHP extension that exposes an OO API for the creation of native instructions to PHP userland, using libjit., (*3)
, (*4)
Disclaimer: the elephpant above is an artists rendition, the actual animal may or may not exist ..., (*5)
Because apparently, that's super important ..., (*6)
doIf(
$this->doEq($args[0], $zero),
function() use ($zero) {
$this->doReturn($zero);
}
);
/* if ($arg == 1) return 1; */
$this->doIf(
$this->doEq($args[0], $one),
function() use($one) {
$this->doReturn($one);
}
);
/* return $function($arg-1) + $function($arg-2); */
$this->doReturn(
$this->doAdd(
$this->doCall($this, [$this->doSub($args[0], $one)]),
$this->doCall($this, [$this->doSub($args[0], $two)])));
});
if (stripos('win', PHP_OS) !== 0) {
$function->dump("Fibonacci");
}
var_dump($function(40)); /* __invoke with magicalness */
?>
The code above will yield something like the following output on Linux:, (*7)
[joe@localhost jit]$ time php -dextension=jitfu.so objects.php
function Fibonacci(i1 : int) : int
incoming_reg(i1, rdi)
.L:
i6 = i1 == 0
if i1 != 0 then goto .L0
.L:
return_int(0)
ends_in_dead
.L0:
i7 = i1 == 1
if i1 != 1 then goto .L1
.L:
return_int(1)
ends_in_dead
.L1:
i8 = i1 - 1
outgoing_reg(i8, rdi)
call 0x08215dfd0
.L:
return_reg(i10, rax)
i12 = i1 - 2
outgoing_reg(i12, rdi)
call 0x08215dfd0
.L:
return_reg(i14, rax)
i15 = i10 + i14
return_int(i15)
ends_in_dead
.L:
.L:
end
int(102334155)
real 0m1.001s
user 0m0.997s
sys 0m0.003s
On my machine, this is ~60 times faster than PHP., (*8)
This library is not useful for compiling Zend opcodes, (*9)
This extension is being developed against the latest libjit sources, it is advisable to install a fresh copy of libjit even if the system has one present:, (*10)
git clone git://git.sv.gnu.org/libjit.git cd libjit ./auto_gen.sh ./configure --prefix=/opt make sudo make install
Now you can build the PHP extension:, (*11)
git clone https://github.com/krakjoe/jitfu cd jitfu phpize ./configure --with-jitfu=/opt make sudo make install
The example sessions above will result in a build of libjit and JIT-Fu, (*12)
Snapshots of the master branch are built at 1-2 AM UTC on Mondays. Currently only VC11 x86 builds against PHP 5.5 and 5.6 are available, these should work with the packages that can be downloaded from windows.php.net. The bundled libjit is built as an self-contained binary with MinGW from a patched version of the master branch., (*13)
php_jitfu.dll in your configured extension_dir.libjit.dll in a directory that appears in your %PATH%.Note: The dump() methods are currently unavailable on Windows. Calling these methods on Windows will result in a JITFU\Exception being thrown., (*14)
Stubs and sources for JITFu
PHP License
jit
Stubs and sources for JITFu
PHP License
jit