最近在研究SME/SVE,arm的simd/fp寄存器重叠的方式和x86那边不太一样(d0,d1同时map到q0的高64和底64bit。对苹果的物理寄存器进行了一些测试。
首先测试Q0寄存器的PRF Allocation limit, m3大约在500多左右,也就是说物理寄存器大小上限为500x128bit。 接着把测试寄存器换成D0,结果和Q0寄存器一样。苹果会给所有大小的寄存器destination分配一个128bit的寄存器空间。 继续测试把destination为d0和d1的指令混合发现limit还是一样, 那么可以得出结论128bit寄存器里不存在register sharing,我猜测苹果会给每一个PHR分配了一个size参数,mapping table可以把一个128bit neon寄存器map到多个128bit的物理寄存器。 这是一种相对简单的实现和x86那边的实现类似。
首先测试Q0寄存器的PRF Allocation limit, m3大约在500多左右,也就是说物理寄存器大小上限为500x128bit。 接着把测试寄存器换成D0,结果和Q0寄存器一样。苹果会给所有大小的寄存器destination分配一个128bit的寄存器空间。 继续测试把destination为d0和d1的指令混合发现limit还是一样, 那么可以得出结论128bit寄存器里不存在register sharing,我猜测苹果会给每一个PHR分配了一个size参数,mapping table可以把一个128bit neon寄存器map到多个128bit的物理寄存器。 这是一种相对简单的实现和x86那边的实现类似。