[pypy-svn] r53531 - pypy/branch/jit-hotpath/pypy/jit/codegen/ia32
fijal at codespeak.net
fijal at codespeak.net
Mon Apr 7 18:47:32 CEST 2008
Author: fijal
Date: Mon Apr 7 18:47:32 2008
New Revision: 53531
Modified:
pypy/branch/jit-hotpath/pypy/jit/codegen/ia32/rgenop.py
Log:
Fix test method_call_promote. I promise I'll run tests all the time,
I promise I'll run tests all the time, I promise I'll run tests all the time,
...
Modified: pypy/branch/jit-hotpath/pypy/jit/codegen/ia32/rgenop.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/codegen/ia32/rgenop.py (original)
+++ pypy/branch/jit-hotpath/pypy/jit/codegen/ia32/rgenop.py Mon Apr 7 18:47:32 2008
@@ -294,9 +294,9 @@
return genmethod(gv_arg)
def genop_getfield(self, (offset, fieldsize, kindtoken), gv_ptr):
- assert fieldsize != 2
self.mc.MOV(edx, gv_ptr.operand(self))
- return self.newvarfromaddr(kindtoken, (edx, None, 0, offset))
+ return self.newvarfromaddr(kindtoken, (edx, None, 0, offset),
+ fieldsize)
if fieldsize == WORD:
op = mem(edx, offset)
@@ -362,7 +362,7 @@
self.mc.MOV(edx, gv_ptr.operand(self))
_, _, itemsize, kindtoken = arraytoken
addr = self._compute_itemaddr(edx, arraytoken, gv_index)
- return self.newvarfromaddr(kindtoken, addr)
+ return self.newvarfromaddr(kindtoken, addr, itemsize)
def genop_getarraysubstruct(self, arraytoken, gv_ptr, gv_index):
self.mc.MOV(edx, gv_ptr.operand(self))
@@ -565,10 +565,19 @@
raise NotImplementedError("Return float var not on fp stack")
return res
- def newvarfromaddr(self, kindtoken, addr):
+ def newvarfromaddr(self, kindtoken, addr, size):
# XXX probably we can still do something here with unrolling
# iterable, but let's not be too smart...
if kindtoken == 'i':
+ # XXX kind of a hack
+ if size == 1:
+ self.mc.MOVZX(eax, self.mem_access8(addr))
+ return self.returnintvar(eax)
+ elif size == 2:
+ # XXX never tested
+ self.mc.MOV(eax, self.mem_access(addr))
+ self.mc.o16()
+ return self.returnintvar(eax)
return self.returnintvar(self.mem_access(addr))
elif kindtoken == 'a':
return self.returnaddrvar(self.mem_access(addr))
More information about the Pypy-commit
mailing list