Author: Richard Plangger <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit