diff options
Diffstat (limited to 'contrib/llvm/patches/patch-r262460-llvm-r202059-sparc.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r262460-llvm-r202059-sparc.diff | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r262460-llvm-r202059-sparc.diff b/contrib/llvm/patches/patch-r262460-llvm-r202059-sparc.diff new file mode 100644 index 0000000..e683e33 --- /dev/null +++ b/contrib/llvm/patches/patch-r262460-llvm-r202059-sparc.diff @@ -0,0 +1,62 @@ +Pull in r202059 from upstream clang trunk (by Roman Divacky): + + Implement getDwarfEHStackPointer() and initDwarfEHRegSizeTable() for sparcv9. + +Introduced here: http://svn.freebsd.org/changeset/base/262460 + +Index: tools/clang/lib/CodeGen/TargetInfo.cpp +=================================================================== +--- tools/clang/lib/CodeGen/TargetInfo.cpp ++++ tools/clang/lib/CodeGen/TargetInfo.cpp +@@ -5435,10 +5435,51 @@ class SparcV9TargetCodeGenInfo : public TargetCode + public: + SparcV9TargetCodeGenInfo(CodeGenTypes &CGT) + : TargetCodeGenInfo(new SparcV9ABIInfo(CGT)) {} ++ ++ int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const { ++ return 14; ++ } ++ ++ bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF, ++ llvm::Value *Address) const; + }; + } // end anonymous namespace + ++bool ++SparcV9TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF, ++ llvm::Value *Address) const { ++ // This is calculated from the LLVM and GCC tables and verified ++ // against gcc output. AFAIK all ABIs use the same encoding. + ++ CodeGen::CGBuilderTy &Builder = CGF.Builder; ++ ++ llvm::IntegerType *i8 = CGF.Int8Ty; ++ llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4); ++ llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8); ++ ++ // 0-31: the 8-byte general-purpose registers ++ AssignToArrayRange(Builder, Address, Eight8, 0, 31); ++ ++ // 32-63: f0-31, the 4-byte floating-point registers ++ AssignToArrayRange(Builder, Address, Four8, 32, 63); ++ ++ // Y = 64 ++ // PSR = 65 ++ // WIM = 66 ++ // TBR = 67 ++ // PC = 68 ++ // NPC = 69 ++ // FSR = 70 ++ // CSR = 71 ++ AssignToArrayRange(Builder, Address, Eight8, 64, 71); ++ ++ // 72-87: d0-15, the 8-byte floating-point registers ++ AssignToArrayRange(Builder, Address, Eight8, 72, 87); ++ ++ return false; ++} ++ ++ + //===----------------------------------------------------------------------===// + // Xcore ABI Implementation + //===----------------------------------------------------------------------===// |