判断 page 是否为零页,相比使用非 simd 指令性能提高很多,

bool page_is_zero_avx2(char * vaddr)
{
    int avx2_num = PAGE_SIZE / 32;
    bool zero = true;
    unsigned int rc1, rc2;
    int i = 0;

    kernel_fpu_begin();
    
    asm volatile("vpxor %ymm0,%ymm0,%ymm0");

    for (i = 0; i < avx2_num; i += 2)
    {
        asm volatile("vmovdqa %0,%%ymm1" : : "m" (vaddr[i * 32]));
        asm volatile("vpcmpeqb %ymm0,%ymm1,%ymm2");
        asm volatile("vpmovmskb %%ymm2, %0" : "=r" (rc1));

        asm volatile("vmovdqa %0,%%ymm1" : : "m" (vaddr[(i + 1) * 32]));
        asm volatile(&

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部