// File: akshayrajput[P]ARMV8_Simulator/./ADDS.cpp
// Function: ADDS()
void ADDS()
{
    int sf = IR.getLowerData() & 0x80000000;
    int op = IR.getLowerData() & 0x40000000;
    int S =  IR.getLowerData() & 0x20000000;
    int mod = (IR.getLowerData() & 0x1f000000) >> 24;
    int shift = (IR.getLowerData() & 0x00c00000) >> 22;
    int imm12 = (IR.getLowerData() & 0x003ffc00) >>10;
    int imm6 = (IR.getLowerData() & 0x0000fc00) >>10;
    int rm = (IR.getLowerData() & 0x001f0000) >> 16;
    int rn = (IR.getLowerData() & 0x000003e0) >> 5;
    int rd = (IR.getLowerData() & 0x0000001f);
    bool sub_op = false;
    int64_t imm;
    int amount = imm6;
    
    if(op)  sub_op = true;

    if(rd == 31 && sub_op)
    {
 	    CMP();
	    return;
    }
    if(shift == 0)
    {
        if (sf)
        {
            imm = (uint64_t)imm12;
        }
        else
        {
            imm = imm12;
        }
    }
    
    else if(shift == 1)
    {
        if(sf)
        {
            imm = (uint64_t)imm12;
            imm = imm << 12;
        }
        else
        {
            imm = imm12;
            imm = imm << 12;
        }
    }
    bool setFlag = false;
    if(S == 1) setFlag = true;
    if(mod == 17) // ADDS immediate
    {
        if(sf)  //64 bit
        {
            int carry = 0;
            if(sub_op)
            {
                imm = -imm;
                carry = 0;   
            }
            uint64_t rn_data = R[rn].getData();
            uint64_t dat = rn_data + imm + carry;
            
            
         	if(rn_data > 0 && imm > 0 && dat < 0)
		{
            		OFLAG = true;
		    	printf("[log] - Overflow flag\n");
         	}
        	if(rn_data < 0 && imm < 0 && dat > 0)
		{
        	    OFLAG = true;
			    printf("[log] - Zero flag set\n");
        	}

                ZFLAG = (dat == 0);
                
		if(ZFLAG)
			printf("[log] - Zero flag set\n");
	
                NFLAG = (dat < 0);
		if(NFLAG)
			printf("[log] - Negative flag set\n");
                
                if(!sub_op)
		{	
			CFLAG = rn_data > (0xffffffffffffffff - (imm + carry));
        	}
		else
		{
			CFLAG = rn_data < (-imm);
		}
		if(CFLAG)
			printf("[log] - Carry flag set\n");

            if(rd == 31 && !S)
                R[31].setData(dat);
            else
                R[rd].setData(dat);
        }
        
        else//32 bit
        {
            int carry = 0;
            if(sub_op)
            {
                imm = -imm;
                carry = 0;   
            }
            
            int rn_data = R[rn].getLowerData();
            int dat = rn_data + imm + carry;
            
            
            if(R[rn].getLowerData() > 0 && imm > 0 && dat < 0)
             {
                OFLAG = true;
                printf("[log] - Overflow flag set\n");
             }
            
            if(dat == 0)
            {
                ZFLAG = true;
                printf("[log] - Zero flag set\n");
            }
            if(dat < 0)
            {
                NFLAG = true;
                printf("[log] - Negative flag set\n");
            }
            if(!sub_op)
	      CFLAG = rn_data > (0xffffffff - (imm + carry));
            else
		{
			CFLAG = rn_data < (-imm);
		}


            if(CFLAG)
            	printf("[log] - Carry flag set.\n");
            
            if(rd == 31 && !S)
                R[31].setData(dat);
            else
                R[rd].setData(dat);
        }
    }
    
    if(mod == 11)   //shifted register
    {
	printf("[log] - ADDS register\n");
        if(sf)      //64 bit registers
        {
            uint64_t op1 = R[rn].getData();
            
            uint64_t op2 = R[rm].getData();
            if(shift == 0)
                op2 = op2 << (amount%64);
            else if(shift == 1 && shift == 2)
                op2 = op2 >> (amount%64);
            uint64_t carry = 0;
            if(sub_op)
            {
                op2 = -op2;
                carry = 0;
            }
            
            uint64_t dat = op1 + op2 + carry;
            if(rd == 31 && !S)
                R[31].setData(dat);
            else
                R[rd].setData(dat);
           
            if(op1 > 0 && op2 > 0 && dat < 0)
	    	{
			printf("[log] - Overflow flag set\n");
                OFLAG = true;
            }
            if(dat == 0)
	    	{
			printf("[log] - Zero flag set \n");
                ZFLAG = true;
            }
            if(dat < 0)
	    {
		printf("[log]- Negative flag set\n");
                NFLAG = true;
            }
		if(!sub_op)
            		CFLAG = op1 > (0xffffffffffffffff - (op2 + carry));
		else
		{
			CFLAG = op1 < (-op2);
		}

	    if(CFLAG)
	    {
		printf("[log] -Carry flag set \n");
	    }
        }
       
        else     //32 bit registers
        {
            int op1 = R[rn].getLowerData();
            
            int op2 = R[rm].getLowerData();
            if(shift == 0)
                op2 = op2 << (amount%32);
            else if(shift == 1 && shift == 2)
                op2 = op2 >> (amount%32);
            int carry = 0;
            if(sub_op)
            {
                op2 = ~op2;
                carry = 1;
            }
            
            int dat = op1 + op2 + carry;
            if(rd == 31 && !S)
                R[31].setLowerData(dat);
            else
                R[rd].setLowerData(dat);
           
            if(op1 > 0 && op2 > 0 && dat < 0)
	    {
                OFLAG = true;
		printf("[log] -Overflow flag set \n");

	    }
            if(dat == 0)
	    {
                ZFLAG = true;
		printf("[log] -Zero flag set \n");
	    }

            if(dat < 0)
	    {
                NFLAG = true; 
		printf("[log] -Negative flag set \n");
            }   
	    if(!sub_op)
            	CFLAG = op1 > (0xffffffff - op2);
	    else
	    {
	    	CFLAG = op1<(-op2);
	    }

	    if(CFLAG)
		    printf("[log] - carry flag set");
           
        }
       
    }
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
leaq 0x1b1be(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x80000000, %eax       # imm = 0x80000000
movl %eax, -0x4(%rbp)
leaq 0x1b1aa(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x40000000, %eax       # imm = 0x40000000
movl %eax, -0x8(%rbp)
leaq 0x1b196(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x20000000, %eax       # imm = 0x20000000
movl %eax, -0xc(%rbp)
leaq 0x1b182(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f000000, %eax       # imm = 0x1F000000
shrl $0x18, %eax
movl %eax, -0x10(%rbp)
leaq 0x1b16b(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0x14(%rbp)
leaq 0x1b154(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3ffc00, %eax         # imm = 0x3FFC00
shrl $0xa, %eax
movl %eax, -0x18(%rbp)
leaq 0x1b13d(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xfc00, %eax           # imm = 0xFC00
shrl $0xa, %eax
movl %eax, -0x1c(%rbp)
leaq 0x1b126(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f0000, %eax         # imm = 0x1F0000
shrl $0x10, %eax
movl %eax, -0x20(%rbp)
leaq 0x1b10f(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0x24(%rbp)
leaq 0x1b0f8(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0x28(%rbp)
movb $0x0, -0x29(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x8(%rbp)
je 0x3107
movb $0x1, -0x29(%rbp)
cmpl $0x1f, -0x28(%rbp)
jne 0x311d
testb $0x1, -0x29(%rbp)
je 0x311d
callq 0x2830
jmp 0x3871
cmpl $0x0, -0x14(%rbp)
jne 0x313d
cmpl $0x0, -0x4(%rbp)
je 0x3133
movslq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0x313b
movslq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0x3177
cmpl $0x1, -0x14(%rbp)
jne 0x3175
cmpl $0x0, -0x4(%rbp)
je 0x315f
movslq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
shlq $0xc, %rax
movq %rax, -0x38(%rbp)
jmp 0x3173
movslq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
shlq $0xc, %rax
movq %rax, -0x38(%rbp)
jmp 0x3175
jmp 0x3177
movb $0x0, -0x3d(%rbp)
cmpl $0x1, -0xc(%rbp)
jne 0x3185
movb $0x1, -0x3d(%rbp)
cmpl $0x11, -0x10(%rbp)
jne 0x3488
cmpl $0x0, -0x4(%rbp)
je 0x332a
movl $0x0, -0x44(%rbp)
testb $0x1, -0x29(%rbp)
je 0x31b7
xorl %eax, %eax
subq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
movl $0x0, -0x44(%rbp)
movslq -0x24(%rbp), %rax
leaq 0xaf1e(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
addq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x50(%rbp)
jbe 0x320f
cmpq $0x0, -0x38(%rbp)
jle 0x320f
cmpq $0x0, -0x58(%rbp)
jae 0x320f
movb $0x1, 0xaed1(%rip)      # 0xe0d2
leaq 0x8281(%rip), %rdi      # 0xb489
movb $0x0, %al
callq 0x1030
cmpq $0x0, -0x50(%rbp)
jae 0x3239
cmpq $0x0, -0x38(%rbp)
jge 0x3239
cmpq $0x0, -0x58(%rbp)
jbe 0x3239
movb $0x1, 0xaea7(%rip)      # 0xe0d2
leaq 0x826e(%rip), %rdi      # 0xb4a0
movb $0x0, %al
callq 0x1030
cmpq $0x0, -0x58(%rbp)
sete %al
andb $0x1, %al
movb %al, 0xae88(%rip)       # 0xe0d1
testb $0x1, 0xae81(%rip)      # 0xe0d1
je 0x3260
leaq 0x8247(%rip), %rdi      # 0xb4a0
movb $0x0, %al
callq 0x1030
cmpq $0x0, -0x58(%rbp)
setb %al
andb $0x1, %al
movb %al, 0xae63(%rip)       # 0xe0d3
testb $0x1, 0xae5c(%rip)      # 0xe0d3
je 0x3287
leaq 0x8237(%rip), %rdi      # 0xb4b7
movb $0x0, %al
callq 0x1030
testb $0x1, -0x29(%rbp)
jne 0x32b6
movq -0x50(%rbp), %rax
movq -0x38(%rbp), %rdx
movslq -0x44(%rbp), %rcx
addq %rcx, %rdx
movq $-0x1, %rcx
subq %rdx, %rcx
cmpq %rcx, %rax
seta %al
andb $0x1, %al
movb %al, 0xae20(%rip)       # 0xe0d4
jmp 0x32ce
movq -0x50(%rbp), %rax
xorl %ecx, %ecx
subq -0x38(%rbp), %rcx
cmpq %rcx, %rax
setb %al
andb $0x1, %al
movb %al, 0xae06(%rip)       # 0xe0d4
testb $0x1, 0xadff(%rip)      # 0xe0d4
je 0x32e5
leaq 0x81f4(%rip), %rdi      # 0xb4d2
movb $0x0, %al
callq 0x1030
cmpl $0x1f, -0x28(%rbp)
jne 0x330a
cmpl $0x0, -0xc(%rbp)
jne 0x330a
movq -0x58(%rbp), %rsi
leaq 0xade4(%rip), %rdi      # 0xe0e0
addq $0xf8, %rdi
callq 0xa710
jmp 0x3325
movslq -0x28(%rbp), %rax
leaq 0xadcb(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0x58(%rbp), %rsi
callq 0xa710
jmp 0x3486
movl $0x0, -0x5c(%rbp)
testb $0x1, -0x29(%rbp)
je 0x3348
xorl %eax, %eax
subq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
movl $0x0, -0x5c(%rbp)
movslq -0x24(%rbp), %rax
leaq 0xad8d(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x60(%rbp)
movslq -0x60(%rbp), %rax
addq -0x38(%rbp), %rax
movslq -0x5c(%rbp), %rcx
addq %rcx, %rax
movl %eax, -0x64(%rbp)
movslq -0x24(%rbp), %rax
leaq 0xad61(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
cmpl $0x0, %eax
jbe 0x33b2
cmpq $0x0, -0x38(%rbp)
jle 0x33b2
cmpl $0x0, -0x64(%rbp)
jge 0x33b2
movb $0x1, 0xad2e(%rip)      # 0xe0d2
leaq 0x813f(%rip), %rdi      # 0xb4ea
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x64(%rbp)
jne 0x33cd
movb $0x1, 0xad12(%rip)      # 0xe0d1
leaq 0x80da(%rip), %rdi      # 0xb4a0
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x64(%rbp)
jge 0x33e8
movb $0x1, 0xacf9(%rip)      # 0xe0d3
leaq 0x80d6(%rip), %rdi      # 0xb4b7
movb $0x0, %al
callq 0x1030
testb $0x1, -0x29(%rbp)
jne 0x3415
movslq -0x60(%rbp), %rax
movq -0x38(%rbp), %rdx
movslq -0x5c(%rbp), %rcx
addq %rcx, %rdx
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
subq %rdx, %rcx
cmpq %rcx, %rax
setg %al
andb $0x1, %al
movb %al, 0xacc1(%rip)       # 0xe0d4
jmp 0x342d
movslq -0x60(%rbp), %rax
xorl %ecx, %ecx
subq -0x38(%rbp), %rcx
cmpq %rcx, %rax
setl %al
andb $0x1, %al
movb %al, 0xaca7(%rip)       # 0xe0d4
testb $0x1, 0xaca0(%rip)      # 0xe0d4
je 0x3444
leaq 0x80c8(%rip), %rdi      # 0xb505
movb $0x0, %al
callq 0x1030
cmpl $0x1f, -0x28(%rbp)
jne 0x3469
cmpl $0x0, -0xc(%rbp)
jne 0x3469
movslq -0x64(%rbp), %rsi
leaq 0xac85(%rip), %rdi      # 0xe0e0
addq $0xf8, %rdi
callq 0xa710
jmp 0x3484
movslq -0x28(%rbp), %rax
leaq 0xac6c(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movslq -0x64(%rbp), %rsi
callq 0xa710
jmp 0x3486
jmp 0x3488
cmpl $0xb, -0x10(%rbp)
jne 0x3871
leaq 0x8085(%rip), %rdi      # 0xb51e
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x4(%rbp)
je 0x3686
movslq -0x24(%rbp), %rax
leaq 0xac2b(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x70(%rbp)
movslq -0x20(%rbp), %rax
leaq 0xac10(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x78(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x350e
movq -0x78(%rbp), %rax
movq %rax, -0xa0(%rbp)
movl -0x3c(%rbp), %eax
movl $0x40, %ecx
cltd
idivl %ecx
movq -0xa0(%rbp), %rax
movl %edx, %ecx
shlq %cl, %rax
movq %rax, -0x78(%rbp)
jmp 0x3542
cmpl $0x1, -0x14(%rbp)
jne 0x3540
cmpl $0x2, -0x14(%rbp)
jne 0x3540
movq -0x78(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0x3c(%rbp), %eax
movl $0x40, %ecx
cltd
idivl %ecx
movq -0xa8(%rbp), %rax
movl %edx, %ecx
shrq %cl, %rax
movq %rax, -0x78(%rbp)
jmp 0x3542
movq $0x0, -0x80(%rbp)
testb $0x1, -0x29(%rbp)
je 0x3562
xorl %eax, %eax
subq -0x78(%rbp), %rax
movq %rax, -0x78(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x70(%rbp), %rax
addq -0x78(%rbp), %rax
addq -0x80(%rbp), %rax
movq %rax, -0x88(%rbp)
cmpl $0x1f, -0x28(%rbp)
jne 0x359d
cmpl $0x0, -0xc(%rbp)
jne 0x359d
movq -0x88(%rbp), %rsi
leaq 0xab51(%rip), %rdi      # 0xe0e0
addq $0xf8, %rdi
callq 0xa710
jmp 0x35bb
movslq -0x28(%rbp), %rax
leaq 0xab38(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movq -0x88(%rbp), %rsi
callq 0xa710
cmpq $0x0, -0x70(%rbp)
jbe 0x35e8
cmpq $0x0, -0x78(%rbp)
jbe 0x35e8
cmpq $0x0, -0x88(%rbp)
jae 0x35e8
leaq 0x7f10(%rip), %rdi      # 0xb4ea
movb $0x0, %al
callq 0x1030
movb $0x1, 0xaaea(%rip)      # 0xe0d2
cmpq $0x0, -0x88(%rbp)
jne 0x3607
leaq 0x7f3c(%rip), %rdi      # 0xb535
movb $0x0, %al
callq 0x1030
movb $0x1, 0xaaca(%rip)      # 0xe0d1
cmpq $0x0, -0x88(%rbp)
jae 0x3626
leaq 0x7f35(%rip), %rdi      # 0xb54d
movb $0x0, %al
callq 0x1030
movb $0x1, 0xaaad(%rip)      # 0xe0d3
testb $0x1, -0x29(%rbp)
jne 0x3652
movq -0x70(%rbp), %rax
movq -0x78(%rbp), %rdx
addq -0x80(%rbp), %rdx
movq $-0x1, %rcx
subq %rdx, %rcx
cmpq %rcx, %rax
seta %al
andb $0x1, %al
movb %al, 0xaa84(%rip)       # 0xe0d4
jmp 0x366a
movq -0x70(%rbp), %rax
xorl %ecx, %ecx
subq -0x78(%rbp), %rcx
cmpq %rcx, %rax
setb %al
andb $0x1, %al
movb %al, 0xaa6a(%rip)       # 0xe0d4
testb $0x1, 0xaa63(%rip)      # 0xe0d4
je 0x3681
leaq 0x7eed(%rip), %rdi      # 0xb567
movb $0x0, %al
callq 0x1030
jmp 0x386f
movslq -0x24(%rbp), %rax
leaq 0xaa4f(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x8c(%rbp)
movslq -0x20(%rbp), %rax
leaq 0xaa32(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x90(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x36ef
movl -0x90(%rbp), %eax
movl %eax, -0xac(%rbp)
movl -0x3c(%rbp), %eax
movl $0x20, %ecx
cltd
idivl %ecx
movl -0xac(%rbp), %eax
movl %edx, %ecx
shll %cl, %eax
movl %eax, -0x90(%rbp)
jmp 0x3724
cmpl $0x1, -0x14(%rbp)
jne 0x3722
cmpl $0x2, -0x14(%rbp)
jne 0x3722
movl -0x90(%rbp), %eax
movl %eax, -0xb0(%rbp)
movl -0x3c(%rbp), %eax
movl $0x20, %ecx
cltd
idivl %ecx
movl -0xb0(%rbp), %eax
movl %edx, %ecx
sarl %cl, %eax
movl %eax, -0x90(%rbp)
jmp 0x3724
movl $0x0, -0x94(%rbp)
testb $0x1, -0x29(%rbp)
je 0x374d
movl -0x90(%rbp), %eax
xorl $-0x1, %eax
movl %eax, -0x90(%rbp)
movl $0x1, -0x94(%rbp)
movl -0x8c(%rbp), %eax
addl -0x90(%rbp), %eax
addl -0x94(%rbp), %eax
movl %eax, -0x98(%rbp)
cmpl $0x1f, -0x28(%rbp)
jne 0x378c
cmpl $0x0, -0xc(%rbp)
jne 0x378c
movl -0x98(%rbp), %esi
leaq 0xa962(%rip), %rdi      # 0xe0e0
addq $0xf8, %rdi
callq 0xa730
jmp 0x37a9
movslq -0x28(%rbp), %rax
leaq 0xa949(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
movl -0x98(%rbp), %esi
callq 0xa730
cmpl $0x0, -0x8c(%rbp)
jle 0x37d9
cmpl $0x0, -0x90(%rbp)
jle 0x37d9
cmpl $0x0, -0x98(%rbp)
jge 0x37d9
movb $0x1, 0xa907(%rip)      # 0xe0d2
leaq 0x7dad(%rip), %rdi      # 0xb57f
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x98(%rbp)
jne 0x37f7
movb $0x1, 0xa8e8(%rip)      # 0xe0d1
leaq 0x7daa(%rip), %rdi      # 0xb59a
movb $0x0, %al
callq 0x1030
cmpl $0x0, -0x98(%rbp)
jge 0x3815
movb $0x1, 0xa8cc(%rip)      # 0xe0d3
leaq 0x7da3(%rip), %rdi      # 0xb5b1
movb $0x0, %al
callq 0x1030
testb $0x1, -0x29(%rbp)
jne 0x383b
movl -0x8c(%rbp), %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
subl -0x90(%rbp), %ecx
cmpl %ecx, %eax
seta %al
andb $0x1, %al
movb %al, 0xa89b(%rip)       # 0xe0d4
jmp 0x3856
movl -0x8c(%rbp), %eax
xorl %ecx, %ecx
subl -0x90(%rbp), %ecx
cmpl %ecx, %eax
setl %al
andb $0x1, %al
movb %al, 0xa87e(%rip)       # 0xe0d4
testb $0x1, 0xa877(%rip)      # 0xe0d4
je 0x386d
leaq 0x7d66(%rip), %rdi      # 0xb5cc
movb $0x0, %al
callq 0x1030
jmp 0x386f
jmp 0x3871
addq $0xb0, %rsp
popq %rbp
retq
nopw (%rax,%rax)