コード例 #1
0
ファイル: vasm-internal.cpp プロジェクト: DerPapst/hhvm
bool emit(Venv& env, const fallbackcc& i) {
  auto const jcc =
    emitSmashableJcc(*env.cb, env.meta, env.cb->frontier(), i.cc);
  env.stubs.push_back({nullptr, jcc, i});
  registerFallbackJump(env, jcc, i.cc);
  return true;
}
コード例 #2
0
ファイル: vasm-internal.cpp プロジェクト: LouisRenWeiWei/hhvm
bool emit(Venv& env, const fallbackcc& i) {
  auto const jcc =
    emitSmashableJcc(*env.cb, env.meta, env.cb->frontier(), i.cc);
  env.stubs.push_back({nullptr, jcc, i});
  mcg->tx().getSrcRec(i.target)->registerFallbackJump(jcc, i.cc, env.meta);
  return true;
}
コード例 #3
0
ファイル: vasm-internal.cpp プロジェクト: DerPapst/hhvm
bool emit(Venv& env, const bindjcc& i) {
  auto const jcc =
    emitSmashableJcc(*env.cb, env.meta, env.cb->frontier(), i.cc);
  env.stubs.push_back({nullptr, jcc, i});
  setJmpTransID(env, jcc);
  return true;
}
コード例 #4
0
ファイル: vasm-arm.cpp プロジェクト: gamer7569/hhvm
void Vgen::emit(jcc i) {
    assertx(i.cc != CC_None);
    if (i.targets[1] != i.targets[0]) {
        if (next == i.targets[1]) {
            // the taken branch is the fall-through block, invert the branch.
            i = jcc{ccNegate(i.cc), i.sf, {i.targets[1], i.targets[0]}};
        }
        jccs.push_back({a->frontier(), i.targets[1]});
        // B.cond range is +/- 1MB but this uses BR
        emitSmashableJcc(*codeBlock, env.meta, kEndOfTargetChain, i.cc);
    }
    emit(jmp{i.targets[0]});
}