// File: /workspace/github_c_makefile_star2_O2/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 %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, %r14
movl %r8d, %ebp
movq %rdx, %r15
movl %esi, %edx
movq %rdi, %rbx
movq %rdi, 0x10(%rsp)
movl $0x7fff, %eax           # imm = 0x7FFF
movl %esi, %r12d
andl %eax, %r12d
movq %r15, 0x8(%rsp)
movl %ecx, %r13d
andl %eax, %r13d
movl %r12d, %eax
subl %r13d, %eax
jle 0xef6a
cmpl $0x7fff, %r12d          # imm = 0x7FFF
jne 0xefa8
leaq (,%rbx,2), %rax
testq %rax, %rax
je 0xf08d
movq %rbx, %rdi
movl %edx, %esi
movq %r15, %rdx
movq %r14, %r8
callq 0xec53
jmp 0xf08a
js 0xefe7
testl %r12d, %r12d
je 0xf020
cmpl $0x7fff, %r12d          # imm = 0x7FFF
jne 0xf027
movq %r15, %rax
orq %rbx, %rax
shlq %rax
testq %rax, %rax
jne 0xef55
orb $0x1, 0x2(%r14)
movw $0xffff, %dx            # imm = 0xFFFF
movabsq $-0x4000000000000000, %rbx # imm = 0xC000000000000000
jmp 0xf08d
cmpl $0x1, %r13d
sbbl $0x0, %eax
leaq 0x8(%rsp), %rcx
movq %rsp, %r13
movq %r15, %rdi
xorl %esi, %esi
movq %rax, %rdx
movq %rcx, %r15
movq %r13, %r8
callq 0xdc4f
movq (%r15), %r15
movq (%r13), %r8
subq %r15, %rbx
cmpq $0x1, %r8
adcq $-0x1, %rbx
movq %rbx, %r15
movl %r12d, %r13d
jmp 0xf070
cmpl $0x7fff, %r13d          # imm = 0x7FFF
jne 0xf038
leaq (,%r15,2), %rax
testq %rax, %rax
jne 0xef55
movabsq $0x7fffffffffffffff, %rbx # imm = 0x7FFFFFFFFFFFFFFF
notb %bpl
movzbl %bpl, %edx
shll $0xf, %edx
orl $0x7fff, %edx           # imm = 0x7FFF
incq %rbx
jmp 0xf08d
pushq $0x1
popq %r12
movl %r12d, %r13d
cmpq %rbx, %r15
jae 0xf031
xorl %r8d, %r8d
jmp 0xefd1
jbe 0xf09f
xorl %r8d, %r8d
jmp 0xf061
xorl %edx, %edx
cmpl $0x1, %r12d
sbbl %edx, %edx
subl %eax, %edx
leaq 0x10(%rsp), %r12
movq %rsp, %r8
movq %rbx, %rdi
xorl %esi, %esi
movq %r12, %rcx
callq 0xdc4f
movq (%r12), %rbx
movq %rsp, %rax
movq (%rax), %r8
subq %rbx, %r15
cmpq $0x1, %r8
adcq $-0x1, %r15
xorb $0x1, %bpl
negq %r8
movsbl 0x3(%r14), %edi
movzbl %bpl, %esi
movl %r13d, %edx
movq %r15, %rcx
movq %r14, %r9
callq 0xfb10
movq %rax, %rbx
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %edx, %edx
cmpb $0x1, 0x1(%r14)
sete %dl
shll $0xf, %edx
xorl %ebx, %ebx
jmp 0xf08d