Author: Richard Plangger <planri...@gmail.com>
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
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to