While debugging a sandbox crash, I spent some time looking at a huge sequnce of conditional masks, compares and branches that didnt seem to belong in the code I was debugging. Finally realized that it was a reffiness check. It looked way too complicated, so I investigated. Part of the problem was that we were avoiding a malloc in the case of a zero param function at the expense of an extra check. Instead, this diff always sets up at least 64 bits worth of m_refBitVec. But by using the space set aside for the pointer in Func::m_shared it avoids a malloc for any function with fewer than 65 arguments, and avoids the numParams check for the first 64 parameters. In addition, the existing code was spitting out a generic test for the guard condition - (mask & bits) == value - where mask and value are known constants. Since the most common case is that value == 0 (all the parameters are expected to be by value), we can usually omit the compare. In addition, since most functions only have a small number of parameters, we can usually get away with 8 bit, or 32 bit operations. The result is that for a typical function (fewer than 64 args, args expected to be by value) the reffiness guard is now test <mask>, Func::m_refBitVec[0] jne exit Rather than: move <mask>, reg1 xor reg2, reg2 cmp 1, Func::m_numParams jnl ok test AttrVarArgs, Func::m_attrs jne exit jmp done ok: load reg3, Func::m_refBitVec[0] and mask, reg3 cmp reg3, reg2 jne exit done:
HipHop VM for PHP 
HipHop VM (HHVM) is a new open-source virtual machine designed for executing programs written in PHP. HHVM uses a just-in-time compilation approach to achieve superior performance while maintaining the flexibility that PHP developers are accustomed to. HipHop VM (and before it HPHPc) has realized > 5x increase in throughput for Facebook compared with Zend PHP 5.2.
HipHop is most commonly run as a standalone server, replacing both Apache and modphp.
Installing
You can install a prebuilt package or compile from source.
Running
You can run standalone programs just by passing them to hhvm: hhvm my_script.php.
HipHop bundles in a webserver. So if you want to run on port 80 in the current directory:
sudo hhvm -m server
For anything more complicated, you'll want to make a config.hdf and run sudo hhvm -m server -c config.hdf.
Contributing
We'd love to have your help in making HipHop better. If you run into problems, please open an issue, or better yet, fork us and send a pull request. Join us on #hhvm on freenode.
If you want to help but don't know where to start, try fixing some of the Zend tests that don't pass. You can run them with hphp/test/run. When they work, move them to zend/good and send a pull request.
Before changes can be accepted a Contributors Licensing Agreement (pdf - print, sign, scan, link) must be signed.
Licence
HipHop VM is licensed under the PHP and Zend licenses except as otherwise noted.