mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-06 18:46:18 +00:00
MC: Sketch some TargetAsmBackend hooks we are going to need.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98221 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6c27f5e574
commit
23ac7c78e4
@ -28,6 +28,28 @@ public:
|
||||
|
||||
const Target &getTarget() const { return TheTarget; }
|
||||
|
||||
/// hasAbsolutizedSet - Check whether this target "absolutizes"
|
||||
/// assignments. That is, given code like:
|
||||
/// a:
|
||||
/// ...
|
||||
/// b:
|
||||
/// tmp = a - b
|
||||
/// .long tmp
|
||||
/// will the value of 'tmp' be a relocatable expression, or the assembly time
|
||||
/// value of L0 - L1. This distinction is only relevant for platforms that
|
||||
/// support scattered symbols, since in the absence of scattered symbols (a -
|
||||
/// b) cannot change after assembly.
|
||||
virtual bool hasAbsolutizedSet() const { return false; }
|
||||
|
||||
/// hasScatteredSymbols - Check whether this target supports scattered
|
||||
/// symbols. If so, the assembler should assume that atoms can be scattered by
|
||||
/// the linker. In particular, this means that the offsets between symbols
|
||||
/// which are in distinct atoms is not known at link time, and the assembler
|
||||
/// must generate fixups and relocations appropriately.
|
||||
///
|
||||
/// Note that the assembler currently does not reason about atoms, instead it
|
||||
/// assumes all temporary symbols reside in the "current atom".
|
||||
virtual bool hasScatteredSymbols() const { return false; }
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
@ -21,14 +21,34 @@ public:
|
||||
: TargetAsmBackend(T) {}
|
||||
};
|
||||
|
||||
class DarwinX86AsmBackend : public X86AsmBackend {
|
||||
public:
|
||||
DarwinX86AsmBackend(const Target &T)
|
||||
: X86AsmBackend(T) {}
|
||||
|
||||
virtual bool hasAbsolutizedSet() const { return true; }
|
||||
|
||||
virtual bool hasScatteredSymbols() const { return true; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
TargetAsmBackend *llvm::createX86_32AsmBackend(const Target &T,
|
||||
const std::string &TT) {
|
||||
return new X86AsmBackend(T);
|
||||
switch (Triple(TT).getOS()) {
|
||||
case Triple::Darwin:
|
||||
return new DarwinX86AsmBackend(T);
|
||||
default:
|
||||
return new X86AsmBackend(T);
|
||||
}
|
||||
}
|
||||
|
||||
TargetAsmBackend *llvm::createX86_64AsmBackend(const Target &T,
|
||||
const std::string &TT) {
|
||||
return new X86AsmBackend(T);
|
||||
switch (Triple(TT).getOS()) {
|
||||
case Triple::Darwin:
|
||||
return new DarwinX86AsmBackend(T);
|
||||
default:
|
||||
return new X86AsmBackend(T);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user