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

    if (getLongDoubleFromObjectOrReply(c,c->argv[3],&incr,NULL) != C_OK) return;
    if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
    if ((current = hashTypeGetObject(o,c->argv[2])) != NULL) {
        if (getLongDoubleFromObjectOrReply(c,current,&value,
            "hash value is not a valid float") != C_OK) {
            decrRefCount(current);
            return;
        }
        decrRefCount(current);
    } else {
        value = 0;
    }

    value += incr;
    new = createStringObjectFromLongDouble(value,1);
    hashTypeTryObjectEncoding(o,&c->argv[2],NULL);
    hashTypeSet(o,c->argv[2],new);
    addReplyBulk(c,new);
    signalModifiedKey(c->db,c->argv[1]);
    notifyKeyspaceEvent(NOTIFY_HASH,"hincrbyfloat",c->argv[1],c->db->id);
    server.dirty++;

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x18(%rax), %rsi
leaq -0x30(%rbp), %rdx
xorl %eax, %eax
movl %eax, %ecx
callq 0x49cf0
cmpl $0x0, %eax
je 0x67b33
jmp 0x67cba
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x672d0
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x67b57
jmp 0x67cba
movq -0x38(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x10(%rax), %rsi
callq 0x666c0
movq %rax, -0x40(%rbp)
cmpq $0x0, %rax
je 0x67bac
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
leaq -0x20(%rbp), %rdx
leaq 0xd65ff(%rip), %rcx     # 0x13e188
callq 0x49cf0
cmpl $0x0, %eax
je 0x67ba1
movq -0x40(%rbp), %rdi
callq 0x48f70
jmp 0x67cba
movq -0x40(%rbp), %rdi
callq 0x48f70
jmp 0x67bb1
fldz
fstpt -0x20(%rbp)
fldt -0x30(%rbp)
fldt -0x20(%rbp)
faddp %st, %st(1)
fstpt -0x20(%rbp)
fldt -0x20(%rbp)
movq %rsp, %rax
fstpt (%rax)
movl $0x1, %edi
callq 0x487d0
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rsi
addq $0x10, %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x66440
movq -0x38(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x10(%rax), %rsi
movq -0x48(%rbp), %rdx
callq 0x66980
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x43630
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 $0x40, %edi
leaq 0xcfab0(%rip), %rsi     # 0x1376fd
callq 0x9ce20
leaq 0x11057f(%rip), %rax    # 0x1781d8
movq 0x720(%rax), %rcx
addq $0x1, %rcx
leaq 0x11056d(%rip), %rax    # 0x1781d8
movq %rcx, 0x720(%rax)
leaq 0xd652f(%rip), %rdi     # 0x13e1a8
movl $0x4, %esi
callq 0x486a0
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rdx
xorl %esi, %esi
callq 0x46ad0
movq -0x50(%rbp), %rdi
callq 0x48f70
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rdx
movl $0x3, %esi
callq 0x46ad0
movq -0x48(%rbp), %rdi
callq 0x48f70
addq $0x60, %rsp
popq %rbp
retq