x264的堆栈对齐 x264_stack_align

x264堆栈对齐是为了解决AVX2指令对32字节对齐的要求,通过在common/x86/cpu-a.asm中实现一个模拟调用来确保堆栈正确对齐,从而提高编码效率。
摘要由CSDN通过智能技术生成

x264_stack_align

为什么要对齐,因为AVX2指令需要32字节对齐。

怎么对齐,在common/x86/cpu-a.asm

一句话,就是模拟一个空调用,这个调用只是对齐堆栈和转调真实的函数

%if ARCH_X86_64

;-----------------------------------------------------------------------------
; void stack_align( void (*func)(void*), void *arg );
;-----------------------------------------------------------------------------
cglobal stack_align
    push rbp            ;保存帧寄存器
    mov  rbp, rsp     ;保存rsp
%if WIN64
    sub  rsp, 32 ; shadow space  win64的调用惯例规定,请参看http://wiki.lazarus.freepascal.org/Win64/AMD64_API#Shadow_space
%endif
    and  rsp, ~31    ;保证32byte对齐。其实一句话,上面是模拟一个函调调用,并把堆栈指针32byte对齐,注意和下面的leave呼应。
    mov  rax, r0     ;把真实函数指针付给rax
    mov   r0, r1     ;把参数移到真实函数的参数中,真实函数应该不会使用多余三个的参数 :)        
    mov   r1, r2
    mov   r2, r3
    call rax      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值