[pypy-commit] pypy default: hg merge
hakanardo
noreply at buildbot.pypy.org
Wed Dec 21 15:54:44 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch:
Changeset: r50804:628d03374f2e
Date: 2011-12-21 15:54 +0100
http://bitbucket.org/pypy/pypy/changeset/628d03374f2e/
Log: hg merge
diff --git a/pypy/jit/backend/x86/test/test_jump.py b/pypy/jit/backend/x86/test/test_jump.py
--- a/pypy/jit/backend/x86/test/test_jump.py
+++ b/pypy/jit/backend/x86/test/test_jump.py
@@ -20,6 +20,11 @@
def regalloc_pop(self, loc):
self.ops.append(('pop', loc))
+ def regalloc_immedmem2mem(self, from_loc, to_loc):
+ assert isinstance(from_loc, ConstFloatLoc)
+ assert isinstance(to_loc, StackLoc)
+ self.ops.append(('immedmem2mem', from_loc, to_loc))
+
def got(self, expected):
print '------------------------ comparing ---------------------------'
for op1, op2 in zip(self.ops, expected):
@@ -244,6 +249,13 @@
else:
return pick1()
#
+ def pick2c():
+ n = random.randrange(-2000, 500)
+ if n >= 0:
+ return ConstFloatLoc(n) # n is the address, not really used here
+ else:
+ return pick2()
+ #
def pick_dst(fn, count, seen):
result = []
while len(result) < count:
@@ -280,12 +292,12 @@
if loc.get_width() > WORD:
stack[loc.value+WORD] = 'value-hiword-%d' % i
else:
- assert isinstance(loc, ImmedLoc)
+ assert isinstance(loc, (ImmedLoc, ConstFloatLoc))
return regs1, regs2, stack
#
for i in range(500):
seen = {}
- src_locations2 = [pick2() for i in range(4)]
+ src_locations2 = [pick2c() for i in range(4)]
dst_locations2 = pick_dst(pick2, 4, seen)
src_locations1 = [pick1c() for i in range(5)]
dst_locations1 = pick_dst(pick1, 5, seen)
@@ -312,9 +324,15 @@
return got
if isinstance(loc, ImmedLoc):
return 'const-%d' % loc.value
+ if isinstance(loc, ConstFloatLoc):
+ got = 'constfloat-@%d' % loc.value
+ if loc.get_width() > WORD:
+ got = (got, 'constfloat-next-@%d' % loc.value)
+ return got
assert 0, loc
#
def write(loc, newvalue):
+ assert (type(newvalue) is tuple) == (loc.get_width() > WORD)
if isinstance(loc, RegLoc):
if loc.is_xmm:
regs2[loc.value] = newvalue
@@ -337,10 +355,14 @@
for op in assembler.ops:
if op[0] == 'mov':
src, dst = op[1:]
- assert isinstance(src, (RegLoc, StackLoc, ImmedLoc))
- assert isinstance(dst, (RegLoc, StackLoc))
- assert not (isinstance(src, StackLoc) and
- isinstance(dst, StackLoc))
+ if isinstance(src, ConstFloatLoc):
+ assert isinstance(dst, RegLoc)
+ assert dst.is_xmm
+ else:
+ assert isinstance(src, (RegLoc, StackLoc, ImmedLoc))
+ assert isinstance(dst, (RegLoc, StackLoc))
+ assert not (isinstance(src, StackLoc) and
+ isinstance(dst, StackLoc))
write(dst, read(src))
elif op[0] == 'push':
src, = op[1:]
@@ -350,6 +372,11 @@
dst, = op[1:]
assert isinstance(dst, (RegLoc, StackLoc))
write(dst, extrapushes.pop())
+ elif op[0] == 'immedmem2mem':
+ src, dst = op[1:]
+ assert isinstance(src, ConstFloatLoc)
+ assert isinstance(dst, StackLoc)
+ write(dst, read(src, 8))
else:
assert 0, "unknown op: %r" % (op,)
assert not extrapushes
More information about the pypy-commit
mailing list