Author: Richard Plangger <[email protected]>
Branch: s390x-backend
Changeset: r80386:535d3fb38323
Date: 2015-10-22 12:13 +0200
http://bitbucket.org/pypy/pypy/changeset/535d3fb38323/
Log: made the instruction type RRF more general to support each
unsupported parameter
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
@@ -9,6 +9,8 @@
return 0
if arg == 'f':
return 0
+ if arg == '-':
+ return 0
if arg.startswith('i') or arg.startswith('u'):
return 0
return loc.addr(0)
@@ -20,6 +22,7 @@
""" NOT_RPYTHON """
"""
Available names:
+ - - unused
f - floating point register
r - register
r/m - register or mask
@@ -290,22 +293,28 @@
self.writechar(opcode2)
return encode_ri
-def build_rrf(mnemonic, (opcode1,opcode2)):
- @builder.arguments('r,r/m,r,r/m')
- def encode_rrf(self, r1, rm3, r2, rm4):
- self.writechar(opcode1)
- self.writechar(opcode2)
- byte = (rm3 & BIT_MASK_4) << 4 | (rm4 & BIT_MASK_4)
- self.writechar(chr(byte))
- byte = (r1 & BIT_MASK_4) << 4 | (r2 & BIT_MASK_4)
- self.writechar(chr(byte))
- return encode_rrf
+def _build_rrf(args):
+ def build_rff(mnemonic, (opcode1,opcode2)):
+ @builder.arguments(args)
+ def encode_rrf(self, r1, rm3, r2, rm4):
+ self.writechar(opcode1)
+ self.writechar(opcode2)
+ byte = (rm3 & BIT_MASK_4) << 4 | (rm4 & BIT_MASK_4)
+ self.writechar(chr(byte))
+ byte = (r1 & BIT_MASK_4) << 4 | (r2 & BIT_MASK_4)
+ self.writechar(chr(byte))
+ return encode_rrf
+ return build_rff
+
+build_rrf = _build_rrf('r,u4,r,-')
def build_unpack_func(mnemonic, func):
def function(self, *args):
- newargs = [None] * len(args)
+ newargs = [None] * len(func._arguments_)
for i,arg in enumerate(unrolling_iterable(func._arguments_)):
- if arg == 'r' or arg == 'r/m' or arg == 'f':
+ if arg == '-':
+ newargs[i] = 0
+ elif arg == 'r' or arg == 'r/m' or arg == 'f':
newargs[i] = args[i].value
elif arg.startswith('i') or arg.startswith('u'):
newargs[i] = args[i].value
diff --git a/rpython/jit/backend/zarch/masks.py
b/rpython/jit/backend/zarch/masks.py
new file mode 100644
--- /dev/null
+++ b/rpython/jit/backend/zarch/masks.py
@@ -0,0 +1,8 @@
+from rpython.jit.backend.zarch import locations as loc
+
+RND_CURMODE = loc.imm(0x0)
+RND_BIASED_NEAREST = loc.imm(0x1)
+RND_NEARST = loc.imm(0x4)
+RND_TOZERO = loc.imm(0x5)
+RND_TO_POSINF = loc.imm(0x6)
+RND_TO_NEGINF= loc.imm(0x7)
diff --git a/rpython/jit/backend/zarch/test/test_assembler.py
b/rpython/jit/backend/zarch/test/test_assembler.py
--- a/rpython/jit/backend/zarch/test/test_assembler.py
+++ b/rpython/jit/backend/zarch/test/test_assembler.py
@@ -201,7 +201,6 @@
self.mc.write(BFL(-15.0))
self.jump_here(self.mc.BRAS, 'lit')
self.mc.LD(reg.f0, loc.addr(0, reg.r13))
- self.mc.FIDBR(reg.f1, msk.RND_CURMODE, reg.f0, loc.imm(0))
- self.mc.CGDBR(reg.r2, msk.RND_CURMODE, reg.f1, loc.imm(0))
+ self.mc.CGDBR(reg.r2, msk.RND_CURMODE, reg.f0)
self.a.jmpto(reg.r14)
assert run_asm(self.a) == -15
diff --git a/rpython/jit/backend/zarch/test/test_auto_encoding.py
b/rpython/jit/backend/zarch/test/test_auto_encoding.py
--- a/rpython/jit/backend/zarch/test/test_auto_encoding.py
+++ b/rpython/jit/backend/zarch/test/test_auto_encoding.py
@@ -128,6 +128,7 @@
FP_REGS = range(16)
FP_REGNAMES = ['%%f%d' % i for i in FP_REGS]
TEST_CASE_GENERATE = {
+ '-': [],
'r': REGS,
'f': FP_REGS,
'r/m': REGS,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit