LLVM libc++的RISCV支持

2024-01-16 11:48
文章标签 lib c++ 支持 llvm riscv

本文主要是介绍LLVM libc++的RISCV支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

libc++的官方主页:http://libcxx.llvm.org/

libc++文档主页:https://libcxx.llvm.org/docs/

 

简介:

libc++ is an implementation of the C++ standard library, targeting C++11, C++14 and above.

All of the code in libc++ is dual licensed under the MIT license and the UIUC License (a BSD-like license).

对标的产品:

1、 Apache's libstdcxx

2、GNU's libstdc++

3、STLport

 

目前状态:(来源:http://libcxx.llvm.org/ 和 https://libcxx.llvm.org/docs/

1、操作系统和硬件平台支持状况

libc++ is known to work on the following platforms, using gcc and clang. (Note that functionality provided by <atomic> is only functional with clang and gcc.)

2、编译器版本支持

  • Clang 4.0 and above
  • GCC 5.0 and above.

The C++03 dialect is only supported for Clang compilers.

3、C++版本支持情况

  • C++11 - Complete
  • C++14 - Completehttp://libcxx.llvm.org/cxx1y_status.html
  • C++17 - In Progresshttp://libcxx.llvm.org/cxx1z_status.html
  • C++2a - In Progresshttp://libcxx.llvm.org/cxx2a_status.html
  • Post C++14 Technical Specifications - In Progress(http://libcxx.llvm.org/ts1z_status.html
  • C++ Feature Test Macro Statushttps://libcxx.llvm.org/docs/FeatureTestMacroTable.html#feature-status

 

编译与测试:(来源:https://libcxx.llvm.org/docs/BuildingLibcxx.html#getting-started

$ git clone https://github.com/llvm/llvm-project.git

$ cd llvm-project $ mkdir build && cd build

$ cmake -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" \ ../llvm

$ make # Build $ make check-cxx # Test

$ make install-cxx install-cxxabi # Install

注意:make check-cxx 无法执行,执行llvm-lit libcxx/test/目录,得到结果:


源码中与RISC-V相关的内容:

1、/libcxx/utils/google-benchmark/src/cycleclock.h中有关于riscv架构时钟的一些内容:

#elif defined(__riscv) // RISC-V// Use RDCYCLE (and RDCYCLEH on riscv32)
#if __riscv_xlen == 32uint32_t cycles_lo, cycles_hi0, cycles_hi1;// This asm also includes the PowerPC overflow handling strategy, as above.// Implemented in assembly because Clang insisted on branching.asm volatile("rdcycleh %0\n""rdcycle %1\n""rdcycleh %2\n""sub %0, %0, %2\n""seqz %0, %0\n""sub %0, zero, %0\n""and %1, %1, %0\n": "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1));return (static_cast<uint64_t>(cycles_hi1) << 32) | cycles_lo;
#elseuint64_t cycles;asm volatile("rdcycle %0" : "=r"(cycles));return cycles;
#endif

发布于 10:17

这篇关于LLVM libc++的RISCV支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612492

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa