mirror of
https://github.com/intel/llvm.git
synced 2026-01-22 07:01:03 +08:00
[clang][AVR] Redefine [u]int16_t to be compatible with avr-gcc
Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D102547
This commit is contained in:
@@ -129,9 +129,9 @@ struct TransferrableTargetInfo {
|
||||
Float128
|
||||
};
|
||||
protected:
|
||||
IntType SizeType, IntMaxType, PtrDiffType, IntPtrType, WCharType,
|
||||
WIntType, Char16Type, Char32Type, Int64Type, SigAtomicType,
|
||||
ProcessIDType;
|
||||
IntType SizeType, IntMaxType, PtrDiffType, IntPtrType, WCharType, WIntType,
|
||||
Char16Type, Char32Type, Int64Type, Int16Type, SigAtomicType,
|
||||
ProcessIDType;
|
||||
|
||||
/// Whether Objective-C's built-in boolean type should be signed char.
|
||||
///
|
||||
@@ -351,6 +351,10 @@ public:
|
||||
IntType getUInt64Type() const {
|
||||
return getCorrespondingUnsignedType(Int64Type);
|
||||
}
|
||||
IntType getInt16Type() const { return Int16Type; }
|
||||
IntType getUInt16Type() const {
|
||||
return getCorrespondingUnsignedType(Int16Type);
|
||||
}
|
||||
IntType getSigAtomicType() const { return SigAtomicType; }
|
||||
IntType getProcessIDType() const { return ProcessIDType; }
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : TargetOpts(), Triple(T) {
|
||||
Char16Type = UnsignedShort;
|
||||
Char32Type = UnsignedInt;
|
||||
Int64Type = SignedLongLong;
|
||||
Int16Type = SignedShort;
|
||||
SigAtomicType = SignedInt;
|
||||
ProcessIDType = SignedInt;
|
||||
UseSignedCharForObjCBool = true;
|
||||
|
||||
@@ -309,8 +309,6 @@ void AVRTargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
Builder.defineMacro("__AVR__");
|
||||
Builder.defineMacro("__ELF__");
|
||||
Builder.defineMacro("__flash", "__attribute__((address_space(1)))");
|
||||
Builder.defineMacro("__UINT16_TYPE__", "unsigned int");
|
||||
Builder.defineMacro("__INT16_TYPE__", "int");
|
||||
|
||||
if (!this->CPU.empty()) {
|
||||
auto It = llvm::find_if(
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
IntPtrType = SignedInt;
|
||||
Char16Type = UnsignedInt;
|
||||
WIntType = SignedInt;
|
||||
Int16Type = SignedInt;
|
||||
Char32Type = UnsignedLong;
|
||||
SigAtomicType = SignedChar;
|
||||
resetDataLayout("e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8");
|
||||
|
||||
@@ -216,6 +216,11 @@ static void DefineExactWidthIntType(TargetInfo::IntType Ty,
|
||||
if (TypeWidth == 64)
|
||||
Ty = IsSigned ? TI.getInt64Type() : TI.getUInt64Type();
|
||||
|
||||
// Use the target specified int16 type when appropriate. Some MCU targets
|
||||
// (such as AVR) have definition of [u]int16_t to [un]signed int.
|
||||
if (TypeWidth == 16)
|
||||
Ty = IsSigned ? TI.getInt16Type() : TI.getUInt16Type();
|
||||
|
||||
const char *Prefix = IsSigned ? "__INT" : "__UINT";
|
||||
|
||||
DefineType(Prefix + Twine(TypeWidth) + "_TYPE__", Ty, Builder);
|
||||
|
||||
Reference in New Issue
Block a user