Exemplo n.º 1
0
 def regalloc_pop(self, loc):
     if isinstance(loc, XMMREG):
         self.mc.MOVSD(loc, mem64(esp, 0))
         self.mc.ADD(esp, imm(2 * WORD))
     elif isinstance(loc, MODRM64):
         # XXX evil trick
         self.mc.POP(mem(ebp, get_ebp_ofs(loc.position + 1)))
         self.mc.POP(mem(ebp, get_ebp_ofs(loc.position)))
     else:
         self.mc.POP(loc)
Exemplo n.º 2
0
 def regalloc_push(self, loc):
     if isinstance(loc, XMMREG):
         self.mc.SUB(esp, imm(2 * WORD))
         self.mc.MOVSD(mem64(esp, 0), loc)
     elif isinstance(loc, MODRM64):
         # XXX evil trick
         self.mc.PUSH(mem(ebp, get_ebp_ofs(loc.position)))
         self.mc.PUSH(mem(ebp, get_ebp_ofs(loc.position + 1)))
     else:
         self.mc.PUSH(loc)
Exemplo n.º 3
0
 def regalloc_pop(self, loc):
     if isinstance(loc, XMMREG):
         self.mc.MOVSD(loc, mem64(esp, 0))
         self.mc.ADD(esp, imm(2 * WORD))
     elif isinstance(loc, MODRM64):
         # XXX evil trick
         self.mc.POP(mem(ebp, get_ebp_ofs(loc.position + 1)))
         self.mc.POP(mem(ebp, get_ebp_ofs(loc.position)))
     else:
         self.mc.POP(loc)
Exemplo n.º 4
0
 def regalloc_push(self, loc):
     if isinstance(loc, XMMREG):
         self.mc.SUB(esp, imm(2 * WORD))
         self.mc.MOVSD(mem64(esp, 0), loc)
     elif isinstance(loc, MODRM64):
         # XXX evil trick
         self.mc.PUSH(mem(ebp, get_ebp_ofs(loc.position)))
         self.mc.PUSH(mem(ebp, get_ebp_ofs(loc.position + 1)))
     else:
         self.mc.PUSH(loc)
Exemplo n.º 5
0
 def write_in_stack(loc, value):
     assert loc >= 0
     ofs = get_ebp_ofs(loc)
     assert ofs < 0
     assert (ofs % WORD) == 0
     stack[stacklen + ofs//WORD] = value
Exemplo n.º 6
0
 def write_in_stack(loc, value):
     assert loc >= 0
     ofs = get_ebp_ofs(loc)
     assert ofs < 0
     assert (ofs % WORD) == 0
     stack[stacklen + ofs // WORD] = value