Owen Yamauchi 5978586214 Import VIXL, an ARMv8 assembler/disassembler/simulator
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.
2013-07-24 10:35:46 -07:00
2013-06-13 12:13:09 -07:00
2013-07-23 16:42:21 -07:00
2010-02-19 18:02:34 -08:00
2010-02-19 18:02:34 -08:00
2013-06-04 18:01:44 -07:00

HipHop VM for PHP Build Status

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.

S
Descrição
Descrição não fornecida
Readme 99 MiB
Linguagens
C++ 59.4%
PHP 34.1%
C 4.1%
Hack 1.4%
CMake 0.3%
Outra 0.6%