论文部分内容阅读
程序要求的不同的访存模式不一定完全由硬件提供。编译器通常可以通过几个简单的模式来合成较复杂的寻址结果。这样既简化硬件的设计,又允许编译器根据程序行为进行访存优化。相对于复杂指令系统计算机(CISC),精简指令系统计算机(RISC)体系结构提供的访存偏移量有限,对于大范围的偏移寻址需要依赖常数池、全局指针、地址生成等技术来实现。
本文通过研究RISC体系结构处理内存寻址的编译技术,结合UniCore平台分析其访存的优缺点,对UniCore32原访存指令进行扩展,提出具有更大偏移量的PC相对寻址模式来实现快速的内存寻址。它包括扩展访存指令ldrl/strl和扩展加法指令addl,采用PC作为默认的基址寄存器,具有19位偏移量或立即数域,只对32位字变量有效,寻址范围可达2M字节。
本文通过编译器、汇编器和链接器合作实现访存优化,包括编译器通过窥孔优化生成扩展指令、链接器对变量地址进行重定位等。使用扩展的PC相对寻址模式可以覆盖SPEC2000基准程序所有的全局变量访问,不需要借助常数池即可得到全局变量的值或地址。
实验数据表明,使用扩展指令后的SPEC2000基准程序的代码长度分别平均减少2.16%(最多减少3.47%),动态访存指令数平均减少5.92%(最多减少13.05%)。使用扩展指令后的共享库的代码长度最多减少16%,动态访存指令数最多减少27.36%。另外,扩展指令的使用还使调用共享库函数的开销平均减少14.15%(最多减少32.25%),使PLT表项大小减少为原来一半。
扩展的。PC相对寻址模式相对于全局指针的好处主要有两点:一是减少寄存器压力,二是减少函数调用开销。其缺点在于偏移量要求比较大。本文引入的缩小寻址范围的优化方法可有效控制偏移量。本文提出的扩展PC相对寻址模式的设计原则对ARM等其他体系结构有一定的借鉴意义和实用价值。