// File: syzcch[P]FEC_C_version/./fec_rs.h
// Function: rscode::gf_add_parity(void*, void*, int)
void gf_add_parity(void *to_add, void *to_modify, int size)
    {
        unsigned long ta, tm;
        unsigned char *cta, *ctm;
        int sml;

        if (size <= 0)
            return;

        ta = (unsigned long) to_add % sizeof(unsigned long);
        tm = (unsigned long) to_modify% sizeof(unsigned long);
        if (ta != tm)
        {
            printf("Error: gf_add_parity: to_add and to_modify are not aligned\n");
        }

        cta = (unsigned char *) to_add;
        ctm = (unsigned char *) to_modify;

        /* Align to long boundary */
        if (ta != 0)
        {
            while (ta != sizeof(unsigned long) && size > 0)
            {
                *ctm = *ctm ^ *cta;
                ctm++;
                cta++;
                size--;
                ta++;
            }
        }

        if (size == 0)
            return;

        /* Call gf_fast_add_parity to do it fast */

        sml = size / sizeof(unsigned long);

        if (sml > 0)
        {
            gf_fast_add_parity(cta, ctm, size);
        }
        size -= sml * sizeof(unsigned long);

        if (size == 0)
        {
            return;
        }

        /* Do the last few bytes if they are unalighed */
        cta += sml * sizeof(unsigned long);
        ctm += sml * sizeof(unsigned long);

        while (size > 0)
        {
            *ctm = *ctm ^ *cta;
            ctm++;
            cta++;
            size--;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
cmpl $0x0, -0x1c(%rbp)
jg 0x39ba
jmp 0x3b16
movq -0x10(%rbp), %rax
andq $0x7, %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
andq $0x7, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
je 0x39ea
leaq 0x17f8(%rip), %rdi      # 0x51db
movb $0x0, %al
callq 0x2040
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x3a6b
jmp 0x3a03
xorl %eax, %eax
cmpq $0x8, -0x28(%rbp)
movb %al, -0x51(%rbp)
je 0x3a19
cmpl $0x0, -0x1c(%rbp)
setg %al
movb %al, -0x51(%rbp)
movb -0x51(%rbp), %al
testb $0x1, %al
jne 0x3a22
jmp 0x3a69
movq -0x40(%rbp), %rax
movzbl (%rax), %eax
movq -0x38(%rbp), %rcx
movzbl (%rcx), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movb %cl, (%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x3a03
jmp 0x3a6b
cmpl $0x0, -0x1c(%rbp)
jne 0x3a76
jmp 0x3b16
movslq -0x1c(%rbp), %rax
shrq $0x3, %rax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
jle 0x3a9b
movq -0x50(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x40(%rbp), %rdx
movl -0x1c(%rbp), %ecx
callq 0x3ea0
movslq -0x44(%rbp), %rcx
shlq $0x3, %rcx
movslq -0x1c(%rbp), %rax
subq %rcx, %rax
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
jne 0x3ab5
jmp 0x3b16
movslq -0x44(%rbp), %rax
shlq $0x3, %rax
addq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
movslq -0x44(%rbp), %rax
shlq $0x3, %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
cmpl $0x0, -0x1c(%rbp)
jle 0x3b16
movq -0x40(%rbp), %rax
movzbl (%rax), %eax
movq -0x38(%rbp), %rcx
movzbl (%rcx), %ecx
xorl %ecx, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movb %cl, (%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movl -0x1c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x3ad5
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)