// File: /workspace/github_c_makefile_star2_O0/gplessis[P]dotdeb-redis/src/t_string.c
// Function: incrbyfloatCommand
void incrbyfloatCommand(client *c) {
    long double incr, value;
    robj *o, *new, *aux;

    o = lookupKeyWrite(c->db,c->argv[1]);
    if (o != NULL && checkType(c,o,OBJ_STRING)) return;
    if (getLongDoubleFromObjectOrReply(c,o,&value,NULL) != C_OK ||
        getLongDoubleFromObjectOrReply(c,c->argv[2],&incr,NULL) != C_OK)
        return;

    value += incr;
    if (isnan(value) || isinf(value)) {
        addReplyError(c,"increment would produce NaN or Infinity");
        return;
    }
    new = createStringObjectFromLongDouble(value,1);
    if (o)
        dbOverwrite(c->db,c->argv[1],new);
    else
        dbAdd(c->db,c->argv[1],new);
    signalModifiedKey(c->db,c->argv[1]);
    notifyKeyspaceEvent(NOTIFY_STRING,"incrbyfloat",c->argv[1],c->db->id);
    server.dirty++;
    addReplyBulk(c,new);

    /* Always replicate INCRBYFLOAT as a SET command with the final value
     * in order to make sure that differences in float precision or formatting
     * will not create differences in replicas or after an AOF restart. */
    aux = createStringObject("SET",3);
    rewriteClientCommandArgument(c,0,aux);
    decrRefCount(aux);
    rewriteClientCommandArgument(c,2,new);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x4a6f0
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x58b19
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
xorl %edx, %edx
callq 0x490a0
cmpl $0x0, %eax
je 0x58b19
jmp 0x58cba
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rsi
leaq -0x30(%rbp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x49cf0
cmpl $0x0, %eax
jne 0x58b55
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x10(%rax), %rsi
leaq -0x20(%rbp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x49cf0
cmpl $0x0, %eax
je 0x58b5a
jmp 0x58cba
fldt -0x20(%rbp)
fldt -0x30(%rbp)
faddp %st, %st(1)
fstpt -0x30(%rbp)
fldt -0x30(%rbp)
fucompi %st(0), %st
setp %al
testb $0x1, %al
jne 0x58b9f
fldt -0x30(%rbp)
fld %st(0)
fstpt -0x60(%rbp)
movswq -0x58(%rbp), %rax
fabs
shrq $0xf, %rax
movl %eax, %ecx
orl $0x1, %ecx
xorl %eax, %eax
flds 0xe2a83(%rip)           # 0x13b614
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
cmovael %ecx, %eax
cmpl $0x0, %eax
je 0x58bb4
movq -0x8(%rbp), %rdi
leaq 0xe4d90(%rip), %rsi     # 0x13d93a
callq 0x42f90
jmp 0x58cba
fldt -0x30(%rbp)
movq %rsp, %rax
fstpt (%rax)
movl $0x1, %edi
callq 0x487d0
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x58bf0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x40(%rbp), %rdx
callq 0x4a8e0
jmp 0x58c0d
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x40(%rbp), %rdx
callq 0x4a7d0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x4aa60
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rdx
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x30(%rax), %ecx
movl $0x8, %edi
leaq 0xdeab5(%rip), %rsi     # 0x1376fe
callq 0x9ce20
leaq 0x11f583(%rip), %rax    # 0x1781d8
movq 0x720(%rax), %rcx
addq $0x1, %rcx
leaq 0x11f571(%rip), %rax    # 0x1781d8
movq %rcx, 0x720(%rax)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x43630
leaq 0xee43e(%rip), %rdi     # 0x1470c0
movl $0x3, %esi
callq 0x486a0
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rdx
xorl %esi, %esi
callq 0x46ad0
movq -0x48(%rbp), %rdi
callq 0x48f70
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rdx
movl $0x2, %esi
callq 0x46ad0
addq $0x70, %rsp
popq %rbp
retq