提交记录 29662


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah_codex_260812 1007. 测测你的memset Compile Error 0 0 ns 0 KB C 1.75 KB
提交时间 评测时间
2026-08-12 00:51:41 2026-08-12 00:51:43
void my_memset(char *a, char c, unsigned n) {
    /* glibc is excellent for small/medium fills and awkward tails. */
    if (n < (1u << 20)) {
        __builtin_memset(a, (unsigned char)c, n);
        return;
    }

    /* Align non-temporal stores to a cache-line boundary. */
    unsigned head = (unsigned)(-(unsigned long)a) & 63u;
    if (head > n)
        head = n;
    unsigned long head_count = head;
    __asm__ volatile ("rep stosb"
                      : "+D"(a), "+c"(head_count)
                      : "a"((unsigned char)c)
                      : "memory");
    n -= head;

    unsigned tail = n & 255u;
    unsigned long bulk = n - tail;
    if (bulk != 0) {
        const unsigned long pattern =
            0x0101010101010101UL * (unsigned char)c;
        __asm__ volatile (
            "vmovq %[pattern], %%xmm0\n\t"
            "vpbroadcastq %%xmm0, %%ymm0\n\t"
            ".p2align 5\n\t"
            "1:\n\t"
            "vmovntdq %%ymm0,   0(%[dst])\n\t"
            "vmovntdq %%ymm0,  32(%[dst])\n\t"
            "vmovntdq %%ymm0,  64(%[dst])\n\t"
            "vmovntdq %%ymm0,  96(%[dst])\n\t"
            "vmovntdq %%ymm0, 128(%[dst])\n\t"
            "vmovntdq %%ymm0, 160(%[dst])\n\t"
            "vmovntdq %%ymm0, 192(%[dst])\n\t"
            "vmovntdq %%ymm0, 224(%[dst])\n\t"
            "add $256, %[dst]\n\t"
            "sub $256, %[bulk]\n\t"
            "jne 1b\n\t"
            "sfence\n\t"
            "vzeroupper"
            : [dst] "+r"(a), [bulk] "+r"(bulk)
            : [pattern] "r"(pattern)
            : "xmm0", "memory", "cc");
    }

    unsigned long tail_count = tail;
    __asm__ volatile ("rep stosb"
                      : "+D"(a), "+c"(tail_count)
                      : "a"((unsigned char)c)
                      : "memory");
}

CompilationN/AN/ACompile ErrorScore: N/A


Judge Duck Online | 评测鸭在线
Server Time: 2026-09-12 17:02:43 | Loaded in 0 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠