Beispiel #1
0
static std::string computeDataLayout(const X86Subtarget &ST) {
  // X86 is little endian
  std::string Ret = "e";

  Ret += DataLayout::getManglingComponent(ST.getTargetTriple());
  // X86 and x32 have 32 bit pointers.
  if (ST.isTarget64BitILP32() || !ST.is64Bit())
    Ret += "-p:32:32";

  // Some ABIs align 64 bit integers and doubles to 64 bits, others to 32.
  if (ST.is64Bit() || ST.isTargetCygMing() || ST.isTargetWindows() ||
      ST.isTargetNaCl())
    Ret += "-i64:64";
  else
    Ret += "-f64:32:64";

  // Some ABIs align long double to 128 bits, others to 32.
  if (ST.isTargetNaCl())
    ; // No f80
  else if (ST.is64Bit() || ST.isTargetDarwin())
    Ret += "-f80:128";
  else
    Ret += "-f80:32";

  // The registers can hold 8, 16, 32 or, in x86-64, 64 bits.
  if (ST.is64Bit())
    Ret += "-n8:16:32:64";
  else
    Ret += "-n8:16:32";

  // The stack is aligned to 32 bits on some ABIs and 128 bits on others.
  if (!ST.is64Bit() && (ST.isTargetCygMing() || ST.isTargetWindows()))
    Ret += "-S32";
  else
    Ret += "-S128";

  return Ret;
}
static unsigned getRetOpcode(const X86Subtarget &Subtarget) {
  return Subtarget.is64Bit() ? X86::RETQ : X86::RETL;
}