2 +----------------------------------------------------------------------+
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-2014 Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
17 #ifndef incl_HPHP_VM_CODEGENHELPERS_H_
18 #define incl_HPHP_VM_CODEGENHELPERS_H_
20 #include "hphp/runtime/vm/jit/type.h"
21 #include "hphp/runtime/vm/jit/phys-reg.h"
22 #include "hphp/runtime/vm/jit/vasm-x64.h"
23 #include "hphp/util/abi-cxx.h"
25 namespace HPHP
{ namespace jit
{
28 * SaveFP uses rVmFp, as usual. SavePC requires the caller to have
29 * placed the PC offset of the instruction about to be executed in
32 enum class RegSaveFlags
{
37 inline RegSaveFlags
operator|(const RegSaveFlags
& l
, const RegSaveFlags
& r
) {
38 return RegSaveFlags(int(r
) | int(l
));
40 inline RegSaveFlags
operator&(const RegSaveFlags
& l
, const RegSaveFlags
& r
) {
41 return RegSaveFlags(int(r
) & int(l
));
43 inline RegSaveFlags
operator~(const RegSaveFlags
& f
) {
44 return RegSaveFlags(~int(f
));
47 template <class T
, class F
>
48 Vreg
cond(Vout
& v
, ConditionCode cc
, Vreg sf
, Vreg dst
, T t
, F f
) {
49 auto fblock
= v
.makeBlock();
50 auto tblock
= v
.makeBlock();
51 auto done
= v
.makeBlock();
52 v
<< jcc
{cc
, sf
, {fblock
, tblock
}};
55 v
<< phijmp
{done
, v
.makeTuple(VregList
{treg
})};
58 v
<< phijmp
{done
, v
.makeTuple(VregList
{freg
})};
60 v
<< phidef
{v
.makeTuple(VregList
{dst
})};