Width width()

in hphp/runtime/vm/jit/vasm-instr.cpp [91:400]


Width width(Vinstr::Opcode op) {
  switch (op) {
    // service requests
    case Vinstr::bindjmp:
    case Vinstr::bindjcc:
    case Vinstr::bindaddr:
    case Vinstr::ldbindaddr:
    case Vinstr::ldbindretaddr:
    case Vinstr::fallback:
    case Vinstr::fallbackcc:
    // vasm intrinsics
    case Vinstr::conjure:
    case Vinstr::conjureuse:
    case Vinstr::copy:
    case Vinstr::copy2:
    case Vinstr::copyargs:
    case Vinstr::debugtrap:
    case Vinstr::fallthru:
    case Vinstr::killeffects:
    case Vinstr::ldimmb:
    case Vinstr::ldimmw:
    case Vinstr::ldimml:
    case Vinstr::ldimmq:
    case Vinstr::ldundefq:
    case Vinstr::movqs:
    case Vinstr::load:
    case Vinstr::store:
    case Vinstr::mcprep:
    case Vinstr::phidef:
    case Vinstr::phijmp:
    case Vinstr::inlinestart:
    case Vinstr::inlineend:
    case Vinstr::pushframe:
    case Vinstr::recordstack:
    case Vinstr::recordbasenativesp:
    case Vinstr::unrecordbasenativesp:
    case Vinstr::spill:
    case Vinstr::spillbi:
    case Vinstr::spillli:
    case Vinstr::spillqi:
    case Vinstr::spillundefq:
    case Vinstr::reload:
    case Vinstr::ssaalias:
    // native function abi
    case Vinstr::vcall:
    case Vinstr::vinvoke:
    case Vinstr::call:
    case Vinstr::callm:
    case Vinstr::callr:
    case Vinstr::calls:
    case Vinstr::ret:
    // stub function abi
    case Vinstr::stublogue:
    case Vinstr::unstublogue:
    case Vinstr::stubret:
    case Vinstr::callstub:
    case Vinstr::callfaststub:
    case Vinstr::tailcallstub:
    case Vinstr::tailcallstubr:
    case Vinstr::stubunwind:
    // php function abi
    case Vinstr::defvmsp:
    case Vinstr::defvmfp:
    case Vinstr::pushvmfp:
    case Vinstr::syncvmsp:
    case Vinstr::defvmretdata:
    case Vinstr::defvmrettype:
    case Vinstr::syncvmret:
    case Vinstr::syncvmrettype:
    case Vinstr::phplogue:
    case Vinstr::stubtophp:
    case Vinstr::loadstubret:
    case Vinstr::phpret:
    case Vinstr::callphp:
    case Vinstr::callphpr:
    case Vinstr::callphps:
    case Vinstr::contenter:
    // vm entry abi
    case Vinstr::resumetc:
    case Vinstr::inittc:
    case Vinstr::leavetc:
    // exception intrinsics
    case Vinstr::landingpad:
    case Vinstr::nothrow:
    case Vinstr::syncpoint:
    case Vinstr::unwind:
    // nop and trap
    case Vinstr::nop:
    case Vinstr::trap:
    // restrict/unrestrict new virtuals
    case Vinstr::vregrestrict:
    case Vinstr::vregunrestrict:
    // sign/zero-extending/truncating copies
    case Vinstr::movsbl:
    case Vinstr::movswl:
    case Vinstr::movsbq:
    case Vinstr::movswq:
    case Vinstr::movslq:
    case Vinstr::movzbw:
    case Vinstr::movzbl:
    case Vinstr::movzbq:
    case Vinstr::movzwl:
    case Vinstr::movzwq:
    case Vinstr::movzlq:
    case Vinstr::movtqb:
    case Vinstr::movtdb:
    case Vinstr::movtdq:
    case Vinstr::movtql:
    case Vinstr::movtqw:
    // branches
    case Vinstr::jcc:
    case Vinstr::jcci:
    case Vinstr::jmp:
    case Vinstr::jmps:
    case Vinstr::jmpr:
    case Vinstr::jmpm:
    case Vinstr::jmpi:
    // push/pop
    case Vinstr::pop:
    case Vinstr::popf:
    case Vinstr::popm:
    case Vinstr::popp:
    case Vinstr::poppm:
    case Vinstr::push:
    case Vinstr::pushf:
    case Vinstr::pushm:
    case Vinstr::pushp:
    case Vinstr::pushpm:
    // floating-point conversions
    case Vinstr::cvttsd2siq:
    case Vinstr::cvtsi2sd:
    case Vinstr::cvtsi2sdm:
    case Vinstr::unpcklpd:
    // x64 instructions
    case Vinstr::cqo:
    case Vinstr::idiv:
    case Vinstr::sarq:
    case Vinstr::shlq:
    case Vinstr::shrq:
    // arm instructions
    case Vinstr::fcvtzs:
    case Vinstr::mrs:
    case Vinstr::msr:
      return Width::AnyNF;

    case Vinstr::andb:
    case Vinstr::andbi:
    case Vinstr::andbim:
    case Vinstr::notb:
    case Vinstr::orbi:
    case Vinstr::orbim:
    case Vinstr::xorb:
    case Vinstr::xorbi:
    case Vinstr::cmpb:
    case Vinstr::cmpbi:
    case Vinstr::cmpbim:
    case Vinstr::cmpbm:
    case Vinstr::testb:
    case Vinstr::testbi:
    case Vinstr::testbim:
    case Vinstr::testbm:
    case Vinstr::cmovb:
    case Vinstr::csincb:
    case Vinstr::setcc:
    case Vinstr::movb:
    case Vinstr::loadb:
    case Vinstr::loadtqb:
    case Vinstr::storeb:
    case Vinstr::storebi:
      return Width::Byte;

    case Vinstr::addwm:
    case Vinstr::andw:
    case Vinstr::andwi:
    case Vinstr::incw:
    case Vinstr::incwm:
    case Vinstr::orwim:
    case Vinstr::cmovw:
    case Vinstr::csincw:
    case Vinstr::cmpw:
    case Vinstr::cmpwi:
    case Vinstr::cmpwim:
    case Vinstr::cmpwm:
    case Vinstr::testw:
    case Vinstr::testwi:
    case Vinstr::testwim:
    case Vinstr::testwm:
    case Vinstr::loadw:
    case Vinstr::movw:
    case Vinstr::storew:
    case Vinstr::storewi:
    case Vinstr::xorw:
    case Vinstr::xorwi:
      return Width::Word;

    case Vinstr::addl:
    case Vinstr::addli:
    case Vinstr::addlm:
    case Vinstr::addlim:
    case Vinstr::andl:
    case Vinstr::andli:
    case Vinstr::decl:
    case Vinstr::declm:
    case Vinstr::incl:
    case Vinstr::inclm:
    case Vinstr::shlli:
    case Vinstr::shrli:
    case Vinstr::subl:
    case Vinstr::subli:
    case Vinstr::xorl:
    case Vinstr::orlim:
    case Vinstr::cmovl:
    case Vinstr::csincl:
    case Vinstr::cmpl:
    case Vinstr::cmpli:
    case Vinstr::cmplm:
    case Vinstr::cmplim:
    case Vinstr::testl:
    case Vinstr::testli:
    case Vinstr::testlim:
    case Vinstr::testlm:
    case Vinstr::movl:
    case Vinstr::loadl:
    case Vinstr::loadzbl:
    case Vinstr::loadsbl:
    case Vinstr::loadtql:
    case Vinstr::storel:
    case Vinstr::storeli:
    case Vinstr::ubfmli:
      return Width::Long;

    case Vinstr::addq:
    case Vinstr::addqi:
    case Vinstr::addqmr:
    case Vinstr::addqrm:
    case Vinstr::addqim:
    case Vinstr::andq:
    case Vinstr::andqi:
    case Vinstr::andqi64:
    case Vinstr::btrq:
    case Vinstr::decq:
    case Vinstr::decqm:
    case Vinstr::decqmlock:
    case Vinstr::decqmlocknosf:
    case Vinstr::incq:
    case Vinstr::incqm:
    case Vinstr::imul:
    case Vinstr::divint:
    case Vinstr::srem:
    case Vinstr::neg:
    case Vinstr::not:
    case Vinstr::orwi:
    case Vinstr::orli:
    case Vinstr::orq:
    case Vinstr::orqi:
    case Vinstr::orqim:
    case Vinstr::sar:
    case Vinstr::shl:
    case Vinstr::shr:
    case Vinstr::sarqi:
    case Vinstr::shlqi:
    case Vinstr::shrqi:
    case Vinstr::subq:
    case Vinstr::subqi:
    case Vinstr::subqim:
    case Vinstr::xorq:
    case Vinstr::xorqi:
    case Vinstr::cmpq:
    case Vinstr::cmpqi:
    case Vinstr::cmpqm:
    case Vinstr::cmpqim:
    case Vinstr::testq:
    case Vinstr::testqi:
    case Vinstr::testqm:
    case Vinstr::testqim:
    case Vinstr::cloadq:
    case Vinstr::cmovq:
    case Vinstr::csincq:
    case Vinstr::lea:
    case Vinstr::leap:
    case Vinstr::leav:
    case Vinstr::lead:
    case Vinstr::loadqp:
    case Vinstr::loadqd:
    case Vinstr::loadzbq:
    case Vinstr::loadzwq:
    case Vinstr::loadzlq:
    case Vinstr::loadsbq:
    case Vinstr::storeqi:
    case Vinstr::addsd:
    case Vinstr::subsd:
    case Vinstr::cmpsd:
    case Vinstr::ucomisd:
    case Vinstr::loadsd:
    case Vinstr::storesd:
    case Vinstr::absdbl:
    case Vinstr::divsd:
    case Vinstr::mulsd:
    case Vinstr::roundsd:
    case Vinstr::sqrtsd:
    case Vinstr::crc32q:
    case Vinstr::prefetch:
      return Width::Quad;

    case Vinstr::loadups:
    case Vinstr::storeups:
      return Width::Octa;
  }
  not_reached();
}