Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r50802:fe3fd6bbfb02 Date: 2011-12-21 14:30 +0100 http://bitbucket.org/pypy/pypy/changeset/fe3fd6bbfb02/
Log: merge heads 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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit