// File: /workspace/github_c_makefile_star2_O0/mbitsnbites[P]SoftFP/softfloat.c
// Function: subFloat32Sigs
static float32 subFloat32Sigs(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 <<= 7;
    bSig <<= 7;
    if ( 0 < expDiff ) goto aExpBigger;
    if ( expDiff < 0 ) goto bExpBigger;
    if ( aExp == 0xFF ) {
        if (aSig | bSig) {
            return propagateFloat32NaN(a, b, status);
        }
        float_raise(float_flag_invalid, status);
        return float32_default_nan;
    }
    if ( aExp == 0 ) {
        aExp = 1;
        bExp = 1;
    }
    if ( bSig < aSig ) goto aBigger;
    if ( aSig < bSig ) goto bBigger;
    return packFloat32(status->float_rounding_mode == float_round_down, 0, 0);
 bExpBigger:
    if ( bExp == 0xFF ) {
        if (bSig) {
            return propagateFloat32NaN(a, b, status);
        }
        return packFloat32( zSign ^ 1, 0xFF, 0 );
    }
    if ( aExp == 0 ) {
        ++expDiff;
    }
    else {
        aSig |= 0x40000000;
    }
    shift32RightJamming( aSig, - expDiff, &aSig );
    bSig |= 0x40000000;
 bBigger:
    zSig = bSig - aSig;
    zExp = bExp;
    zSign ^= 1;
    goto normalizeRoundAndPack;
 aExpBigger:
    if ( aExp == 0xFF ) {
        if (aSig) {
            return propagateFloat32NaN(a, b, status);
        }
        return a;
    }
    if ( bExp == 0 ) {
        --expDiff;
    }
    else {
        bSig |= 0x40000000;
    }
    shift32RightJamming( bSig, expDiff, &bSig );
    aSig |= 0x40000000;
 aBigger:
    zSig = aSig - bSig;
    zExp = aExp;
 normalizeRoundAndPack:
    --zExp;
    return normalizeRoundAndPackFloat32(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 $0x7, %eax
movl %eax, -0x34(%rbp)
movl -0x38(%rbp), %eax
shll $0x7, %eax
movl %eax, -0x38(%rbp)
xorl %eax, %eax
cmpq -0x48(%rbp), %rax
jge 0x14070
jmp 0x141bd
cmpq $0x0, -0x48(%rbp)
jge 0x1407c
jmp 0x1411c
cmpq $0xff, -0x20(%rbp)
jne 0x140c2
movl -0x34(%rbp), %eax
orl -0x38(%rbp), %eax
cmpl $0x0, %eax
je 0x140a8
movl -0x8(%rbp), %edi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x13be0
movl %eax, -0x4(%rbp)
jmp 0x1425a
movq -0x18(%rbp), %rsi
movl $0x1, %edi
callq 0x11080
movl $0x7fc00000, -0x4(%rbp) # imm = 0x7FC00000
jmp 0x1425a
cmpq $0x0, -0x20(%rbp)
jne 0x140d9
movq $0x1, -0x20(%rbp)
movq $0x1, -0x28(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x34(%rbp), %eax
jae 0x140e6
jmp 0x14224
movl -0x34(%rbp), %eax
cmpl -0x38(%rbp), %eax
jae 0x140f3
jmp 0x141a0
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x1, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
xorl %ecx, %ecx
movl %ecx, %esi
xorl %edx, %edx
movzbl %al, %edi
callq 0x11750
movl %eax, -0x4(%rbp)
jmp 0x1425a
cmpq $0xff, -0x28(%rbp)
jne 0x14161
cmpl $0x0, -0x38(%rbp)
je 0x14143
movl -0x8(%rbp), %edi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x13be0
movl %eax, -0x4(%rbp)
jmp 0x1425a
movzbl -0xd(%rbp), %eax
xorl $0x1, %eax
movl $0xff, %esi
xorl %edx, %edx
movzbl %al, %edi
callq 0x11750
movl %eax, -0x4(%rbp)
jmp 0x1425a
cmpq $0x0, -0x20(%rbp)
jne 0x14176
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x14181
movl -0x34(%rbp), %eax
orl $0x40000000, %eax       # imm = 0x40000000
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %edi
xorl %eax, %eax
movl %eax, %esi
subq -0x48(%rbp), %rsi
leaq -0x34(%rbp), %rdx
callq 0x158d0
movl -0x38(%rbp), %eax
orl $0x40000000, %eax       # imm = 0x40000000
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %eax
subl -0x34(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movzbl -0xd(%rbp), %eax
xorl $0x1, %eax
movb %al, -0xd(%rbp)
jmp 0x14235
cmpq $0xff, -0x20(%rbp)
jne 0x141e9
cmpl $0x0, -0x34(%rbp)
je 0x141e1
movl -0x8(%rbp), %edi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x13be0
movl %eax, -0x4(%rbp)
jmp 0x1425a
movl -0x8(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1425a
cmpq $0x0, -0x28(%rbp)
jne 0x141fe
movq -0x48(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x14209
movl -0x38(%rbp), %eax
orl $0x40000000, %eax       # imm = 0x40000000
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %edi
movq -0x48(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0x158d0
movl -0x34(%rbp), %eax
orl $0x40000000, %eax       # imm = 0x40000000
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
subl -0x38(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
movb -0xd(%rbp), %al
movq -0x30(%rbp), %rsi
movl -0x3c(%rbp), %edx
movq -0x18(%rbp), %rcx
movzbl %al, %edi
callq 0x11780
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)