// File: akshayrajput[P]ARMV8_Simulator/./CMP.cpp
// Function: CMP()
void CMP()
{
    printf("[log] - CMP instruction\n");
    int sf = IR.getLowerData() & 0x80000000;
    int op = IR.getLowerData() & 0x40000000;
    int S = IR.getLowerData() & 0x20000000;
    int shift = (IR.getLowerData()  & 0x00c00000) >> 22;
    int imm12 = (IR.getLowerData()  & 0x003ffc00) >> 10;
    int mod = (IR.getLowerData()  & 0x1f000000) >> 24;
    int rn = (IR.getLowerData()  & 0x000003e0) >> 5;
    int rd = IR.getLowerData()  & 0x0000001f;

    if(mod == 17)   //immediate
    {
	printf("[log] - CMP instruction immediate\n");
        uint64_t imm = imm12;
        if(shift == 1)
        {
            imm = imm12 << 12;
        }
        
        if(sf)
        {
            uint64_t dat = R[rn].getData();
            if((dat > 0 && imm < 0 && (dat-imm) < 0) || (dat < 0 && imm > 0 && (dat - imm) > 0))
                OFLAG = true;
            if(OFLAG)
		    printf("Overflow flag set\n");
            CFLAG = (dat <imm);
            if(CFLAG)
		    printf("Carry flag set\n");
            NFLAG = (dat < imm);
            if(NFLAG)
		    printf("Negative flag set\n");
            ZFLAG = (dat == imm);
            if(ZFLAG)
		    printf("Zero flag set\n");
        }
        
        else
        {
            int imm32 = (int)imm;
            int dat = R[rn].getLowerData();
            if((dat > 0 && imm32 < 0 && (dat-imm32) < 0) || (dat < 0 && imm32 > 0 && (dat - imm32) > 0))
                OFLAG = true;
            if(OFLAG)
		    printf("Overflow flag set\n");
            CFLAG = (dat < imm32);
            if(CFLAG)
		    	printf("Carry flag set\n");
		    	
            NFLAG = (dat < imm32);
            
            if(NFLAG)
		    	printf("Negative flag set\n");
		    	
            ZFLAG = (dat == imm32);
            if(ZFLAG)
		    	printf("Zero flag set\n");
        }
    }
    else if(mod == 11)  //extended or register
    {
	printf("[log] - CMP extended/register\n");
        int inst_t = IR.getLowerData() & 0x00200000;
        if(inst_t) //register
        {
            int rm = (IR.getLowerData() & 0x001f0000) >> 16;
            int imm6 = (IR.getLowerData() & 0x0000fc00) >> 10;
            if(sf)  //64 bit registers
            {
                if(shift == 0) //LSL
                {
                    uint64_t rn_data = R[rn].getData();
                    uint64_t rm_data = R[rm].getData();
                    rm_data = rm_data << imm6;
                    
                    if((rn_data > 0 && rm_data < 0 && (rn_data-rm_data) < 0) || (rn_data < 0 && rm_data > 0 && (rn_data - rm_data) > 0))
                OFLAG = true;
        if(OFLAG)
		    printf("Overflow flag set\n");
		    
            CFLAG = (rn_data < rm_data);
	    if(CFLAG)
		    printf("Carry flag set\n");
		    
            NFLAG = (rn_data < rm_data);
	    if(NFLAG)
		    printf("Negative flag set\n");
		    
            ZFLAG = (rn_data == rm_data);
        if(ZFLAG)
		    printf("Zero flag set\n");
        
                }
                
                else if(shift == 1 or shift == 2) // LSR or ASR(in c both are same)
                {
                    uint64_t rn_data = R[rn].getData();
                    uint64_t rm_data = R[rm].getData();
                    rm_data = rm_data >> imm6;
                    
                    if((rn_data > 0 && rm_data < 0 && (rn_data-rm_data) < 0) || (rn_data < 0 && rm_data > 0 && (rn_data - rm_data) > 0))
                OFLAG = true;
            if(OFLAG)
		    printf("Overflow flag set\n");
            CFLAG = (rn_data < rm_data);
		if(CFLAG)
		    printf("Carry flag set\n");

            NFLAG = (rn_data < rm_data);
		if(NFLAG)
		    printf("Negative flag set\n");

            ZFLAG = (rn_data == rm_data);
		if(ZFLAG)
		    printf("Zero flag set\n");

                }
            }
            
            else    //32 bit registers
            {
                if(shift == 0) //LSL
                {
                    uint32_t rn_data = R[rn].getLowerData();
                    uint32_t rm_data = R[rm].getLowerData();
                    rm_data = rm_data << imm6;
                    
                    if((rn_data > 0 && rm_data < 0 && (rn_data-rm_data) < 0) || (rn_data < 0 && rm_data > 0 && (rn_data - rm_data) > 0))
                OFLAG = true;
            
            CFLAG = (rn_data < rm_data);
            NFLAG = (rn_data < rm_data);
            ZFLAG = (rn_data == rm_data);
            if(NFLAG)
		    printf("Negative flag set\n");
		    if(CFLAG)
		    printf("Carry flag set\n");
		    if(ZFLAG)
		    printf("Zero flag set\n");
		    if(OFLAG)
		    printf("Overflow flag set\n");
                }
                
                else if(shift == 1 or shift == 2) // LSR or ASR(in c both are same)
                {
                    uint32_t rn_data = R[rn].getLowerData();
                    uint32_t rm_data = R[rm].getLowerData();
                    rm_data = rm_data >> imm6;
                    
                    if((rn_data > 0 && rm_data < 0 && (rn_data-rm_data) < 0) || (rn_data < 0 && rm_data > 0 && (rn_data - rm_data) > 0))
                OFLAG = true;
            
            CFLAG = (rn_data < rm_data);
            NFLAG = (rn_data < rm_data);
            ZFLAG = (rn_data == rm_data);
            
            if(CFLAG)
		    printf("Carry flag set\n");
		    if(NFLAG)
		    printf("Negative flag set\n");
		    if(ZFLAG)
		    printf("Zero flag set\n");
		    if(OFLAG)
		    printf("Overflow flag set\n");
                }
            }
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
leaq 0x8bec(%rip), %rdi      # 0xb42e
movb $0x0, %al
callq 0x1030
leaq 0x1b990(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x80000000, %eax       # imm = 0x80000000
movl %eax, -0x4(%rbp)
leaq 0x1b97c(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x40000000, %eax       # imm = 0x40000000
movl %eax, -0x8(%rbp)
leaq 0x1b968(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x20000000, %eax       # imm = 0x20000000
movl %eax, -0xc(%rbp)
leaq 0x1b954(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xc00000, %eax         # imm = 0xC00000
shrl $0x16, %eax
movl %eax, -0x10(%rbp)
leaq 0x1b93d(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3ffc00, %eax         # imm = 0x3FFC00
shrl $0xa, %eax
movl %eax, -0x14(%rbp)
leaq 0x1b926(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f000000, %eax       # imm = 0x1F000000
shrl $0x18, %eax
movl %eax, -0x18(%rbp)
leaq 0x1b90f(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x3e0, %eax            # imm = 0x3E0
shrl $0x5, %eax
movl %eax, -0x1c(%rbp)
leaq 0x1b8f8(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f, %eax
movl %eax, -0x20(%rbp)
cmpl $0x11, -0x18(%rbp)
jne 0x2b0f
leaq 0x8b43(%rip), %rdi      # 0xb447
movb $0x0, %al
callq 0x1030
movslq -0x14(%rbp), %rax
movq %rax, -0x28(%rbp)
cmpl $0x1, -0x10(%rbp)
jne 0x2925
movl -0x14(%rbp), %eax
shll $0xc, %eax
cltq
movq %rax, -0x28(%rbp)
cmpl $0x0, -0x4(%rbp)
je 0x2a23
movslq -0x1c(%rbp), %rax
leaq 0xb7a6(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jbe 0x2966
cmpq $0x0, -0x28(%rbp)
jae 0x2966
movq -0x30(%rbp), %rax
subq -0x28(%rbp), %rax
cmpq $0x0, %rax
jb 0x2982
cmpq $0x0, -0x30(%rbp)
jae 0x2989
cmpq $0x0, -0x28(%rbp)
jbe 0x2989
movq -0x30(%rbp), %rax
subq -0x28(%rbp), %rax
cmpq $0x0, %rax
jbe 0x2989
movb $0x1, 0xb749(%rip)      # 0xe0d2
testb $0x1, 0xb742(%rip)      # 0xe0d2
je 0x29a0
leaq 0x8b59(%rip), %rdi      # 0xb4f2
movb $0x0, %al
callq 0x1030
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
setb %al
andb $0x1, %al
movb %al, 0xb721(%rip)       # 0xe0d4
testb $0x1, 0xb71a(%rip)      # 0xe0d4
je 0x29ca
leaq 0x8b17(%rip), %rdi      # 0xb4da
movb $0x0, %al
callq 0x1030
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
setb %al
andb $0x1, %al
movb %al, 0xb6f6(%rip)       # 0xe0d3
testb $0x1, 0xb6ef(%rip)      # 0xe0d3
je 0x29f4
leaq 0x8ad2(%rip), %rdi      # 0xb4bf
movb $0x0, %al
callq 0x1030
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
sete %al
andb $0x1, %al
movb %al, 0xb6ca(%rip)       # 0xe0d1
testb $0x1, 0xb6c3(%rip)      # 0xe0d1
je 0x2a1e
leaq 0x8a91(%rip), %rdi      # 0xb4a8
movb $0x0, %al
callq 0x1030
jmp 0x2b0a
movq -0x28(%rbp), %rax
movl %eax, -0x34(%rbp)
movslq -0x1c(%rbp), %rax
leaq 0xb6ab(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x38(%rbp)
cmpl $0x0, -0x38(%rbp)
jle 0x2a5b
cmpl $0x0, -0x34(%rbp)
jge 0x2a5b
movl -0x38(%rbp), %eax
subl -0x34(%rbp), %eax
cmpl $0x0, %eax
jl 0x2a72
cmpl $0x0, -0x38(%rbp)
jge 0x2a79
cmpl $0x0, -0x34(%rbp)
jle 0x2a79
movl -0x38(%rbp), %eax
subl -0x34(%rbp), %eax
cmpl $0x0, %eax
jle 0x2a79
movb $0x1, 0xb659(%rip)      # 0xe0d2
testb $0x1, 0xb652(%rip)      # 0xe0d2
je 0x2a90
leaq 0x8a69(%rip), %rdi      # 0xb4f2
movb $0x0, %al
callq 0x1030
movl -0x38(%rbp), %eax
cmpl -0x34(%rbp), %eax
setl %al
andb $0x1, %al
movb %al, 0xb633(%rip)       # 0xe0d4
testb $0x1, 0xb62c(%rip)      # 0xe0d4
je 0x2ab8
leaq 0x8a29(%rip), %rdi      # 0xb4da
movb $0x0, %al
callq 0x1030
movl -0x38(%rbp), %eax
cmpl -0x34(%rbp), %eax
setl %al
andb $0x1, %al
movb %al, 0xb60a(%rip)       # 0xe0d3
testb $0x1, 0xb603(%rip)      # 0xe0d3
je 0x2ae0
leaq 0x89e6(%rip), %rdi      # 0xb4bf
movb $0x0, %al
callq 0x1030
movl -0x38(%rbp), %eax
cmpl -0x34(%rbp), %eax
sete %al
andb $0x1, %al
movb %al, 0xb5e0(%rip)       # 0xe0d1
testb $0x1, 0xb5d9(%rip)      # 0xe0d1
je 0x2b08
leaq 0x89a7(%rip), %rdi      # 0xb4a8
movb $0x0, %al
callq 0x1030
jmp 0x2b0a
jmp 0x3006
cmpl $0xb, -0x18(%rbp)
jne 0x3004
leaq 0x894a(%rip), %rdi      # 0xb46a
movb $0x0, %al
callq 0x1030
leaq 0x1b6b2(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x200000, %eax         # imm = 0x200000
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x3c(%rbp)
je 0x3002
leaq 0x1b694(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0x1f0000, %eax         # imm = 0x1F0000
shrl $0x10, %eax
movl %eax, -0x40(%rbp)
leaq 0x1b67d(%rip), %rdi     # 0x1e1e0
callq 0xa6e0
andl $0xfc00, %eax           # imm = 0xFC00
shrl $0xa, %eax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x4(%rbp)
je 0x2dd5
cmpl $0x0, -0x10(%rbp)
jne 0x2ca4
movslq -0x1c(%rbp), %rax
leaq 0xb54e(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x50(%rbp)
movslq -0x40(%rbp), %rax
leaq 0xb533(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movl -0x44(%rbp), %ecx
shlq %cl, %rax
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x50(%rbp)
jbe 0x2be7
cmpq $0x0, -0x58(%rbp)
jae 0x2be7
movq -0x50(%rbp), %rax
subq -0x58(%rbp), %rax
cmpq $0x0, %rax
jb 0x2c03
cmpq $0x0, -0x50(%rbp)
jae 0x2c0a
cmpq $0x0, -0x58(%rbp)
jbe 0x2c0a
movq -0x50(%rbp), %rax
subq -0x58(%rbp), %rax
cmpq $0x0, %rax
jbe 0x2c0a
movb $0x1, 0xb4c8(%rip)      # 0xe0d2
testb $0x1, 0xb4c1(%rip)      # 0xe0d2
je 0x2c21
leaq 0x88d8(%rip), %rdi      # 0xb4f2
movb $0x0, %al
callq 0x1030
movq -0x50(%rbp), %rax
cmpq -0x58(%rbp), %rax
setb %al
andb $0x1, %al
movb %al, 0xb4a0(%rip)       # 0xe0d4
testb $0x1, 0xb499(%rip)      # 0xe0d4
je 0x2c4b
leaq 0x8896(%rip), %rdi      # 0xb4da
movb $0x0, %al
callq 0x1030
movq -0x50(%rbp), %rax
cmpq -0x58(%rbp), %rax
setb %al
andb $0x1, %al
movb %al, 0xb475(%rip)       # 0xe0d3
testb $0x1, 0xb46e(%rip)      # 0xe0d3
je 0x2c75
leaq 0x8851(%rip), %rdi      # 0xb4bf
movb $0x0, %al
callq 0x1030
movq -0x50(%rbp), %rax
cmpq -0x58(%rbp), %rax
sete %al
andb $0x1, %al
movb %al, 0xb449(%rip)       # 0xe0d1
testb $0x1, 0xb442(%rip)      # 0xe0d1
je 0x2c9f
leaq 0x8810(%rip), %rdi      # 0xb4a8
movb $0x0, %al
callq 0x1030
jmp 0x2dd0
cmpl $0x1, -0x10(%rbp)
je 0x2cb4
cmpl $0x2, -0x10(%rbp)
jne 0x2dce
movslq -0x1c(%rbp), %rax
leaq 0xb421(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x60(%rbp)
movslq -0x40(%rbp), %rax
leaq 0xb406(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6c0
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movl -0x44(%rbp), %ecx
shrq %cl, %rax
movq %rax, -0x68(%rbp)
cmpq $0x0, -0x60(%rbp)
jbe 0x2d14
cmpq $0x0, -0x68(%rbp)
jae 0x2d14
movq -0x60(%rbp), %rax
subq -0x68(%rbp), %rax
cmpq $0x0, %rax
jb 0x2d30
cmpq $0x0, -0x60(%rbp)
jae 0x2d37
cmpq $0x0, -0x68(%rbp)
jbe 0x2d37
movq -0x60(%rbp), %rax
subq -0x68(%rbp), %rax
cmpq $0x0, %rax
jbe 0x2d37
movb $0x1, 0xb39b(%rip)      # 0xe0d2
testb $0x1, 0xb394(%rip)      # 0xe0d2
je 0x2d4e
leaq 0x87ab(%rip), %rdi      # 0xb4f2
movb $0x0, %al
callq 0x1030
movq -0x60(%rbp), %rax
cmpq -0x68(%rbp), %rax
setb %al
andb $0x1, %al
movb %al, 0xb373(%rip)       # 0xe0d4
testb $0x1, 0xb36c(%rip)      # 0xe0d4
je 0x2d78
leaq 0x8769(%rip), %rdi      # 0xb4da
movb $0x0, %al
callq 0x1030
movq -0x60(%rbp), %rax
cmpq -0x68(%rbp), %rax
setb %al
andb $0x1, %al
movb %al, 0xb348(%rip)       # 0xe0d3
testb $0x1, 0xb341(%rip)      # 0xe0d3
je 0x2da2
leaq 0x8724(%rip), %rdi      # 0xb4bf
movb $0x0, %al
callq 0x1030
movq -0x60(%rbp), %rax
cmpq -0x68(%rbp), %rax
sete %al
andb $0x1, %al
movb %al, 0xb31c(%rip)       # 0xe0d1
testb $0x1, 0xb315(%rip)      # 0xe0d1
je 0x2dcc
leaq 0x86e3(%rip), %rdi      # 0xb4a8
movb $0x0, %al
callq 0x1030
jmp 0x2dce
jmp 0x2dd0
jmp 0x3000
cmpl $0x0, -0x10(%rbp)
jne 0x2ee7
movslq -0x1c(%rbp), %rax
leaq 0xb2f6(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x6c(%rbp)
movslq -0x40(%rbp), %rax
leaq 0xb2dc(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x70(%rbp)
movl -0x70(%rbp), %eax
movl -0x44(%rbp), %ecx
shll %cl, %eax
movl %eax, -0x70(%rbp)
cmpl $0x0, -0x6c(%rbp)
jbe 0x2e35
cmpl $0x0, -0x70(%rbp)
jae 0x2e35
movl -0x6c(%rbp), %eax
subl -0x70(%rbp), %eax
cmpl $0x0, %eax
jb 0x2e4c
cmpl $0x0, -0x6c(%rbp)
jae 0x2e53
cmpl $0x0, -0x70(%rbp)
jbe 0x2e53
movl -0x6c(%rbp), %eax
subl -0x70(%rbp), %eax
cmpl $0x0, %eax
jbe 0x2e53
movb $0x1, 0xb27f(%rip)      # 0xe0d2
movl -0x6c(%rbp), %eax
cmpl -0x70(%rbp), %eax
setb %al
andb $0x1, %al
movb %al, 0xb270(%rip)       # 0xe0d4
movl -0x6c(%rbp), %eax
cmpl -0x70(%rbp), %eax
setb %al
andb $0x1, %al
movb %al, 0xb25e(%rip)       # 0xe0d3
movl -0x6c(%rbp), %eax
cmpl -0x70(%rbp), %eax
sete %al
andb $0x1, %al
movb %al, 0xb24b(%rip)       # 0xe0d1
testb $0x1, 0xb246(%rip)      # 0xe0d3
je 0x2e9d
leaq 0x8629(%rip), %rdi      # 0xb4bf
movb $0x0, %al
callq 0x1030
testb $0x1, 0xb230(%rip)      # 0xe0d4
je 0x2eb4
leaq 0x862d(%rip), %rdi      # 0xb4da
movb $0x0, %al
callq 0x1030
testb $0x1, 0xb216(%rip)      # 0xe0d1
je 0x2ecb
leaq 0x85e4(%rip), %rdi      # 0xb4a8
movb $0x0, %al
callq 0x1030
testb $0x1, 0xb200(%rip)      # 0xe0d2
je 0x2ee2
leaq 0x8617(%rip), %rdi      # 0xb4f2
movb $0x0, %al
callq 0x1030
jmp 0x2ffe
cmpl $0x1, -0x10(%rbp)
je 0x2ef7
cmpl $0x2, -0x10(%rbp)
jne 0x2ffc
movslq -0x1c(%rbp), %rax
leaq 0xb1de(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x74(%rbp)
movslq -0x40(%rbp), %rax
leaq 0xb1c4(%rip), %rdi      # 0xe0e0
shlq $0x3, %rax
addq %rax, %rdi
callq 0xa6e0
movl %eax, -0x78(%rbp)
movl -0x78(%rbp), %eax
movl -0x44(%rbp), %ecx
shrl %cl, %eax
movl %eax, -0x78(%rbp)
cmpl $0x0, -0x74(%rbp)
jbe 0x2f4d
cmpl $0x0, -0x78(%rbp)
jae 0x2f4d
movl -0x74(%rbp), %eax
subl -0x78(%rbp), %eax
cmpl $0x0, %eax
jb 0x2f64
cmpl $0x0, -0x74(%rbp)
jae 0x2f6b
cmpl $0x0, -0x78(%rbp)
jbe 0x2f6b
movl -0x74(%rbp), %eax
subl -0x78(%rbp), %eax
cmpl $0x0, %eax
jbe 0x2f6b
movb $0x1, 0xb167(%rip)      # 0xe0d2
movl -0x74(%rbp), %eax
cmpl -0x78(%rbp), %eax
setb %al
andb $0x1, %al
movb %al, 0xb158(%rip)       # 0xe0d4
movl -0x74(%rbp), %eax
cmpl -0x78(%rbp), %eax
setb %al
andb $0x1, %al
movb %al, 0xb146(%rip)       # 0xe0d3
movl -0x74(%rbp), %eax
cmpl -0x78(%rbp), %eax
sete %al
andb $0x1, %al
movb %al, 0xb133(%rip)       # 0xe0d1
testb $0x1, 0xb12f(%rip)      # 0xe0d4
je 0x2fb5
leaq 0x852c(%rip), %rdi      # 0xb4da
movb $0x0, %al
callq 0x1030
testb $0x1, 0xb117(%rip)      # 0xe0d3
je 0x2fcc
leaq 0x84fa(%rip), %rdi      # 0xb4bf
movb $0x0, %al
callq 0x1030
testb $0x1, 0xb0fe(%rip)      # 0xe0d1
je 0x2fe3
leaq 0x84cc(%rip), %rdi      # 0xb4a8
movb $0x0, %al
callq 0x1030
testb $0x1, 0xb0e8(%rip)      # 0xe0d2
je 0x2ffa
leaq 0x84ff(%rip), %rdi      # 0xb4f2
movb $0x0, %al
callq 0x1030
jmp 0x2ffc
jmp 0x2ffe
jmp 0x3000
jmp 0x3002
jmp 0x3004
jmp 0x3006
addq $0x80, %rsp
popq %rbp
retq
nop