// File: /workspace/github_c_makefile_star2_O0/mbitsnbites[P]SoftFP/./softfloat-specialize.h
// Function: propagateFloat128NaN
static float128 propagateFloat128NaN(float128 a, float128 b,
                                     float_status *status)
{
    flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN;
    flag aIsLargerSignificand;

    aIsQuietNaN = float128_is_quiet_nan( a );
    aIsSignalingNaN = float128_is_signaling_nan( a );
    bIsQuietNaN = float128_is_quiet_nan( b );
    bIsSignalingNaN = float128_is_signaling_nan( b );

    if (aIsSignalingNaN | bIsSignalingNaN) {
        float_raise(float_flag_invalid, status);
    }

    if (status->default_nan_mode) {
        a.low = float128_default_nan_low;
        a.high = float128_default_nan_high;
        return a;
    }

    if (lt128(a.high<<1, a.low, b.high<<1, b.low)) {
        aIsLargerSignificand = 0;
    } else if (lt128(b.high<<1, b.low, a.high<<1, a.low)) {
        aIsLargerSignificand = 1;
    } else {
        aIsLargerSignificand = (a.high < b.high) ? 1 : 0;
    }

    if (pickNaN(aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN,
                aIsLargerSignificand)) {
        return float128_maybe_silence_nan(b);
    } else {
        return float128_maybe_silence_nan(a);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x20(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x30(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x38(%rbp)
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x11440
movb %al, -0x39(%rbp)
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x114a0
movb %al, -0x3a(%rbp)
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11440
movb %al, -0x3b(%rbp)
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x114a0
movb %al, -0x3c(%rbp)
movzbl -0x3a(%rbp), %eax
movzbl -0x3c(%rbp), %ecx
orl %ecx, %eax
cmpl $0x0, %eax
je 0x1f4f9
movq -0x38(%rbp), %rsi
movl $0x1, %edi
callq 0x11080
movq -0x38(%rbp), %rax
cmpb $0x0, 0x6(%rax)
je 0x1f52e
movq $0x0, -0x20(%rbp)
movabsq $0x7fff800000000000, %rax # imm = 0x7FFF800000000000
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1f5e7
movq -0x18(%rbp), %rdi
shlq %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
shlq %rdx
movq -0x30(%rbp), %rcx
callq 0x19d70
cmpb $0x0, %al
je 0x1f553
movb $0x0, -0x3d(%rbp)
jmp 0x1f592
movq -0x28(%rbp), %rdi
shlq %rdi
movq -0x30(%rbp), %rsi
movq -0x18(%rbp), %rdx
shlq %rdx
movq -0x20(%rbp), %rcx
callq 0x19d70
cmpb $0x0, %al
je 0x1f578
movb $0x1, -0x3d(%rbp)
jmp 0x1f590
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %rsi
xorl %eax, %eax
movl $0x1, %ecx
cmpq %rsi, %rdx
cmovbl %ecx, %eax
movb %al, -0x3d(%rbp)
jmp 0x1f592
movb -0x39(%rbp), %sil
movb -0x3a(%rbp), %dl
movb -0x3b(%rbp), %cl
movb -0x3c(%rbp), %al
movzbl %sil, %edi
movzbl %dl, %esi
movzbl %cl, %edx
movzbl %al, %ecx
movzbl -0x3d(%rbp), %r8d
callq 0x24100
cmpl $0x0, %eax
je 0x1f5d2
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11500
movq %rax, -0x10(%rbp)
movq %rdx, -0x8(%rbp)
jmp 0x1f5e7
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x11500
movq %rax, -0x10(%rbp)
movq %rdx, -0x8(%rbp)
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rdx
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)