// File: /workspace/github_cpp_makefile_star2_O1/Davidc2525[P]Leaf/compiler/registers/x86_32_register_provider.cpp
// Function: X86_32RegisterProvider::X86_32RegisterProvider()
X86_32RegisterProvider::X86_32RegisterProvider()
{
    string *byte = new string("BYTE");   //8
    string *word = new string("WORD");   //16
    string *dword = new string("DWORD"); //32
    //string *qword = new string("QWORD"); //64

    int counter = 0;

    registers_.push_back(new Register(counter++, new string("ah"), 8, byte));
    registers_.push_back(new Register(counter++, new string("al"), 8, byte));
    registers_.push_back(new Register(counter++, new string("bh"), 8, byte));
    registers_.push_back(new Register(counter++, new string("bl"), 8, byte));
    registers_.push_back(new Register(counter++, new string("ch"), 8, byte));
    registers_.push_back(new Register(counter++, new string("cl"), 8, byte));
    registers_.push_back(new Register(counter++, new string("dh"), 8, byte));
    registers_.push_back(new Register(counter++, new string("dl"), 8, byte));

    registers_.push_back(new Register(counter++, new string("ax"), 16, word));
    registers_.push_back(new Register(counter++, new string("bx"), 16, word));
    registers_.push_back(new Register(counter++, new string("cx"), 16, word));
    registers_.push_back(new Register(counter++, new string("dx"), 16, word));
    registers_.push_back(new Register(counter++, new string("si"), 16, word));
    registers_.push_back(new Register(counter++, new string("di"), 16, word));

    registers_.push_back(new Register(counter++, new string("eax"), 32, dword));
    registers_.push_back(new Register(counter++, new string("ebx"), 32, dword));
    registers_.push_back(new Register(counter++, new string("ecx"), 32, dword));
    registers_.push_back(new Register(counter++, new string("edx"), 32, dword));
    registers_.push_back(new Register(counter++, new string("esi"), 32, dword));
    registers_.push_back(new Register(counter++, new string("edi"), 32, dword));

    reservers = new map<int, stack<int> *>;
    for (auto x = registers_.begin(); x != registers_.end(); x++)
    {
        reservers->insert(make_pair((*x)->id, new stack<int>));
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rdi)
movq $0x0, 0x18(%rdi)
leaq 0x1115b(%rip), %rax     # 0x25818
movq %rax, (%rdi)
movl $0x20, 0x30(%rdi)
movl $0x20, %edi
callq 0x5290
movq %rax, %r13
addq $0x10, %rax
movq %rax, (%r13)
leaq 0x65b5(%rip), %rsi      # 0x1ac98
leaq 0x65b2(%rip), %rdx      # 0x1ac9c
movq %r13, %rdi
callq 0x84ba
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6591(%rip), %rsi      # 0x1ac9e
leaq 0x658e(%rip), %rdx      # 0x1aca2
movq %r14, %rdi
callq 0x84ba
movl $0x20, %edi
callq 0x5290
movq %rax, %rdi
addq $0x10, %rax
movq %rax, (%rdi)
leaq 0x6566(%rip), %rsi      # 0x1ac9d
leaq 0x6564(%rip), %rdx      # 0x1aca2
movq %rdi, 0x18(%rsp)
callq 0x84ba
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movq %r14, 0x20(%rsp)
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x694d(%rip), %rsi      # 0x1b0c5
leaq 0x6948(%rip), %rdx      # 0x1b0c7
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
xorl %esi, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rbx), %rdi
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq %rdi, (%rsp)
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x653b(%rip), %rsi      # 0x1ad23
leaq 0x6536(%rip), %rdx      # 0x1ad25
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x1, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x6871(%rip), %rsi      # 0x1b0c8
leaq 0x686c(%rip), %rdx      # 0x1b0ca
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x2, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x6805(%rip), %rsi      # 0x1b0cb
leaq 0x6800(%rip), %rdx      # 0x1b0cd
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x3, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x6afe(%rip), %rsi      # 0x1b433
leaq 0x6af9(%rip), %rdx      # 0x1b435
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x4, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x672a(%rip), %rsi      # 0x1b0ce
leaq 0x6725(%rip), %rdx      # 0x1b0d0
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x5, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x66be(%rip), %rsi      # 0x1b0d1
leaq 0x66b9(%rip), %rdx      # 0x1b0d3
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x6, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r12b
leaq 0x6652(%rip), %rsi      # 0x1b0d4
leaq 0x664d(%rip), %rdx      # 0x1b0d6
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %rbp, %rdi
movl $0x7, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %rbp, (%rsi)
xorl %r15d, %r15d
xorl %r12d, %r12d
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq 0x20(%rsp), %r12
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x65e2(%rip), %rsi      # 0x1b0d8
leaq 0x65dd(%rip), %rdx      # 0x1b0da
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r13, %rdi
movl $0x8, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r13, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x6578(%rip), %rsi      # 0x1b0dc
leaq 0x6573(%rip), %rdx      # 0x1b0de
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r13, %rdi
movl $0x9, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r13, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x650e(%rip), %rsi      # 0x1b0e0
leaq 0x6509(%rip), %rdx      # 0x1b0e2
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r13, %rdi
movl $0xa, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r13, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x64a4(%rip), %rsi      # 0x1b0e4
leaq 0x649f(%rip), %rdx      # 0x1b0e6
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r13, %rdi
movl $0xb, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r13, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x643a(%rip), %rsi      # 0x1b0e8
leaq 0x6435(%rip), %rdx      # 0x1b0ea
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r13, %rdi
movl $0xc, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r13, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x63d0(%rip), %rsi      # 0x1b0ec
leaq 0x63cb(%rip), %rdx      # 0x1b0ee
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r13, %rdi
movl $0xd, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r13, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq 0x18(%rsp), %r13
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x6348(%rip), %rsi      # 0x1b0d7
leaq 0x6344(%rip), %rdx      # 0x1b0da
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r12, %rdi
movl $0xe, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x62de(%rip), %rsi      # 0x1b0db
leaq 0x62da(%rip), %rdx      # 0x1b0de
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r12, %rdi
movl $0xf, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x6274(%rip), %rsi      # 0x1b0df
leaq 0x6270(%rip), %rdx      # 0x1b0e2
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r12, %rdi
movl $0x10, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x620a(%rip), %rsi      # 0x1b0e3
leaq 0x6206(%rip), %rdx      # 0x1b0e6
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r12, %rdi
movl $0x11, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x61a0(%rip), %rsi      # 0x1b0e7
leaq 0x619c(%rip), %rdx      # 0x1b0ea
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r12, %rdi
movl $0x12, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %bpl
leaq 0x6136(%rip), %rsi      # 0x1b0eb
leaq 0x6132(%rip), %rdx      # 0x1b0ee
movb $0x1, %r15b
movq %r14, %rdi
callq 0x84ba
xorl %r15d, %r15d
movq %r12, %rdi
movl $0x13, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x11948
leaq 0x8(%rsp), %rsi
movq %r12, (%rsi)
xorl %r15d, %r15d
xorl %ebp, %ebp
movq (%rsp), %rdi
callq 0x142d8
movl $0x30, %edi
callq 0x5290
movq %rax, %rcx
addq $0x8, %rcx
movl $0x0, 0x8(%rax)
xorl %edx, %edx
movq %rdx, 0x10(%rax)
movq %rcx, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq %rdx, 0x28(%rax)
movq %rax, 0x20(%rbx)
movq 0x8(%rbx), %r13
cmpq 0x10(%rbx), %r13
je 0x1508b
leaq 0x8(%rsp), %r14
movq 0x20(%rbx), %r15
movq (%r13), %rbp
movl $0x50, %edi
callq 0x5290
movq %rax, %r12
xorps %xmm0, %xmm0
movups %xmm0, 0x40(%rax)
movups %xmm0, 0x30(%rax)
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x10(%rax)
movups %xmm0, (%rax)
movq %rax, %rdi
xorl %esi, %esi
callq 0x14444
movl (%rbp), %eax
movl %eax, 0x8(%rsp)
movq %r12, 0x10(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0x1459e
addq $0x8, %r13
cmpq 0x10(%rbx), %r13
jne 0x15035
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x15207
jmp 0x150b3
jmp 0x1510e
jmp 0x150b3
jmp 0x1510e
jmp 0x150b3
jmp 0x1510e
jmp 0x150b3
jmp 0x1510e
jmp 0x150b3
jmp 0x1510e
movq %rax, %r13
movb $0x1, %bpl
jmp 0x15176
jmp 0x1510e
jmp 0x150d4
jmp 0x150df
jmp 0x150d4
jmp 0x150df
jmp 0x150d4
jmp 0x150df
jmp 0x150d4
jmp 0x150df
jmp 0x150d4
jmp 0x150df
movq %rax, %r12
movb $0x1, %bpl
jmp 0x151a4
movq %rax, %r12
jmp 0x151b6
jmp 0x15103
jmp 0x1510e
jmp 0x15103
jmp 0x1510e
jmp 0x15103
jmp 0x1510e
jmp 0x15103
jmp 0x1510e
jmp 0x15103
jmp 0x1510e
jmp 0x15103
jmp 0x1510e
jmp 0x15103
jmp 0x1510e
movq %rax, %r13
movb $0x1, %r12b
jmp 0x151de
movq %rax, %r13
jmp 0x151f0
movq %rax, %r15
movl $0x20, %esi
movq 0x18(%rsp), %rdi
jmp 0x15200
jmp 0x15207
movq %rax, %r15
movl $0x20, %esi
movq %r14, %rdi
jmp 0x15200
jmp 0x15207
movq %rax, %r15
movl $0x20, %esi
movq %r13, %rdi
jmp 0x15200
jmp 0x15207
jmp 0x15161
jmp 0x15161
jmp 0x15161
jmp 0x15161
jmp 0x15161
movq %rax, %r13
testb %r15b, %r15b
je 0x15176
movl $0x20, %esi
movq %r14, %rdi
callq 0x52a0
testb %bpl, %bpl
je 0x151f0
movl $0x28, %esi
movq %r12, %rdi
jmp 0x151eb
jmp 0x1518f
jmp 0x1518f
jmp 0x1518f
jmp 0x1518f
jmp 0x1518f
movq %rax, %r12
testb %r15b, %r15b
je 0x151a4
movl $0x20, %esi
movq %r14, %rdi
callq 0x52a0
testb %bpl, %bpl
je 0x151b6
movl $0x28, %esi
movq %r13, %rdi
callq 0x52a0
movq %r12, %r15
jmp 0x1520a
jmp 0x151c9
jmp 0x151c9
jmp 0x151c9
jmp 0x151c9
jmp 0x151c9
jmp 0x151c9
jmp 0x151c9
movq %rax, %r13
testb %r15b, %r15b
je 0x151de
movl $0x20, %esi
movq %r14, %rdi
callq 0x52a0
testb %r12b, %r12b
je 0x151f0
movl $0x28, %esi
movq %rbp, %rdi
callq 0x52a0
movq %r13, %r15
jmp 0x1520a
movq %rax, %r15
movl $0x50, %esi
movq %r12, %rdi
callq 0x52a0
jmp 0x1520a
movq %rax, %r15
leaq 0x1048f(%rip), %rax     # 0x256a0
addq $0x10, %rax
movq %rax, (%rbx)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x1522d
movq 0x18(%rbx), %rsi
subq %rdi, %rsi
callq 0x52a0
movq %r15, %rdi
callq 0x5470
nopl (%rax)