0005-RISCV-Add-multilib-v-b-support-for-baremetal-toolcha.patch 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. From f24280ce4b015090f4da8de03d5b57bfc6756de8 Mon Sep 17 00:00:00 2001
  2. From: "max.ma" <max.ma@starfivetech.com>
  3. Date: Wed, 5 Jan 2022 19:27:39 -0800
  4. Subject: [PATCH 5/9] [RISCV] Add multilib v&b support for baremetal toolchain
  5. ---
  6. clang/lib/Driver/ToolChains/Gnu.cpp | 30 +++++++++++++++++++++++++++--
  7. 1 file changed, 28 insertions(+), 2 deletions(-)
  8. diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
  9. index 4f2340316654..c1737fe56635 100644
  10. --- a/clang/lib/Driver/ToolChains/Gnu.cpp
  11. +++ b/clang/lib/Driver/ToolChains/Gnu.cpp
  12. @@ -1695,7 +1695,8 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
  13. constexpr RiscvMultilib RISCVMultilibSet[] = {
  14. {"rv32i", "ilp32"}, {"rv32im", "ilp32"}, {"rv32iac", "ilp32"},
  15. {"rv32imac", "ilp32"}, {"rv32imafc", "ilp32f"}, {"rv64imac", "lp64"},
  16. - {"rv64imafdc", "lp64d"}};
  17. + {"rv64imafdc", "lp64d"}, {"rv64imafdc_zba_zbb_zbc_zbs", "lp64d"},
  18. + {"rv64imafdcv_zba_zbb_zbc_zbs", "lp64d"}, {"rv64imafdcv", "lp64d"},};
  19. std::vector<Multilib> Ms;
  20. for (auto Element : RISCVMultilibSet) {
  21. @@ -1721,8 +1722,33 @@ static void findRISCVBareMetalMultilibs(const Driver &D,
  22. llvm::StringSet<> Added_ABIs;
  23. StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple);
  24. StringRef MArch = tools::riscv::getRISCVArch(Args, TargetTriple);
  25. + std::string Ext, Extra;
  26. + for (auto I = MArch.begin(), E = MArch.end(); I != E; ) {
  27. + char c = *I;
  28. + switch (c) {
  29. + default:
  30. + Ext += c;
  31. + break;
  32. +
  33. + case 'g':
  34. + Ext += "imafd";
  35. + break;
  36. +
  37. + case 'b':
  38. + Extra += "_zba_zbb_zbc_zbs";
  39. + break;
  40. +
  41. + case '_':
  42. + for (;I != E; I++)
  43. + Ext += *I;
  44. + continue;
  45. + }
  46. + ++I;
  47. + }
  48. + Ext += Extra;
  49. +
  50. for (auto Element : RISCVMultilibSet) {
  51. - addMultilibFlag(MArch == Element.march,
  52. + addMultilibFlag(Ext == Element.march,
  53. Twine("march=", Element.march).str().c_str(), Flags);
  54. if (!Added_ABIs.count(Element.mabi)) {
  55. Added_ABIs.insert(Element.mabi);
  56. --
  57. 2.25.1