This diff is intended primarily as a medium for everyone to look at and discuss the code I'm planning to use as our ARMv8 in-memory assembler and simulator. This is what I was about to spend weeks and weeks writing myself, but thankfully ARM has done all that for us! To get an idea of what it looks like to use VIXL, look at test-assembler-a64.cc, at lines that begin with "__". Superficially, it looks very similar to clients of X64Assembler. Things like x0, w1, etc. are registers. "Operand" is a struct that encapsulates some of the extra stuff tacked on to ARMv8 instructions -- e.g. when comparing against an immediate, you can include a left-shift amount for the immediate, and it will look like "Operand(x1, LSL, 1)" or similar. The simulator is similarly easy to use. You set initial register values, give it an instruction pointer, and say go. It runs until it hits a ret instruction that takes it out of the top level, and then you can read register values out of it. It can access memory just like native code can. VIXL includes its own abstraction for registers, and it's structurally quite similar to our PhysReg. (It's defined in assembler-a64.h.) One of the most nontrivial parts of this effort will be to figure out how to unify these two abstractions. The instruction coverage is internally consistent (i.e. the simulator and disassembler can deal with any instruction the assembler can output) and is almost certainly enough for our needs. Even if it's not, the code is pretty clean, and it won't be hard to add whatever we need. The big thing I'm not yet sure about is the implementation of nonlocal jumps. The usage examples that come with VIXL (but I'm not including here; see the original github) use jumps, but only within the small snippets they emit. There's nothing that resembles our jumps between a and astubs. This might be something we have to hack in, but it shouldn't be too hard. The one potentially tricky part will be to support jump smashing. If we have to encode a jump as multiple instructions, we won't be able to smash it atomically. The only viable alternative I can think of is to have a "jump target table" on the side, emit an indirect jump in code, and smash the table entries instead of the code. The open-source distribution of VIXL is built with scons, but it was near-trivial to get it building with our internal system. To build the library, I just had to change the include paths. To build the tests, I deleted the custom test driver that came with VIXL and converted the test files themselves to use gtest. This was mostly a matter of tweaking the macros to use gtest asserts. I also fixed lint errors (NULL -> nullptr, include ordering, static at namespace scope, ...) About licensing. The code is under a 3-clause BSD license, and the license header is preserved in all the files I pulled in. Pulled from https://github.com/armvixl/vixl at ad96eda894.
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.