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)
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)
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)
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)
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
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