Hlavní navigace

Názor ke článku Asynchroní parsování JSONu v C++20 od Ondřej Novák - """ Na tohle je ideální bitset - ve 32-bitovém...

  • 7. 5. 2024 15:57

    Ondřej Novák

    """
    Na tohle je ideální bitset - ve 32-bitovém int označím bity, které mě zajímají a pak jen if (c <= 32 && ((c-1)&WHITESPACE_BITS) != 0) ... (s optimalizací pro 32-bit architektury - předpokládám, že c == '\0' je ošetřeno jinde)
    """
    Clang je chytrej

    void eat_white() {
    while (_pos < _str.length()) {
    char c = _str[_pos];
    if (c != '\r' && c != '\n' && c != '\t' && c != ' ') break;
    ++_pos;
    }
    }

    přeloží jako


    0x555555557040 :
    ...
    mov 0x68(%rsp),%rax
    movzbl (%rax,%r15,1),%eax
    cmp $0x20,%rax
    ja 0x5555555570a0
    movabs $0x100002600,%rcx
    bt %rax,%rcx
    jae 0x5555555570a0
    inc %r15
    cmp %r15,%rbp
    jne 0x555555557040
    ...
    0x5555555570a0: