Author: Richard Plangger <planri...@gmail.com> Branch: s390x-backend Changeset: r81673:c296d7fff786 Date: 2016-01-11 16:25 +0100 http://bitbucket.org/pypy/pypy/changeset/c296d7fff786/
Log: some more translation issues solved diff --git a/rpython/jit/backend/zarch/assembler.py b/rpython/jit/backend/zarch/assembler.py --- a/rpython/jit/backend/zarch/assembler.py +++ b/rpython/jit/backend/zarch/assembler.py @@ -32,6 +32,9 @@ from rpython.rtyper.annlowlevel import llhelper, cast_instance_to_gcref from rpython.rlib.jit import AsmInfo +class JitFrameTooDeep(Exception): + pass + class AssemblerZARCH(BaseAssembler, OpAssembler): def __init__(self, cpu, translate_support_code=False): @@ -835,10 +838,9 @@ return # move immediate value to memory elif loc.is_stack(): - with scratch_reg(self.mc): - offset = loc.value - self.mc.load_imm(r.SCRATCH, prev_loc) - self.mc.STG(r.SCRATCH, l.addr(offset, r.SPP)) + offset = loc.value + self.mc.load_imm(r.SCRATCH, prev_loc.value) + self.mc.STG(r.SCRATCH, l.addr(offset, r.SPP)) return assert 0, "not supported location" elif prev_loc.is_in_pool(): @@ -858,9 +860,8 @@ # move in memory elif loc.is_stack(): target_offset = loc.value - with scratch_reg(self.mc): - self.mc.load(r.SCRATCH.value, r.SPP, offset) - self.mc.store(r.SCRATCH.value, r.SPP, target_offset) + self.mc.load(r.SCRATCH, r.SPP, offset) + self.mc.store(r.SCRATCH, r.SPP, target_offset) return # move from memory to fp register elif loc.is_fp_reg(): @@ -879,23 +880,16 @@ self.mc.STG(prev_loc, l.addr(offset, r.SPP)) return assert 0, "not supported location" - elif prev_loc.is_imm_float(): - value = prev_loc.getint() + elif prev_loc.is_in_pool(): # move immediate value to fp register if loc.is_fp_reg(): - xxx - with scratch_reg(self.mc): - self.mc.load_imm(r.SCRATCH, value) - self.mc.lfdx(loc.value, 0, r.SCRATCH.value) + self.LD(loc, prev_loc) return # move immediate value to memory elif loc.is_stack(): - xxx - with scratch_reg(self.mc): - offset = loc.value - self.mc.load_imm(r.SCRATCH, value) - self.mc.lfdx(r.FP_SCRATCH.value, 0, r.SCRATCH.value) - self.mc.stfd(r.FP_SCRATCH.value, r.SPP.value, offset) + offset = loc.value + self.mc.LD(r.FP_SCRATCH, prev_loc) + self.mc.STDY(r.FP_SCRATCH, l.addr(offset, r.SPP)) return assert 0, "not supported location" elif prev_loc.is_fp_reg(): diff --git a/rpython/jit/backend/zarch/instruction_builder.py b/rpython/jit/backend/zarch/instruction_builder.py --- a/rpython/jit/backend/zarch/instruction_builder.py +++ b/rpython/jit/backend/zarch/instruction_builder.py @@ -448,7 +448,9 @@ else: return arg unpack_arg._annspecialcase_ = 'specialize:arg(1)' - argtypes = func._arguments_ + argtypes = func._arguments_[:] + #while len(argtypes) > 0 and argtypes[-1] == '-': + # argtypes.pop() at = argtypes[0] if len(argtypes) >= 1 else '-' bt = argtypes[1] if len(argtypes) >= 2 else '-' ct = argtypes[2] if len(argtypes) >= 3 else '-' @@ -467,7 +469,7 @@ f = unpack_arg(b, bt) g = unpack_arg(c, ct) return func(self, e, f, g) - def function4(self, a, b): + def function4(self, a, b, c, d): e = unpack_arg(a, at) f = unpack_arg(b, bt) g = unpack_arg(c, ct) diff --git a/rpython/jit/backend/zarch/locations.py b/rpython/jit/backend/zarch/locations.py --- a/rpython/jit/backend/zarch/locations.py +++ b/rpython/jit/backend/zarch/locations.py @@ -97,31 +97,6 @@ def is_imm(self): return True -class ConstFloatLoc(AssemblerLocation): - """This class represents an imm float value which is stored in memory at - the address stored in the field value""" - _immutable_ = True - width = WORD - type = FLOAT - - def __init__(self, value): - self.value = value - - def getint(self): - return self.value - - def __repr__(self): - return "imm_float(stored at %d)" % (self.value) - - def is_imm_float(self): - return True - - def as_key(self): # a real address + 1 - return self.value | 1 - - def is_float(self): - return True - class StackLocation(AssemblerLocation): _immutable_ = True diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py --- a/rpython/jit/backend/zarch/opassembler.py +++ b/rpython/jit/backend/zarch/opassembler.py @@ -21,6 +21,7 @@ from rpython.jit.codewriter.effectinfo import EffectInfo from rpython.jit.metainterp.history import (FLOAT, INT, REF, VOID) from rpython.jit.metainterp.resoperation import rop +from rpython.rtyper import rclass from rpython.rtyper.lltypesystem import rstr, rffi, lltype from rpython.rtyper.annlowlevel import cast_instance_to_gcref from rpython.rlib.objectmodel import we_are_translated @@ -875,7 +876,7 @@ addr_loc = l.addr(offset_loc.value, base_loc, index_loc) else: self.mc.LGR(helper_reg, index_loc) - slef.mc.AGR(helper_reg, offset_loc) + self.mc.AGR(helper_reg, offset_loc) addr_loc = l.addr(0, base_loc, helper_reg) return addr_loc diff --git a/rpython/jit/backend/zarch/regalloc.py b/rpython/jit/backend/zarch/regalloc.py --- a/rpython/jit/backend/zarch/regalloc.py +++ b/rpython/jit/backend/zarch/regalloc.py @@ -81,7 +81,7 @@ def place_in_pool(self, var): offset = self.assembler.pool.get_offset(var) - return l.pool(offset, r.POOL) + return l.pool(offset, float=True) def ensure_reg(self, box, force_in_reg): if isinstance(box, Const): @@ -566,7 +566,7 @@ def ensure_reg_or_any_imm(self, box): if box.type == FLOAT: - return self.fprm.ensure_reg(box) + return self.fprm.ensure_reg(box, True) else: if isinstance(box, Const): return imm(box.getint()) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit