// File: /workspace/github_c_makefile_star2_O0/983[P]bigint/bigint.c
// Function: bigint_raw_shift_left
int bigint_raw_shift_left(
    bigint_word *dst, int n_dst,
    const bigint_word *src, int n_src,
    unsigned shift
){
    int i;
    int word_shift = shift / BIGINT_WORD_BITS;
    int bits_shift = shift % BIGINT_WORD_BITS;

    if (bits_shift){
        bigint_word lo, hi = 0;

        for (i = n_src + word_shift; i > word_shift; i--){
            lo = src[i - word_shift - 1];
            BIGINT_ASSERT(i, >=, 0);
            BIGINT_ASSERT(i, <, n_dst);
            dst[i] = (hi << bits_shift) | (lo >> (BIGINT_WORD_BITS - bits_shift));
            hi = lo;
        }

        for (i = word_shift; i >= 0; i--){
            BIGINT_ASSERT(i, >=, 0);
            BIGINT_ASSERT(i, <, n_dst);
            dst[i] = hi << bits_shift;
            hi = 0;
        }

        i = n_src + word_shift + 1;
        BIGINT_ASSERT(i, <=, n_dst);
        return bigint_raw_truncate(dst, i);
    }else{
        /* this case is not only separate because of performance */
        /* but (lo >> (BIGINT_WORD_BITS - 0)) is also undefined behaviour */
        for (i = n_src + word_shift - 1; i >= word_shift; i--){
            BIGINT_ASSERT(i, >=, 0);
            BIGINT_ASSERT(i, <, n_dst);
            dst[i] = src[i - word_shift];
        }

        for (i = word_shift - 1; i >= 0; i--){
            BIGINT_ASSERT(i, >=, 0);
            BIGINT_ASSERT(i, <, n_dst);
            dst[i] = 0;
        }

        i = n_src + word_shift;
        BIGINT_ASSERT(i, <=, n_dst);
        return bigint_raw_truncate(dst, i);
    }
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movl %esi, 0x34(%rsp)
movq %rdx, 0x28(%rsp)
movl %ecx, 0x24(%rsp)
movl %r8d, 0x20(%rsp)
movl 0x20(%rsp), %eax
shrq $0x5, %rax
movl %eax, 0x18(%rsp)
movl 0x20(%rsp), %eax
andq $0x1f, %rax
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
je 0x4117
movl $0x0, 0xc(%rsp)
movl 0x24(%rsp), %eax
addl 0x18(%rsp), %eax
movl %eax, 0x1c(%rsp)
movl 0x1c(%rsp), %eax
cmpl 0x18(%rsp), %eax
jle 0x4031
movq 0x28(%rsp), %rax
movl 0x1c(%rsp), %ecx
subl 0x18(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x10(%rsp)
cmpl $0x0, 0x1c(%rsp)
jl 0x3fa3
jmp 0x3fc2
leaq 0x2581(%rip), %rdi      # 0x652b
leaq 0x2372(%rip), %rsi      # 0x6323
movl $0x296, %edx            # imm = 0x296
leaq 0x2579(%rip), %rcx      # 0x6536
callq 0x1070
movl 0x1c(%rsp), %eax
cmpl 0x34(%rsp), %eax
jge 0x3fce
jmp 0x3fed
leaq 0x25b7(%rip), %rdi      # 0x658c
leaq 0x2347(%rip), %rsi      # 0x6323
movl $0x297, %edx            # imm = 0x297
leaq 0x254e(%rip), %rcx      # 0x6536
callq 0x1070
movl 0xc(%rsp), %edx
movl 0x14(%rsp), %ecx
shll %cl, %edx
movl 0x10(%rsp), %eax
movslq 0x14(%rsp), %rsi
movl $0x20, %ecx
subq %rsi, %rcx
shrl %cl, %eax
orl %eax, %edx
movq 0x38(%rsp), %rax
movslq 0x1c(%rsp), %rcx
movl %edx, (%rax,%rcx,4)
movl 0x10(%rsp), %eax
movl %eax, 0xc(%rsp)
movl 0x1c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x3f72
movl 0x18(%rsp), %eax
movl %eax, 0x1c(%rsp)
cmpl $0x0, 0x1c(%rsp)
jl 0x40c6
cmpl $0x0, 0x1c(%rsp)
jl 0x404d
jmp 0x406c
leaq 0x24d7(%rip), %rdi      # 0x652b
leaq 0x22c8(%rip), %rsi      # 0x6323
movl $0x29d, %edx            # imm = 0x29D
leaq 0x24cf(%rip), %rcx      # 0x6536
callq 0x1070
movl 0x1c(%rsp), %eax
cmpl 0x34(%rsp), %eax
jge 0x4078
jmp 0x4097
leaq 0x250d(%rip), %rdi      # 0x658c
leaq 0x229d(%rip), %rsi      # 0x6323
movl $0x29e, %edx            # imm = 0x29E
leaq 0x24a4(%rip), %rcx      # 0x6536
callq 0x1070
movl 0xc(%rsp), %edx
movl 0x14(%rsp), %ecx
shll %cl, %edx
movq 0x38(%rsp), %rax
movslq 0x1c(%rsp), %rcx
movl %edx, (%rax,%rcx,4)
movl $0x0, 0xc(%rsp)
movl 0x1c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x4039
movl 0x24(%rsp), %eax
addl 0x18(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c(%rsp)
movl 0x1c(%rsp), %eax
cmpl 0x34(%rsp), %eax
jg 0x40e1
jmp 0x4100
leaq 0x24b2(%rip), %rdi      # 0x659a
leaq 0x2234(%rip), %rsi      # 0x6323
movl $0x2a4, %edx            # imm = 0x2A4
leaq 0x243b(%rip), %rcx      # 0x6536
callq 0x1070
movq 0x38(%rsp), %rdi
movl 0x1c(%rsp), %esi
callq 0x2640
movl %eax, 0x44(%rsp)
jmp 0x4283
movl 0x24(%rsp), %eax
addl 0x18(%rsp), %eax
subl $0x1, %eax
movl %eax, 0x1c(%rsp)
movl 0x1c(%rsp), %eax
cmpl 0x18(%rsp), %eax
jl 0x41b7
cmpl $0x0, 0x1c(%rsp)
jl 0x413d
jmp 0x415c
leaq 0x23e7(%rip), %rdi      # 0x652b
leaq 0x21d8(%rip), %rsi      # 0x6323
movl $0x2aa, %edx            # imm = 0x2AA
leaq 0x23df(%rip), %rcx      # 0x6536
callq 0x1070
movl 0x1c(%rsp), %eax
cmpl 0x34(%rsp), %eax
jge 0x4168
jmp 0x4187
leaq 0x241d(%rip), %rdi      # 0x658c
leaq 0x21ad(%rip), %rsi      # 0x6323
movl $0x2ab, %edx            # imm = 0x2AB
leaq 0x23b4(%rip), %rcx      # 0x6536
callq 0x1070
movq 0x28(%rsp), %rax
movl 0x1c(%rsp), %ecx
subl 0x18(%rsp), %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
movq 0x38(%rsp), %rax
movslq 0x1c(%rsp), %rcx
movl %edx, (%rax,%rcx,4)
movl 0x1c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x4126
movl 0x18(%rsp), %eax
subl $0x1, %eax
movl %eax, 0x1c(%rsp)
cmpl $0x0, 0x1c(%rsp)
jl 0x423a
cmpl $0x0, 0x1c(%rsp)
jl 0x41d2
jmp 0x41f1
leaq 0x2352(%rip), %rdi      # 0x652b
leaq 0x2143(%rip), %rsi      # 0x6323
movl $0x2b0, %edx            # imm = 0x2B0
leaq 0x234a(%rip), %rcx      # 0x6536
callq 0x1070
movl 0x1c(%rsp), %eax
cmpl 0x34(%rsp), %eax
jge 0x41fd
jmp 0x421c
leaq 0x2388(%rip), %rdi      # 0x658c
leaq 0x2118(%rip), %rsi      # 0x6323
movl $0x2b1, %edx            # imm = 0x2B1
leaq 0x231f(%rip), %rcx      # 0x6536
callq 0x1070
movq 0x38(%rsp), %rax
movslq 0x1c(%rsp), %rcx
movl $0x0, (%rax,%rcx,4)
movl 0x1c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x41c2
movl 0x24(%rsp), %eax
addl 0x18(%rsp), %eax
movl %eax, 0x1c(%rsp)
movl 0x1c(%rsp), %eax
cmpl 0x34(%rsp), %eax
jg 0x4252
jmp 0x4271
leaq 0x2341(%rip), %rdi      # 0x659a
leaq 0x20c3(%rip), %rsi      # 0x6323
movl $0x2b6, %edx            # imm = 0x2B6
leaq 0x22ca(%rip), %rcx      # 0x6536
callq 0x1070
movq 0x38(%rsp), %rdi
movl 0x1c(%rsp), %esi
callq 0x2640
movl %eax, 0x44(%rsp)
movl 0x44(%rsp), %eax
addq $0x48, %rsp
retq
nopl (%rax)