ARM Thumb Thumb-2指令集
指令地址保存在LR寄存器中,同时将PC中的最低位的值拷贝到CPSR寄存器中的T位,从而改变处理器状态(Exchange)。一般来说,对于调用函数使用BLX指令即可,被调用函数则与V4T架构相同,也是使用BX指令来返回。
ARM/Thumb代码性能比较
前面提到Thumb代码所需的存储空间约为ARM代码的60%~70%;Thumb代码使用的指令数比ARM代码少约30%~40%;若使用32位的存储器,ARM代码比Thumb代码速约40%;若使用16位的存储器,Thumb代码比ARM代码速约40%~50%;与ARM代码相比,使用Thumb代码,存储器的过耗会下降约30%。下面是arm-linux-gcc编译器采用不同的编译选择对armv7-a,、thumb-2 和thumb-1指令集编译CoreMark的测试结果,结果如下:
- 最好的编译选项:-O3 -funroll-loops -marm -march=armv5te -mtune=cortex-a8
- armv7-a指令集最好的编译选项:-O3 -funroll-loops -marm -march=armv7-a -mtune=cortex-a8 95.2%
- Thumb-2指令集最好的编译选项:-O3 -funroll-loops -mthumb -march=armv7-a -mtune=cortex-a888.7%
- Thumb-1指令集最好的编译选项:-O2 -mthumb -march=armv5te -mtune=cortex-a8 66.4%
- Cortex-A9是Cortex-A8的tune的99.5%
- 默认选项-O2 -mthumb -march=armv7-a 性能比为80.8%
Top of Form
Score | Optimisation | Unroll? | ISA | Arch | Tune | % of best |
5634.6 | -O3 | -funroll-loops | -marm | -march=armv5te | -mtune=cortex-a8 | 100.0% |
5607.7 | -O3 | -funroll-loops | -marm | -march=armv5te | -mtune=cortex-a9 | 99.5% |
5601.5 | -O2 | -funroll-loops | -marm | -march=armv5te | -mtune=cortex-a9 | 99.4% |
5580.0 | -O3 | -marm | -march=armv5te | -mtune=cortex-a8 | 99.0% | |
5548.6 | -O3 | -marm | -march=armv5te | -mtune=cortex-a9 | 98.5% | |
5505.1 | -O2 | -marm | -march=armv5te | -mtune=cortex-a8 | 97.7% | |
5427.4 | -O2 | -funroll-loops | -marm | -march=armv5te | -mtune=cortex-a8 | 96.3% |
5386.5 | -O3 | -funroll-loops | -marm | -march=armv7-a | -mtune=cortex-a9 | 95.6% |
5364.4 | -O3 | -funroll-loops | -marm | -march=armv7-a | -mtune=cortex-a8 | 95.2% |
5332.3 | -O2 | -marm | -march=armv5te | -mtune=cortex-a9 | 94.6% | |
5330.8 | -O3 | -marm | -march=armv7-a | -mtune=cortex-a8 | 94.6% | |
5283.7 | -O3 | -marm | -march=armv7-a | -mtune=cortex-a9 | 93.8% | |
5253.5 | -O2 | -funroll-loops | -marm | -march=armv7-a | -mtune=cortex-a9 | 93.2% |
5066.5 | -O2 | -funroll-loops | -marm | -march=armv7-a | -mtune=cortex-a8 | 89.9% |
4996.6 | -O3 | -funroll-loops | -mthumb | -march=armv7-a | -mtune=cortex-a8 | 88.7% |
4995.6 | -O3 | -funroll-loops | -mthumb | -march=armv7-a | -mtune=cortex-a9 | 88.7% |
4947.2 | -O3 | -mthumb | -march=armv7-a | -mtune=cortex-a8 | 87.8% | |
4858.3 | -O2 | -funroll-loops | -mthumb | -march=armv7-a | -mtune=cortex-a9 | 86.2% |
4774.8 | -O2 | -funroll-loops | -mthumb | -march=armv7-a | -mtune=cortex-a8 | 84.7% |
4763.8 | -O2 | -marm | -march=armv7-a | -mtune=cortex-a9 | 84.5% | |
4737.8 | -Os | -marm | -march=armv5te | -mtune=cortex-a8 | 84.1% | |
4731.1 | -O2 | -marm | -march=armv7-a | -mtune=cortex-a8 | 84.0% | |
4688.6 | -O3 | -mthumb | -march=armv7-a | -mtune=cortex-a9 | 83.2% | |
4665.6 | -Os | -funroll-loops | -marm | -march=armv5te | -mtune=cortex-a8 | 82.8% |
4630.7 | -Os | -marm | -march=armv5te | -mtune=cortex-a9 | 82.2% | |
4595.6 | -Os | -funroll-loops | -marm | -march=armv5te | -mtune=cortex-a9 | 81.6% |
4562.7 | -Os | -funroll-loops | -marm | -march=armv7-a | -mtune=cortex-a8 | 81.0% |
4551.7 | -O2 | -mthumb | -march=armv7-a | -mtune=cortex-a8 | 80.8% | |
4521.5 | -Os | -funroll-loops | -marm | -march=armv7-a | -mtune=cortex-a9 | 80.2% |
4519.8 | -Os | -marm | -march=armv7-a | -mtune=cortex-a8 | 80.2% | |
4500.8 | -Os | -marm | -march=armv7-a | -mtune=cortex-a9 | 79.9% | |
4237.6 | -O2 | -mthumb | -march=armv7-a | -mtune=cortex-a9 | 75.2% | |
3739.7 | -O2 | -funroll-loops | -mthumb | -march=armv5te | -mtune=cortex-a8 | 66.4% |
3730.6 | -O2 | -funroll-loops | -mthumb | -march=armv5te | -mtune=cortex-a9 | 66.2% |
3658.8 | -Os | -mthumb | -march=armv7-a | -mtune=cortex-a8 | 64.9% | |
3657.0 | -Os | -funroll-loops | -mthumb | -march=armv7-a | -mtune=cortex-a8 | 64.9% |
3629.3 | -O2 | -mthumb | -march=armv5te | -mtune=cortex-a8 | 64.4% | |
3585.1 | -Os | -mthumb | -march=armv7-a | -mtune=cortex-a9 | 63.6% | |
3580.8 | -Os | -funroll-loops | -mthumb | -march=armv7-a | -mtune=cortex-a9 | 63.6% |
3522.2 | -O3 | -mthumb | -march=armv5te | -mtune=cortex-a8 | 62.5% | |
3473.0 | -O2 | -mthumb | -march=armv5te | -mtune=cortex-a9 | 61.6% | |
3338.9 | -O3 | -funroll-loops | -mthumb | -march=armv5te | -mtune=cortex-a8 | 59.3% |
3219.1 | -O3 | -funroll-loops | -mthumb | -march=armv5te | -mtune=cortex-a9 | 57.1% |
3170.6 | -O3 | -mthumb | -march=armv5te | -mtune=cortex-a9 | 56.3% | |
2753.7 | -Os | -mthumb | -march=armv5te | -mtune=cortex-a8 | 48.9% |
ARMThumbThumb-2指令 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)