// File: shuimu[P]logistic-regression/lr.cpp
// Function: bdg()
void bdg() {
    for(int j = 0; j < D; j++) {
        J_sita_dev[j] = 0;
        for(int i = 0; i < M; i++) {
            J_sita_dev[j] += func(i)*train_features[i][j];
        }
    }
    J_sita_0_dev = 0;
    for(int i = 0; i < M; i++) J_sita_0_dev += func(i); 
    
    for(int j = 0; j < D; j++) J_sita_dev[j] /= M;
    J_sita_0_dev /= M;
    
    for(int j = 0; j < D; j++) J_sita[j] -= ALPHA*J_sita_dev[j];
    J_sita_0 -= ALPHA*J_sita_0_dev;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
cmpl 0x78c4(%rip), %eax      # 0x90ec
jge 0x18ce
movslq -0x4(%rbp), %rsi
leaq 0x797f(%rip), %rdi      # 0x91b8
callq 0x2530
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movl $0x0, -0x8(%rbp)
movl -0x8(%rbp), %eax
cmpl 0x7893(%rip), %eax      # 0x90e8
jge 0x18be
movl -0x8(%rbp), %edi
callq 0x1750
movsd %xmm0, -0x28(%rbp)
movslq -0x8(%rbp), %rsi
leaq 0x78b9(%rip), %rdi      # 0x9128
callq 0x2510
movq %rax, %rdi
movslq -0x4(%rbp), %rsi
callq 0x2530
movsd (%rax), %xmm0
movsd %xmm0, -0x20(%rbp)
movslq -0x4(%rbp), %rsi
leaq 0x7924(%rip), %rdi      # 0x91b8
callq 0x2530
movsd -0x28(%rbp), %xmm0
movsd -0x20(%rbp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0x184c
jmp 0x18c0
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x181f
xorps %xmm0, %xmm0
movsd %xmm0, 0x78ff(%rip)     # 0x91d8
movl $0x0, -0xc(%rbp)
movl -0xc(%rbp), %eax
cmpl 0x77ff(%rip), %eax      # 0x90e8
jge 0x190e
movl -0xc(%rbp), %edi
callq 0x1750
addsd 0x78dd(%rip), %xmm0     # 0x91d8
movsd %xmm0, 0x78d5(%rip)     # 0x91d8
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0x18e0
movl $0x0, -0x10(%rbp)
movl -0x10(%rbp), %eax
cmpl 0x77ce(%rip), %eax      # 0x90ec
jge 0x1959
cvtsi2sdl 0x77c0(%rip), %xmm0 # 0x90e8
movsd %xmm0, -0x30(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x7880(%rip), %rdi      # 0x91b8
callq 0x2530
movsd -0x30(%rbp), %xmm1
movsd (%rax), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0x1915
cvtsi2sdl 0x7787(%rip), %xmm1 # 0x90e8
movsd 0x786f(%rip), %xmm0     # 0x91d8
divsd %xmm1, %xmm0
movsd %xmm0, 0x7863(%rip)     # 0x91d8
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl 0x7767(%rip), %eax      # 0x90ec
jge 0x19f9
movsd 0x7751(%rip), %xmm0     # 0x90e0
movsd %xmm0, -0x40(%rbp)
movslq -0x14(%rbp), %rsi
leaq 0x7819(%rip), %rdi      # 0x91b8
callq 0x2530
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
movslq -0x14(%rbp), %rsi
leaq 0x77e8(%rip), %rdi      # 0x91a0
callq 0x2530
movsd -0x40(%rbp), %xmm0
movsd -0x38(%rbp), %xmm2
movsd (%rax), %xmm1
movq %xmm0, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x197c
movsd 0x76df(%rip), %xmm0     # 0x90e0
movsd 0x77cf(%rip), %xmm2     # 0x91d8
movsd 0x77bf(%rip), %xmm1     # 0x91d0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x7798(%rip)     # 0x91d0
addq $0x40, %rsp
popq %rbp
retq
nop