[pypy-commit] pypy jitframe-on-heap: fix this test a bit
fijal
noreply at buildbot.pypy.org
Sat Jan 19 15:03:37 CET 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: jitframe-on-heap
Changeset: r60206:fbb2583b6e4d
Date: 2013-01-19 16:03 +0200
http://bitbucket.org/pypy/pypy/changeset/fbb2583b6e4d/
Log: fix this test a bit
diff --git a/pypy/jit/backend/test/calling_convention_test.py b/pypy/jit/backend/test/calling_convention_test.py
--- a/pypy/jit/backend/test/calling_convention_test.py
+++ b/pypy/jit/backend/test/calling_convention_test.py
@@ -1,21 +1,11 @@
-from pypy.jit.metainterp.history import (AbstractFailDescr,
- AbstractDescr,
- BasicFailDescr,
- BoxInt, Box, BoxPtr,
- JitCellToken,
- ConstInt, ConstPtr,
- BoxObj, Const,
- ConstObj, BoxFloat, ConstFloat)
-from pypy.jit.metainterp.resoperation import ResOperation, rop
-from pypy.jit.metainterp.typesystem import deref
+from pypy.jit.metainterp.history import BasicFinalDescr, BoxInt, JitCellToken,\
+ ConstInt, BoxFloat, ConstFloat
+from pypy.jit.metainterp.resoperation import rop
from pypy.jit.codewriter.effectinfo import EffectInfo
from pypy.jit.tool.oparser import parse
-from pypy.rpython.lltypesystem import lltype, llmemory, rstr, rffi, rclass
-from pypy.rpython.ootypesystem import ootype
+from pypy.rpython.lltypesystem import lltype, llmemory
from pypy.rpython.annlowlevel import llhelper
-from pypy.rpython.llinterp import LLException
from pypy.jit.codewriter import heaptracker, longlong
-from pypy.rlib.rarithmetic import intmask
from pypy.jit.backend.detect_cpu import getcpuclass
from pypy.jit.backend.test.runner_test import Runner
import py
@@ -111,12 +101,11 @@
loop = parse(ops, namespace=locals())
looptoken = JitCellToken()
- done_number = self.cpu.get_fail_descr_number(loop.operations[-2].getdescr())
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
argvals, expected_result = self._prepare_args(args, floats, ints)
deadframe = self.cpu.execute_token(looptoken, *argvals)
- x = longlong.getrealfloat(cpu.get_latest_value_float(deadframe, 0))
+ x = longlong.getrealfloat(cpu.get_float_value(deadframe, 0))
assert abs(x - expected_result) < 0.0001
def test_call_aligned_with_imm_values(self):
@@ -208,8 +197,8 @@
if not cpu.supports_floats:
py.test.skip('requires floats')
- fdescr3 = BasicFailDescr(3)
- fdescr4 = BasicFailDescr(4)
+ fdescr3 = BasicFinalDescr(3)
+ fdescr4 = BasicFinalDescr(4)
def assembler_helper(failindex, virtualizable):
assert 0, 'should not be called, but was with failindex (%d)' % failindex
@@ -255,13 +244,13 @@
called_loop = parse(called_ops, namespace=locals())
called_looptoken = JitCellToken()
called_looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
- done_number = self.cpu.get_fail_descr_number(called_loop.operations[-1].getdescr())
+ done_descr = called_loop.operations[-1].getdescr()
self.cpu.compile_loop(called_loop.inputargs, called_loop.operations, called_looptoken)
argvals, expected_result = self._prepare_args(args, floats, ints)
deadframe = cpu.execute_token(called_looptoken, *argvals)
- assert cpu.get_latest_descr(deadframe).identifier == 3
- t = longlong.getrealfloat(cpu.get_latest_value_float(deadframe, 0))
+ assert cpu.get_latest_descr(deadframe) == fdescr3
+ t = longlong.getrealfloat(cpu.get_float_value(deadframe, 0))
assert abs(t - expected_result) < 0.0001
ARGS = []
@@ -282,7 +271,7 @@
''' % (arguments, arguments)
loop = parse(ops, namespace=locals())
# we want to take the fast path
- self.cpu.done_with_this_frame_float_v = done_number
+ self.cpu.done_with_this_frame_descr_float = done_descr
try:
othertoken = JitCellToken()
self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
@@ -291,38 +280,37 @@
argvals, _ = self._prepare_args(args, floats, ints)
deadframe = cpu.execute_token(othertoken, *argvals)
x = longlong.getrealfloat(
- cpu.get_latest_value_float(deadframe, 0))
- assert cpu.get_latest_descr(deadframe).identifier == 4
+ cpu.get_float_value(deadframe, 0))
+ assert cpu.get_latest_descr(deadframe) == fdescr4
assert abs(x - expected_result) < 0.0001
finally:
- del self.cpu.done_with_this_frame_float_v
+ del self.cpu.done_with_this_frame_descr_float
def test_call_with_imm_values_bug_constint0(self):
- from pypy.rlib.libffi import types
- cpu = self.cpu
+ cpu = self.cpu
- I = lltype.Signed
- ints = [7, 11, 23, 13, -42, 0, 0, 9]
+ I = lltype.Signed
+ ints = [7, 11, 23, 13, -42, 0, 0, 9]
- def func(*args):
- for i in range(len(args)):
- assert args[i] == ints[i]
- return sum(args)
+ def func(*args):
+ for i in range(len(args)):
+ assert args[i] == ints[i]
+ return sum(args)
- result = sum(ints)
- args = [I] * len(ints)
- argslist = [ConstInt(i) for i in ints]
- FUNC = self.FuncType(args, I)
- FPTR = self.Ptr(FUNC)
- func_ptr = llhelper(FPTR, func)
- calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, EffectInfo.MOST_GENERAL)
- funcbox = self.get_funcbox(cpu, func_ptr)
+ result = sum(ints)
+ args = [I] * len(ints)
+ argslist = [ConstInt(i) for i in ints]
+ FUNC = self.FuncType(args, I)
+ FPTR = self.Ptr(FUNC)
+ func_ptr = llhelper(FPTR, func)
+ calldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, EffectInfo.MOST_GENERAL)
+ funcbox = self.get_funcbox(cpu, func_ptr)
- res = self.execute_operation(rop.CALL,
- [funcbox] + argslist,
- 'int', descr=calldescr)
- assert res.value == result
+ res = self.execute_operation(rop.CALL,
+ [funcbox] + argslist,
+ 'int', descr=calldescr)
+ assert res.value == result
def test_call_with_singlefloats(self):
diff --git a/pypy/jit/backend/x86/assembler.py b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -936,13 +936,17 @@
# move a ConstFloatLoc directly to a StackLoc, as two MOVs
# (even on x86-64, because the immediates are encoded as 32 bits)
assert isinstance(from_loc, ConstFloatLoc)
- assert isinstance(to_loc, StackLoc)
low_part = rffi.cast(rffi.CArrayPtr(rffi.INT), from_loc.value)[0]
high_part = rffi.cast(rffi.CArrayPtr(rffi.INT), from_loc.value)[1]
low_part = intmask(low_part)
high_part = intmask(high_part)
- self.mc.MOV32_bi(to_loc.value, low_part)
- self.mc.MOV32_bi(to_loc.value + 4, high_part)
+ if isinstance(to_loc, RawStackLoc):
+ self.mc.MOV32_bi(to_loc.value, low_part)
+ self.mc.MOV32_bi(to_loc.value + 4, high_part)
+ else:
+ assert isinstance(to_loc, RawEspLoc)
+ self.mc.MOV32_si(to_loc.value, low_part)
+ self.mc.MOV32_si(to_loc.value + 4, high_part)
def regalloc_perform(self, op, arglocs, resloc):
genop_list[op.getopnum()](self, op, arglocs, resloc)
@@ -1196,6 +1200,11 @@
# Load the singlefloat arguments from main regs or stack to xmm regs
if singlefloats is not None:
for src, dst in singlefloats:
+ if isinstance(dst, RawEspLoc) and isinstance(src, RawStackLoc):
+ # XXX too much special logic
+ self.mc.MOV32(X86_64_SCRATCH_REG, src)
+ self.mc.MOV32(dst, X86_64_SCRATCH_REG)
+ continue
if isinstance(src, ImmedLoc):
self.mc.MOV(X86_64_SCRATCH_REG, src)
src = X86_64_SCRATCH_REG
More information about the pypy-commit
mailing list