コード例 #1
0
/// Return the datalayout string of a subtarget.
static std::string getDataLayoutString(const PPCSubtarget &ST) {
  const Triple &T = ST.getTargetTriple();

  std::string Ret;

  // Most PPC* platforms are big endian, PPC64LE is little endian.
  if (ST.isLittleEndian())
    Ret = "e";
  else
    Ret = "E";

  Ret += DataLayout::getManglingComponent(T);

  // PPC32 has 32 bit pointers. The PS3 (OS Lv2) is a PPC64 machine with 32 bit
  // pointers.
  if (!ST.isPPC64() || T.getOS() == Triple::Lv2)
    Ret += "-p:32:32";

  // Note, the alignment values for f64 and i64 on ppc64 in Darwin
  // documentation are wrong; these are correct (i.e. "what gcc does").
  if (ST.isPPC64() || ST.isSVR4ABI())
    Ret += "-i64:64";
  else
    Ret += "-f64:32:64";

  // PPC64 has 32 and 64 bit registers, PPC32 has only 32 bit ones.
  if (ST.isPPC64())
    Ret += "-n32:64";
  else
    Ret += "-n32";

  return Ret;
}
コード例 #2
0
ファイル: PPCJITInfo.cpp プロジェクト: 0xDEC0DE8/mcsema
PPCJITInfo::PPCJITInfo(PPCSubtarget &STI)
    : Subtarget(STI), is64Bit(STI.isPPC64()) {
  useGOT = 0;
}