// File: /workspace/github_c_makefile_star2_O1/mbitsnbites[P]SoftFP/softfloat.c
// Function: subFloatx80Sigs
static floatx80 subFloatx80Sigs(floatx80 a, floatx80 b, flag zSign,
                                float_status *status)
{
    int32 aExp, bExp, zExp;
    uint64_t aSig, bSig, zSig0, zSig1;
    int32 expDiff;
    floatx80 z;

    aSig = extractFloatx80Frac( a );
    aExp = extractFloatx80Exp( a );
    bSig = extractFloatx80Frac( b );
    bExp = extractFloatx80Exp( b );
    expDiff = aExp - bExp;
    if ( 0 < expDiff ) goto aExpBigger;
    if ( expDiff < 0 ) goto bExpBigger;
    if ( aExp == 0x7FFF ) {
        if ( (uint64_t) ( ( aSig | bSig )<<1 ) ) {
            return propagateFloatx80NaN(a, b, status);
        }
        float_raise(float_flag_invalid, status);
        z.low = floatx80_default_nan_low;
        z.high = floatx80_default_nan_high;
        return z;
    }
    if ( aExp == 0 ) {
        aExp = 1;
        bExp = 1;
    }
    zSig1 = 0;
    if ( bSig < aSig ) goto aBigger;
    if ( aSig < bSig ) goto bBigger;
    return packFloatx80(status->float_rounding_mode == float_round_down, 0, 0);
 bExpBigger:
    if ( bExp == 0x7FFF ) {
        if ((uint64_t)(bSig << 1)) {
            return propagateFloatx80NaN(a, b, status);
        }
        return packFloatx80( zSign ^ 1, 0x7FFF, LIT64( 0x8000000000000000 ) );
    }
    if ( aExp == 0 ) ++expDiff;
    shift128RightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );
 bBigger:
    sub128( bSig, 0, aSig, zSig1, &zSig0, &zSig1 );
    zExp = bExp;
    zSign ^= 1;
    goto normalizeRoundAndPack;
 aExpBigger:
    if ( aExp == 0x7FFF ) {
        if ((uint64_t)(aSig << 1)) {
            return propagateFloatx80NaN(a, b, status);
        }
        return a;
    }
    if ( bExp == 0 ) --expDiff;
    shift128RightJamming( bSig, 0, expDiff, &bSig, &zSig1 );
 aBigger:
    sub128( aSig, 0, bSig, zSig1, &zSig0, &zSig1 );
    zExp = aExp;
 normalizeRoundAndPack:
    return normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
                                         zSign, zExp, zSig0, zSig1, status);
}

// Assembly:
pushq %rax
movq %rdx, %r10
movq %rdi, %rax
movl $0x7fff, %edi           # imm = 0x7FFF
movl %esi, %r11d
andl %edi, %r11d
movl %ecx, %edx
andl %edi, %edx
movl %r11d, %edi
subl %edx, %edi
jle 0x10277
cmpl $0x7fff, %r11d          # imm = 0x7FFF
jne 0x102b5
leaq (,%rax,2), %rdx
testq %rdx, %rdx
je 0x103af
movq %rax, %rdi
movq %r10, %rdx
movq %r9, %r8
callq 0xfecb
jmp 0x103ad
js 0x102de
testl %r11d, %r11d
je 0x1032a
cmpl $0x7fff, %r11d          # imm = 0x7FFF
jne 0x10335
movq %r10, %rdx
orq %rax, %rdx
shlq %rdx
testq %rdx, %rdx
jne 0x10264
orb $0x1, 0x2(%r9)
movw $0xffff, %si            # imm = 0xFFFF
movabsq $-0x4000000000000000, %rax # imm = 0xC000000000000000
jmp 0x103af
cmpl $0x1, %edx
sbbl $0x0, %edi
je 0x1033a
movl %edi, %edx
negb %dl
andb $0x3f, %dl
cmpl $0x3f, %edi
ja 0x1031d
movq %r10, %rsi
movl %edx, %ecx
shlq %cl, %rsi
movl %edi, %ecx
shrq %cl, %r10
movq %r10, %rcx
movq %rsi, %r10
jmp 0x10340
cmpl $0x7fff, %edx           # imm = 0x7FFF
jne 0x1036d
leaq (,%r10,2), %rdx
testq %rdx, %rdx
jne 0x10264
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
notb %r8b
movzbl %r8b, %esi
shll $0xf, %esi
orl $0x7fff, %esi           # imm = 0x7FFF
incq %rax
jmp 0x103af
cmpl $0x40, %edi
jne 0x103b3
xorl %ecx, %ecx
jmp 0x10340
movl $0x1, %r11d
movl $0x1, %edx
cmpq %rax, %r10
jae 0x10359
movq %r10, %rcx
xorl %r10d, %r10d
movq %r10, %rdx
subq %rcx, %rax
cmpq $0x1, %r10
adcq $-0x1, %rax
movq %rax, %r10
movq %rdx, %rax
movl %r11d, %edx
jmp 0x10396
ja 0x10382
xorl %esi, %esi
cmpb $0x1, 0x1(%r9)
sete %sil
shll $0xf, %esi
xorl %eax, %eax
jmp 0x103af
cmpl $0x1, %r11d
movl $0x0, %esi
sbbl %esi, %esi
movl %esi, %r11d
subl %edi, %r11d
subl %edi, %esi
jne 0x103d2
movq %rax, %rcx
xorl %eax, %eax
subq %rcx, %r10
cmpq $0x1, %rax
adcq $-0x1, %r10
xorb $0x1, %r8b
negq %rax
movsbl 0x3(%r9), %edi
movzbl %r8b, %esi
movq %r10, %rcx
movq %rax, %r8
callq 0x11055
movl %edx, %esi
movl %esi, %edx
popq %rcx
retq
cmpl $0x7f, %edi
ja 0x103f4
movq %r10, %rsi
movl %edi, %ecx
shrq %cl, %rsi
movl %edx, %ecx
shlq %cl, %r10
xorl %edx, %edx
testq %r10, %r10
setne %dl
orq %rsi, %rdx
jmp 0x103fc
negb %r11b
andb $0x3f, %r11b
cmpl $0x3f, %esi
ja 0x10406
movq %rax, %rdi
movl %r11d, %ecx
shlq %cl, %rdi
movl %esi, %ecx
shrq %cl, %rax
movq %rax, %rcx
movq %rdi, %rax
jmp 0x10387
xorl %edx, %edx
testq %r10, %r10
setne %dl
xorl %ecx, %ecx
movq %rdx, %r10
jmp 0x10340
cmpl $0x40, %esi
jne 0x10412
xorl %ecx, %ecx
jmp 0x10387
cmpl $0x7f, %esi
ja 0x10433
movq %rax, %rdi
movl %esi, %ecx
shrq %cl, %rdi
movl %r11d, %ecx
shlq %cl, %rax
xorl %esi, %esi
testq %rax, %rax
setne %sil
orq %rdi, %rsi
jmp 0x1043c
xorl %esi, %esi
testq %rax, %rax
setne %sil
xorl %ecx, %ecx
movq %rsi, %rax
jmp 0x10387