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

Reply via email to