来自gcc 手册:
void TARGET_ASM_FUNCTION_PROLOGUE (FILE *file, HOST_WIDE_INT size)
序言负责设置堆栈帧,初始化帧指针寄存器,保存必须保存的寄存器,并size
为局部变量分配额外的存储字节。file
是一个标准输入输出流,汇编代码应该输出到该流。
在具有“寄存器窗口”的机器上,函数入口代码不会将窗口中的寄存器保存在堆栈中,即使它们应该由函数调用保留;相反,如果函数中使用了任何非调用使用的寄存器,它会采取适当的步骤来“推送”寄存器堆栈。
在函数可能有也可能没有帧指针的机器上,函数入口代码必须相应变化;如果需要,它必须设置帧指针,否则不设置。要确定是否需要帧指针,宏可以引用变量frame_pointer_needed
。变量的值将1
在需要帧指针的函数中运行时。
void TARGET_ASM_FUNCTION_EPILOGUE (FILE *file, HOST_WIDE_INT size)
如果已定义,则为输出汇编代码以退出函数的函数。结语负责在调用函数时将保存的寄存器和堆栈指针恢复为其值,并将控制权返回给调用者。该宏采用与宏相同的参数,并且TARGET_ASM_FUNCTION_PROLOGUE
要恢复的寄存器由相同的方式确定。regs_ever_live
CALL_USED_REGISTERS
SSE (Streaming SIMD Extensions)
是 128 位 CPU 寄存器的集合。这些寄存器可以用 4 个 32 位标量打包,之后可以同时对 4 个元素中的每一个执行操作。相比之下,在常规装配中可能需要 4 次或更多操作才能完成相同的操作。