// File: /workspace/github_cpp_makefile_star2_O3/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 $0x18, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rdi)
movq $0x0, 0x18(%rdi)
leaq 0x1127b(%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 0x6739(%rip), %rsi      # 0x1acfc
leaq 0x6736(%rip), %rdx      # 0x1ad00
movq %r13, %rdi
callq 0x8496
movl $0x20, %edi
callq 0x5290
movq %rax, %r12
addq $0x10, %rax
movq %rax, (%r12)
leaq 0x6714(%rip), %rsi      # 0x1ad02
leaq 0x6711(%rip), %rdx      # 0x1ad06
movq %r12, %rdi
callq 0x8496
movl $0x20, %edi
callq 0x5290
movq %rax, %rdi
addq $0x10, %rax
movq %rax, (%rdi)
leaq 0x66e9(%rip), %rsi      # 0x1ad01
leaq 0x66e7(%rip), %rdx      # 0x1ad06
movq %rdi, 0x10(%rsp)
callq 0x8496
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r15
addq $0x10, %rax
movq %rax, (%r15)
leaq 0x6ad4(%rip), %rsi      # 0x1b125
leaq 0x6acf(%rip), %rdx      # 0x1b127
movq %r15, %rdi
callq 0x8496
movq %rbp, %rdi
xorl %esi, %esi
movq %r15, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
leaq 0x8(%rbx), %r15
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x66d8(%rip), %rsi      # 0x1ad87
leaq 0x66d3(%rip), %rdx      # 0x1ad89
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x1, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6a1c(%rip), %rsi      # 0x1b128
leaq 0x6a17(%rip), %rdx      # 0x1b12a
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x2, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x69c2(%rip), %rsi      # 0x1b12b
leaq 0x69bd(%rip), %rdx      # 0x1b12d
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x3, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6ccd(%rip), %rsi      # 0x1b493
leaq 0x6cc8(%rip), %rdx      # 0x1b495
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x4, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x690b(%rip), %rsi      # 0x1b12e
leaq 0x6906(%rip), %rdx      # 0x1b130
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x5, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x68b1(%rip), %rsi      # 0x1b131
leaq 0x68ac(%rip), %rdx      # 0x1b133
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x6, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %rbp
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6857(%rip), %rsi      # 0x1b134
leaq 0x6852(%rip), %rdx      # 0x1b136
movq %r14, %rdi
callq 0x8496
movq %rbp, %rdi
movl $0x7, %esi
movq %r14, %rdx
movl $0x8, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %rbp, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x67fe(%rip), %rsi      # 0x1b138
leaq 0x67f9(%rip), %rdx      # 0x1b13a
movq %r14, %rdi
callq 0x8496
movq %r13, %rdi
movl $0x8, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r13, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x67a5(%rip), %rsi      # 0x1b13c
leaq 0x67a0(%rip), %rdx      # 0x1b13e
movq %r14, %rdi
callq 0x8496
movq %r13, %rdi
movl $0x9, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r13, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x674c(%rip), %rsi      # 0x1b140
leaq 0x6747(%rip), %rdx      # 0x1b142
movq %r14, %rdi
callq 0x8496
movq %r13, %rdi
movl $0xa, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r13, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x66f3(%rip), %rsi      # 0x1b144
leaq 0x66ee(%rip), %rdx      # 0x1b146
movq %r14, %rdi
callq 0x8496
movq %r13, %rdi
movl $0xb, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r13, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x669a(%rip), %rsi      # 0x1b148
leaq 0x6695(%rip), %rdx      # 0x1b14a
movq %r14, %rdi
callq 0x8496
movq %r13, %rdi
movl $0xc, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r13, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r13
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6641(%rip), %rsi      # 0x1b14c
leaq 0x663c(%rip), %rdx      # 0x1b14e
movq %r14, %rdi
callq 0x8496
movq %r13, %rdi
movl $0xd, %esi
movq %r14, %rdx
movl $0x10, %ecx
movq %r12, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r13, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq 0x10(%rsp), %r13
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x65ca(%rip), %rsi      # 0x1b137
leaq 0x65c6(%rip), %rdx      # 0x1b13a
movq %r14, %rdi
callq 0x8496
movq %r12, %rdi
movl $0xe, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6571(%rip), %rsi      # 0x1b13b
leaq 0x656d(%rip), %rdx      # 0x1b13e
movq %r14, %rdi
callq 0x8496
movq %r12, %rdi
movl $0xf, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6518(%rip), %rsi      # 0x1b13f
leaq 0x6514(%rip), %rdx      # 0x1b142
movq %r14, %rdi
callq 0x8496
movq %r12, %rdi
movl $0x10, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x64bf(%rip), %rsi      # 0x1b143
leaq 0x64bb(%rip), %rdx      # 0x1b146
movq %r14, %rdi
callq 0x8496
movq %r12, %rdi
movl $0x11, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x6466(%rip), %rsi      # 0x1b147
leaq 0x6462(%rip), %rdx      # 0x1b14a
movq %r14, %rdi
callq 0x8496
movq %r12, %rdi
movl $0x12, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x141b0
movl $0x28, %edi
callq 0x5290
movq %rax, %r12
movl $0x20, %edi
callq 0x5290
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
leaq 0x640d(%rip), %rsi      # 0x1b14b
leaq 0x6409(%rip), %rdx      # 0x1b14e
movq %r14, %rdi
callq 0x8496
movq %r12, %rdi
movl $0x13, %esi
movq %r14, %rdx
movl $0x20, %ecx
movq %r13, %r8
callq 0x118c8
movq %rsp, %rsi
movq %r12, (%rsi)
movq %r15, %rdi
callq 0x141b0
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 0x14e03
movq %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 0x14324
movl (%rbp), %eax
movl %eax, (%rsp)
movq %r12, 0x8(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0x1447e
addq $0x8, %r13
cmpq 0x10(%rbx), %r13
jne 0x14dae
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x15006
jmp 0x15006
jmp 0x14e80
jmp 0x14e6e
jmp 0x14e80
jmp 0x15006
jmp 0x15006
jmp 0x14e80
jmp 0x14e6e
jmp 0x14e80
jmp 0x15006
jmp 0x15006
jmp 0x14e80
jmp 0x14e6e
jmp 0x14e80
jmp 0x15006
jmp 0x15006
jmp 0x14e80
jmp 0x14e6e
jmp 0x14e80
jmp 0x15006
jmp 0x15006
jmp 0x14e80
jmp 0x14e6e
jmp 0x14e80
jmp 0x15006
jmp 0x15006
jmp 0x14e80
movq %rax, %r15
movl $0x20, %esi
movq %r14, %rdi
callq 0x52a0
jmp 0x14e83
movq %rax, %r15
movl $0x28, %esi
movq %r12, %rdi
jmp 0x14f97
jmp 0x15006
jmp 0x15006
jmp 0x14efe
jmp 0x14eec
jmp 0x14efe
jmp 0x15006
jmp 0x15006
jmp 0x14efe
jmp 0x14eec
jmp 0x14efe
jmp 0x15006
jmp 0x15006
jmp 0x14efe
jmp 0x14eec
jmp 0x14efe
jmp 0x15006
jmp 0x15006
jmp 0x14efe
jmp 0x14eec
jmp 0x14efe
jmp 0x15006
jmp 0x15006
jmp 0x14efe
jmp 0x14eec
jmp 0x14efe
jmp 0x15006
jmp 0x15006
jmp 0x14efe
movq %rax, %r15
movl $0x20, %esi
movq %r14, %rdi
callq 0x52a0
jmp 0x14f01
movq %rax, %r15
movl $0x28, %esi
movq %r13, %rdi
jmp 0x14f97
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
jmp 0x14f7a
jmp 0x14f8c
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
jmp 0x14f7a
jmp 0x14f8c
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
jmp 0x14f7a
jmp 0x14f8c
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
jmp 0x14f7a
jmp 0x14f8c
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
jmp 0x14f7a
jmp 0x14f8c
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
jmp 0x14f7a
jmp 0x14f8c
jmp 0x15006
jmp 0x15006
jmp 0x14f8c
movq %rax, %r15
movl $0x20, %esi
movq %r14, %rdi
callq 0x52a0
jmp 0x14f8f
movq %rax, %r15
movl $0x28, %esi
movq %rbp, %rdi
callq 0x52a0
movq %r15, %r14
jmp 0x15009
jmp 0x15006
jmp 0x15006
jmp 0x14fb9
movq %rax, %r14
movl $0x20, %esi
movq %r15, %rdi
callq 0x52a0
jmp 0x14fbc
movq %rax, %r14
movl $0x28, %esi
movq %rbp, %rdi
jmp 0x14fff
jmp 0x15006
movq %rax, %r14
movl $0x20, %esi
movq 0x10(%rsp), %rdi
jmp 0x14fff
jmp 0x15006
movq %rax, %r14
movl $0x20, %esi
jmp 0x14ffc
jmp 0x15006
movq %rax, %r14
movl $0x20, %esi
movq %r13, %rdi
jmp 0x14fff
jmp 0x15006
movq %rax, %r14
movl $0x50, %esi
movq %r12, %rdi
callq 0x52a0
jmp 0x15009
movq %rax, %r14
leaq 0x10690(%rip), %rax     # 0x256a0
addq $0x10, %rax
movq %rax, (%rbx)
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x1502c
movq 0x18(%rbx), %rsi
subq %rdi, %rsi
callq 0x52a0
movq %r14, %rdi
callq 0x5470