// File: /workspace/github_c_makefile_star2_O1/dnbaker[P]fastiota/fastiota.c
// Function: fastiota32
FASTIOTA_EXPORT uint32_t *fastiota32(uint32_t *start, size_t nelem, uint32_t sv) {
#define CASEN *start++ = sv++; __attribute__((fallthrough));
    {
        const size_t leftover = VECSIZE / sizeof(uint32_t) - (uint64_t)start % (VECSIZE / sizeof(uint32_t));
        if(leftover && leftover != VECSIZE / sizeof(uint32_t)) {
            nelem -= leftover;
            switch(leftover) {
                case 15: CASEN case 14: CASEN case 13: CASEN case 12: CASEN case 11: CASEN case 10: CASEN case 9: CASEN case 8: CASEN case 7: CASEN case 6: CASEN case 5: CASEN case 4: CASEN case 3: CASEN case 2: CASEN case 1: CASEN
                default: ;
            }
        }
    }
    uint32_t *const end = start + nelem, *const origstart = start;
#if __AVX512F__
    __m512i m = init_start(_mm512_set_epi32, sv);
    const __m512i inc = _mm512_set1_epi32(sizeof(m) / sizeof(uint32_t));
    assert((uint64_t)start % sizeof(m) == 0);
    UNROLL4
    while(end - start >= (signed_size_t)(sizeof(m) / sizeof(uint32_t))) {
        _mm512_store_si512((void *)start, m);
        m = _mm512_add_epi32(m, inc);
        start += sizeof(m) / sizeof(uint32_t);
    }
    sv += (start - origstart);
#elif __AVX2__
    __m256i m = init_start(_mm256_set_epi32, sv);
    assert((uint64_t)start % sizeof(m) == 0);
    const __m256i inc = _mm256_set1_epi32(sizeof(m) / sizeof(uint32_t));
    UNROLL4
    while(end - start >= (signed_size_t)(sizeof(m) / sizeof(uint32_t))) {
        _mm256_store_si256((__m256i *)start, m);
        m = _mm256_add_epi32(m, inc);
        start += sizeof(m) / sizeof(uint32_t);
    }
    sv += (start - origstart);
#elif __SSE2__
    __m128i m = init_start(_mm_set_epi32, sv);
    assert((uint64_t)start % sizeof(m) == 0);
    const __m128i inc = _mm_set1_epi32(sizeof(m) / sizeof(uint32_t));
    UNROLL4
    while(end - start >= (signed_size_t)(sizeof(m) / sizeof(uint32_t))) {
        _mm_store_si128((__m128i *)start, m);
        m = _mm_add_epi32(m, inc);
        start += sizeof(m) / sizeof(uint32_t);
    }
    sv += (start - origstart);
#endif
    while(start < end) *start++ = sv++;
    return origstart;
}

// Assembly:
pushq %rax
movq %rdi, %rcx
andq $0xf, %rcx
je 0x15bb
movq %rdi, %rax
orq $-0x10, %rax
decq %rcx
leaq 0x1cc9(%rip), %r8       # 0x3200
movslq (%r8,%rcx,4), %rcx
addq %r8, %rcx
jmpq *%rcx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
addq %rax, %rsi
movl %edx, (%rdi)
addq $0x4, %rdi
incl %edx
testb $0x3f, %dil
jne 0x17c2
leaq (%rdi,%rsi,4), %rax
movq %rdi, %rcx
movq %rdi, %r8
cmpq $0x10, %rsi
jl 0x1730
vpbroadcastd %edx, %ymm0
vpaddd 0x1a79(%rip), %ymm0, %ymm1 # 0x3060
vpmovsxbd 0x1eaf(%rip), %zmm2 # 0x34a0
vpermi2d %zmm0, %zmm1, %zmm2
vpaddd 0x1e81(%rip), %xmm0, %xmm1 # 0x3480
vpmovsxbd 0x1ea7(%rip), %zmm3 # 0x34b0
vpermi2d %zmm1, %zmm2, %zmm3
leal 0xd(%rdx), %ecx
movw $0x2000, %r8w           # imm = 0x2000
kmovd %r8d, %k1
vpaddd 0x1e6c(%rip), %xmm0, %xmm1 # 0x3490
vpmovsxbq 0x1eda(%rip), %zmm0 # 0x3508
vpbroadcastd %ecx, %zmm3 {%k1}
vpermi2q %zmm1, %zmm3, %zmm0
leaq (,%rsi,4), %rcx
movl $0x3f, %r8d
subq %rcx, %r8
cmpq $-0x3c, %r8
movq $-0x3d, %rcx
cmovgeq %r8, %rcx
leaq (%rcx,%rsi,4), %rsi
movl %esi, %r8d
shrl $0x6, %r8d
incl %r8d
andl $0x3, %r8d
je 0x169d
shll $0x6, %r8d
vpbroadcastd 0x1e74(%rip), %zmm1 # 0x34f0
movq %r8, %r9
movq %rdi, %rcx
vmovdqa64 %zmm0, (%rcx)
vpaddd %zmm1, %zmm0, %zmm0
addq $0x40, %rcx
addq $-0x40, %r9
jne 0x1682
addq %rdi, %r8
jmp 0x16a0
movq %rdi, %rcx
cmpq $0xc0, %rsi
jb 0x1730
movq %rcx, %r8
negq %r8
vpbroadcastd 0x1e33(%rip), %zmm1 # 0x34f0
vpbroadcastd 0x1e2d(%rip), %zmm2 # 0x34f4
vpbroadcastd 0x1e27(%rip), %zmm3 # 0x34f8
vpbroadcastd 0x1e21(%rip), %zmm4 # 0x34fc
vmovdqa64 %zmm0, (%rcx)
vpaddd %zmm1, %zmm0, %zmm5
vmovdqa64 %zmm5, 0x40(%rcx)
vpaddd %zmm2, %zmm0, %zmm5
vmovdqa64 %zmm5, 0x80(%rcx)
vpaddd %zmm3, %zmm0, %zmm5
vmovdqa64 %zmm5, 0xc0(%rcx)
vpaddd %zmm4, %zmm0, %zmm0
addq $0x100, %rcx            # imm = 0x100
leaq (%rax,%r8), %rsi
addq $-0x100, %rsi
addq $-0x100, %r8
cmpq $0x3c, %rsi
jg 0x16db
negq %r8
cmpq %rax, %rcx
jae 0x17ba
leaq 0x4(%rcx), %rsi
cmpq %rsi, %rax
cmovaq %rax, %rsi
movq %rcx, %rax
notq %rax
addq %rsi, %rax
vpbroadcastq %rax, %zmm1
shrq $0x2, %rax
subq %rdi, %r8
shrq $0x2, %r8
addl %r8d, %edx
addq $0x8, %rax
andq $-0x8, %rax
vpbroadcastd %edx, %ymm0
vpaddd 0x1909(%rip), %ymm0, %ymm0 # 0x3080
vpsrlq $0x2, %zmm1, %zmm1
xorl %edx, %edx
vpmovsxbq 0x1d86(%rip), %zmm2 # 0x3510
vpbroadcastd 0x1d6d(%rip), %ymm3 # 0x3500
vpbroadcastq %rdx, %zmm4
vporq %zmm2, %zmm4, %zmm4
vpcmpleuq %zmm1, %zmm4, %k1
vmovdqu32 %ymm0, (%rcx,%rdx,4) {%k1}
addq $0x8, %rdx
vpaddd %ymm3, %ymm0, %ymm0
cmpq %rdx, %rax
jne 0x1793
movq %rdi, %rax
popq %rcx
vzeroupper
retq
leaq 0x1d87(%rip), %rdi      # 0x3550
leaq 0x1da1(%rip), %rsi      # 0x3571
leaq 0x1da5(%rip), %rcx      # 0x357c
movl $0x32, %edx
callq 0x1050