// File: /workspace/github_c_makefile_star2_O3/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 %rbx
movq %rcx, %rax
movl %esi, %r8d
movl %edi, %ebx
shrl $0x17, %ebx
movl $0xff, %ecx
movl %ebx, %esi
andl %ecx, %esi
movl %r8d, %r11d
shrl $0x17, %r11d
andl %ecx, %r11d
movl %edi, %r9d
shll $0x6, %r9d
movl $0x1fffffc0, %ecx       # imm = 0x1FFFFFC0
andl %ecx, %r9d
movl %r8d, %r10d
shll $0x6, %r10d
andl %ecx, %r10d
movq %rsi, %rcx
subq %r11, %rcx
jle 0xb103
cmpl $0xff, %esi
jne 0xb122
testl %r9d, %r9d
je 0xb1f4
movl %r8d, %esi
movq %rax, %rdx
popq %rbx
jmp 0xaf64
js 0xb130
testb %bl, %bl
je 0xb184
movzbl %bl, %ecx
cmpl $0xff, %ecx
jne 0xb19b
orl %r9d, %r10d
jne 0xb0f7
jmp 0xb1f4
testq %r11, %r11
je 0xb14f
orl $0x20000000, %r10d      # imm = 0x20000000
jmp 0xb158
cmpl $0xff, %r11d
jne 0xb1a7
testl %r10d, %r10d
jne 0xb0f7
movzbl %dl, %edi
shll $0x1f, %edi
orl $0x7f800000, %edi       # imm = 0x7F800000
jmp 0xb1f4
decq %rcx
je 0xb206
cmpq $0x1f, %rcx
ja 0xb174
movl %r10d, %edi
shrl %cl, %edi
negb %cl
shll %cl, %r10d
xorl %ecx, %ecx
testl %r10d, %r10d
setne %cl
orl %edi, %ecx
jmp 0xb17c
xorl %ecx, %ecx
testl %r10d, %r10d
setne %cl
movl %ecx, %r10d
jmp 0xb206
cmpb $0x0, 0x4(%rax)
je 0xb1e4
orl %r9d, %r10d
je 0xb193
orb $-0x80, 0x2(%rax)
movzbl %dl, %edi
shll $0x1f, %edi
jmp 0xb1f4
leal (%r10,%r9), %ecx
addl $0x40000000, %ecx       # imm = 0x40000000
jmp 0xb223
leal 0x20000000(%r9), %r8d
xorl %edi, %edi
testq %rsi, %rsi
sete %dil
cmovnel %r8d, %r9d
negq %rdi
subq %rcx, %rdi
je 0xb203
cmpq $0x1f, %rdi
ja 0xb1f8
movl %r9d, %esi
movl %edi, %ecx
shrl %cl, %esi
negb %dil
movl %edi, %ecx
shll %cl, %r9d
xorl %ecx, %ecx
testl %r9d, %r9d
setne %cl
orl %esi, %ecx
jmp 0xb200
addl %r9d, %r10d
shrl $0x6, %r10d
movzbl %dl, %edi
shll $0x1f, %edi
orl %r10d, %edi
movl %edi, %eax
popq %rbx
retq
xorl %ecx, %ecx
testl %r9d, %r9d
setne %cl
movl %ecx, %r9d
movq %r11, %rsi
orl $0x20000000, %r9d       # imm = 0x20000000
addl %r10d, %r9d
xorl %edi, %edi
movl %r9d, %ecx
addl %r9d, %ecx
setns %dil
cmovsl %r9d, %ecx
subq %rdi, %rsi
movzbl %dl, %edi
movl %ecx, %edx
movq %rax, %rcx
popq %rbx
jmp 0x9f46