// File: /workspace/github_c_makefile_star2_O0/mbitsnbites[P]SoftFP/softfloat.c
// Function: addFloat32Sigs
static float32 addFloat32Sigs(float32 a, float32 b, flag zSign,
                              float_status *status)
{
    int_fast16_t aExp, bExp, zExp;
    uint32_t aSig, bSig, zSig;
    int_fast16_t expDiff;

    aSig = extractFloat32Frac( a );
    aExp = extractFloat32Exp( a );
    bSig = extractFloat32Frac( b );
    bExp = extractFloat32Exp( b );
    expDiff = aExp - bExp;
    aSig <<= 6;
    bSig <<= 6;
    if ( 0 < expDiff ) {
        if ( aExp == 0xFF ) {
            if (aSig) {
                return propagateFloat32NaN(a, b, status);
            }
            return a;
        }
        if ( bExp == 0 ) {
            --expDiff;
        }
        else {
            bSig |= 0x20000000;
        }
        shift32RightJamming( bSig, expDiff, &bSig );
        zExp = aExp;
    }
    else if ( expDiff < 0 ) {
        if ( bExp == 0xFF ) {
            if (bSig) {
                return propagateFloat32NaN(a, b, status);
            }
            return packFloat32( zSign, 0xFF, 0 );
        }
        if ( aExp == 0 ) {
            ++expDiff;
        }
        else {
            aSig |= 0x20000000;
        }
        shift32RightJamming( aSig, - expDiff, &aSig );
        zExp = bExp;
    }
    else {
        if ( aExp == 0xFF ) {
            if (aSig | bSig) {
                return propagateFloat32NaN(a, b, status);
            }
            return a;
        }
        if ( aExp == 0 ) {
            if (status->flush_to_zero) {
                if (aSig | bSig) {
                    float_raise(float_flag_output_denormal, status);
                }
                return packFloat32(zSign, 0, 0);
            }
            return packFloat32( zSign, 0, ( aSig + bSig )>>6 );
        }
        zSig = 0x40000000 + aSig + bSig;
        zExp = aExp;
        goto roundAndPack;
    }
    aSig |= 0x20000000;
    zSig = ( aSig + bSig )<<1;
    --zExp;
    if ( (int32_t) zSig < 0 ) {
        zSig = aSig + bSig;
        ++zExp;
    }
 roundAndPack:
    return roundAndPackFloat32(zSign, zExp, zSig, status);

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movb %dl, %al
movl %edi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movb %al, -0xd(%rbp)
movq %rcx, -0x18(%rbp)
movl -0x8(%rbp), %edi
callq 0x115f0
movl %eax, -0x34(%rbp)
movl -0x8(%rbp), %edi
callq 0x115d0
movq %rax, -0x20(%rbp)
movl -0xc(%rbp), %edi
callq 0x115f0
movl %eax, -0x38(%rbp)
movl -0xc(%rbp), %edi
callq 0x115d0
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
subq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0x34(%rbp), %eax
shll $0x6, %eax
movl %eax, -0x34(%rbp)
movl -0x38(%rbp), %eax
shll $0x6, %eax
movl %eax, -0x38(%rbp)
xorl %eax, %eax
cmpq -0x48(%rbp), %rax
jge 0x13e5a
cmpq $0xff, -0x20(%rbp)
jne 0x13e1d
cmpl $0x0, -0x34(%rbp)
je 0x13e12
movl -0x8(%rbp), %edi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x13be0
movl %eax, -0x4(%rbp)
jmp 0x13fec
movl -0x8(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x13fec
cmpq $0x0, -0x28(%rbp)
jne 0x13e32
movq -0x48(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x13e3d
movl -0x38(%rbp), %eax
orl $0x20000000, %eax       # imm = 0x20000000
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %edi
movq -0x48(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0x158d0
movq -0x20(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x13f94
cmpq $0x0, -0x48(%rbp)
jge 0x13ee5
cmpq $0xff, -0x28(%rbp)
jne 0x13ea4
cmpl $0x0, -0x38(%rbp)
je 0x13e8c
movl -0x8(%rbp), %edi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x13be0
movl %eax, -0x4(%rbp)
jmp 0x13fec
movl $0xff, %esi
xorl %edx, %edx
movzbl -0xd(%rbp), %edi
callq 0x11750
movl %eax, -0x4(%rbp)
jmp 0x13fec
cmpq $0x0, -0x20(%rbp)
jne 0x13eb9
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x13ec4
movl -0x34(%rbp), %eax
orl $0x20000000, %eax       # imm = 0x20000000
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %edi
xorl %eax, %eax
movl %eax, %esi
subq -0x48(%rbp), %rsi
leaq -0x34(%rbp), %rdx
callq 0x158d0
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x13f92
cmpq $0xff, -0x20(%rbp)
jne 0x13f1c
movl -0x34(%rbp), %eax
orl -0x38(%rbp), %eax
cmpl $0x0, %eax
je 0x13f11
movl -0x8(%rbp), %edi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x13be0
movl %eax, -0x4(%rbp)
jmp 0x13fec
movl -0x8(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x13fec
cmpq $0x0, -0x20(%rbp)
jne 0x13f7a
movq -0x18(%rbp), %rax
cmpb $0x0, 0x4(%rax)
je 0x13f5d
movl -0x34(%rbp), %eax
orl -0x38(%rbp), %eax
cmpl $0x0, %eax
je 0x13f46
movq -0x18(%rbp), %rsi
movl $0xffffff80, %edi       # imm = 0xFFFFFF80
callq 0x11080
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
movzbl -0xd(%rbp), %edi
callq 0x11750
movl %eax, -0x4(%rbp)
jmp 0x13fec
movb -0xd(%rbp), %al
movl -0x34(%rbp), %edx
addl -0x38(%rbp), %edx
shrl $0x6, %edx
xorl %ecx, %ecx
movl %ecx, %esi
movzbl %al, %edi
callq 0x11750
movl %eax, -0x4(%rbp)
jmp 0x13fec
movl -0x34(%rbp), %eax
addl $0x40000000, %eax       # imm = 0x40000000
addl -0x38(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x13fd3
jmp 0x13f94
movl -0x34(%rbp), %eax
orl $0x20000000, %eax       # imm = 0x20000000
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
addl -0x38(%rbp), %eax
shll %eax
movl %eax, -0x3c(%rbp)
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
cmpl $0x0, -0x3c(%rbp)
jge 0x13fd1
movl -0x34(%rbp), %eax
addl -0x38(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x13fd3
movb -0xd(%rbp), %al
movq -0x30(%rbp), %rsi
movl -0x3c(%rbp), %edx
movq -0x18(%rbp), %rcx
movzbl %al, %edi
callq 0x11cb0
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)