2023.08.30

Introduction

TODO: race-free所谓的race是啥,为啥会产生?

2020.1.15

Low Overhead Dynamic Binary Translation on ARM

文章的启示

  1. 寄存器映射,loongISA2.0定点/浮点寄存器数量不变,没问题
  2. load/store模式的溢出边界
  3. TB link,因为loongISA准备做地址不变的静态翻译,所以没这个问题
  4. 精确中断(信号?),loongISA2.0的scratchpad支持吗?

Abstract

ARMv8处理器引入了64位模式,大多数ARMv8处理器也同时在硬件上支持32位模式。所以能够在同一处理器上比较,

  • 硬件直接执行32位程序,
  • 动态二进制翻译执行32为程序,

在顺序执行的Cortex-A53上测试SPEC CPU2006,动态二进制翻译的性能损失低于7.5%。

在乱序执行的X-Gene 1上测试SPEC CPU2006,动态二进制翻译的性能提升了1%。

Introduction

一些32/64的区别:

  • AArch64的浮点寄存器比AArch32少;
  • 访存模式不完全相同:地址计算溢出,因为load/store指令挺多的,且只有极少数的情况会有地址计算溢出,为了不让翻译的指令变多,由内核保证访问溢出的地址时保存,并用正确的方式处理。

间接地址跳转使性能降低,trace compilation?使性能提升。