Author: Richard Plangger <planri...@gmail.com>
Branch: ppc-vsx-support
Changeset: r88023:cd016619fb7f
Date: 2016-11-01 12:06 +0100
http://bitbucket.org/pypy/pypy/changeset/cd016619fb7f/

Log:    simplification, distinct between integer and float case at
        update_at_exit

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
@@ -693,11 +693,6 @@
 
         self.fixup_target_tokens(rawstart)
         self.teardown()
-        # oprofile support
-        #if self.cpu.profile_agent is not None:
-        #    name = "Loop # %s: %s" % (looptoken.number, loopname)
-        #    self.cpu.profile_agent.native_code_written(name,
-        #                                               rawstart, full_size)
         #print(hex(rawstart+looppos))
         #import pdb; pdb.set_trace()
         return AsmInfo(ops_offset, rawstart + looppos,
@@ -1006,7 +1001,7 @@
                 return
             # move from fp register to memory
             elif loc.is_stack():
-                assert loc.type == FLOAT, "target not float location"
+                assert prev_loc.type == FLOAT, "source is not a float location"
                 offset = loc.value
                 self.mc.STDY(prev_loc, l.addr(offset, r.SPP))
                 return
@@ -1600,8 +1595,7 @@
         remap_frame_layout_mixed(self, src_locations1, dst_locations1, 
r.SCRATCH,
                                  src_locations2, dst_locations2, r.FP_SCRATCH, 
WORD)
 
-        offset = self.mc.get_relative_pos()
-        self.mc.b_abs(asminfo.rawstart)
+        self.mc.b_abs(asminfo.asmaddr)
 
         rawstart = self.materialize_loop(looptoken)
         # update the guard to jump right to this custom piece of assembler
diff --git a/rpython/jit/backend/zarch/vector_ext.py 
b/rpython/jit/backend/zarch/vector_ext.py
--- a/rpython/jit/backend/zarch/vector_ext.py
+++ b/rpython/jit/backend/zarch/vector_ext.py
@@ -168,11 +168,15 @@
             scalar_arg = accum_info.getoriginal()
             orig_scalar_loc = scalar_loc
             if not scalar_loc.is_reg():
-                scalar_loc = r.FP_SCRATCH
+                if scalar_arg.type == FLOAT:
+                    scalar_loc = r.FP_SCRATCH
+                else:
+                    scalar_loc = r.SCRATCH2
+                self.regalloc_mov(orig_scalar_loc, scalar_loc)
             assert scalar_arg is not None
             op = accum_info.accum_operation
             self._accum_reduce(op, scalar_arg, vector_loc, scalar_loc)
-            if scalar_loc is r.FP_SCRATCH:
+            if scalar_loc is not orig_scalar_loc:
                 self.regalloc_mov(scalar_loc, orig_scalar_loc)
             accum_info = accum_info.next()
 
@@ -268,9 +272,8 @@
         else:
             assert arg.type == INT
             # store the vector onto the stack, just below the stack pointer
-            self.mc.VST(accumloc, l.addr(0, r.SP))
-            self.mc.LG(r.SCRATCH, l.addr(0, r.SP))
-            self.mc.LG(targetloc, l.addr(8, r.SP))
+            self.mc.VLGV(r.SCRATCH, accumloc, l.addr(0), l.itemsize_to_mask(8))
+            self.mc.VLGV(targetloc, accumloc, l.addr(1), l.itemsize_to_mask(8))
             if op == '+':
                 self.mc.AGR(targetloc, r.SCRATCH)
                 return
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to