深入了解sparc架构的窗口寄存器1.概述2.窗口寄存器的特性3.程序的设计4. sparc嵌入式编程设计的优缺点1.概述sparc架构具有专用的窗口寄存器并使用sparc芯片,对这种窗口寄存器必定会产生疑问,但是这种硬件特性使软件设计有更独特的方式。让我们描述一下sparc体系结构中该串行端口寄存器的特性和编程模型。
窗口寄存器的使用可以减少函数调用期间的返回时间,因为硬件堆栈操作可以减少指令数量和对内存的访问数量。窗口寄存器的本质是每次执行函数调用时,寄存器窗口都会自动指向下一个窗口。
当子例程返回时,不需要额外的堆栈操作,只需将窗口移至上一个寄存器即可。 。
但是,两个相邻的窗口具有重叠的部分,并且可以在两个父子函数之间传递参数,这极大地提高了访问效率和寄存器的特异性。 2.窗口寄存器的特性在实际程序中使用时,通常涉及多个功能的嵌套。
这些在复杂的程序设计中非常常见。业务逻辑的增加将大大增加函数调用的深度。
如果函数调用超过了这8个窗口,那么sparc体系结构应该做什么?在sparc架构中,CWP(当前窗口指针)是PSR(程序状态寄存器)的一部分。在特定时间,处理器中只能使用32个整数寄存器。
这32个寄存器是8个全局寄存器,8个返回结果寄存器,8个本地寄存器和8个输入寄存器。由于SAVE指令(在过程调用中通常使用SAVE指令打开新的堆栈帧并切换寄存器窗口)和RESTORE指令(切换回调用者的寄存器窗口),CWP通常会减少1。
加一,陷阱事件(中断,异常或TRAP指令)和RETT指令(从陷阱返回)也将更改CWP,但函数调用比陷阱更常见。窗口无效掩码(WIM)WIM指示哪个窗口无效。
无效意味着该窗口保存了呼叫者的信息,无法再使用。在上图中,WIM指向w7,CWP指向w0,因此,如果立即执行,则SAVE指令将触发窗口溢出陷阱。
相反,如果CWP指向w0并执行RESTORE指令,则将触发窗口下溢陷阱。所谓窗口下溢,是指当前窗口不足,需要将整个窗口寄存器的数据压入堆栈,即压入存储器,并可以重用被压入后的窗口寄存器。
全窗口寄存器存储在存储器中。当函数返回到窗口无效寄存器时,将发生溢出陷阱,并在该陷阱中执行堆栈操作以恢复寄存器。
3.对于C语言,程序的设计不需要注意不同体系结构所带来的差异,而对于汇编,设计是完全不同的。 GCC处理了将C转换为汇编的逻辑。
每个保存指令从被调用函数的第一条指令开始执行。 SAVE指令与ADD指令相同,其功能是将sparcCWP减小1。
让CWP-1窗口成为新的当前窗口。函数执行完成后,执行restore命令以将window命令增加一。
窗口返回到其原始位置。 4.嵌入式编程的sparc设计的优缺点。
对于嵌入式,如果仅设计可控制的程序,则逻辑设计应尽可能单一且可控制,并且函数的嵌套深度不应超过8,最幸运的是,不会发生上溢或下溢操作。这样,不需要访问存储器,并且底层指令很少,这保证了程序的执行效率。
对于上溢或下溢,一次需要执行堆栈或弹出操作,从而使程序的执行效率不太高。对于rtos,设计也稍微复杂一些。
不仅需要判断当前窗口的溢出,还需要保存窗口寄存器的堆栈,这会占用系统上下文线程堆栈的大量空间。目前,我还没有想到减少堆栈消耗的合适方法,在RTOS上,sparc体系结构的优势不是很明显。
以上只是我对。