[pypy-commit] pypy reusing-r11: fix vector_ext too

arigo pypy.commits at gmail.com
Wed Apr 5 10:35:15 EDT 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: reusing-r11
Changeset: r90972:2bf445995637
Date: 2017-04-05 16:34 +0200
http://bitbucket.org/pypy/pypy/changeset/2bf445995637/

Log:	fix vector_ext too

diff --git a/rpython/jit/backend/x86/vector_ext.py b/rpython/jit/backend/x86/vector_ext.py
--- a/rpython/jit/backend/x86/vector_ext.py
+++ b/rpython/jit/backend/x86/vector_ext.py
@@ -173,9 +173,10 @@
             return
         elif arg.type == INT:
             scratchloc = X86_64_SCRATCH_REG
+            self.mc.forget_scratch_register()
             self.mc.PEXTRQ_rxi(targetloc.value, accumloc.value, 0)
             self.mc.PEXTRQ_rxi(scratchloc.value, accumloc.value, 1)
-            self.mc.ADD(targetloc, scratchloc)
+            self.mc.ADD_rr(targetloc.value, scratchloc.value)
             return
 
         not_implemented("reduce sum for %s not impl." % arg)
@@ -387,6 +388,7 @@
             return # already the right size
         if size == 4 and tosize == 8:
             scratch = X86_64_SCRATCH_REG.value
+            self.mc.forget_scratch_register()
             self.mc.PEXTRD_rxi(scratch, srcloc.value, 1)
             self.mc.PINSRQ_xri(resloc.value, scratch, 1)
             self.mc.PEXTRD_rxi(scratch, srcloc.value, 0)
@@ -394,6 +396,7 @@
         elif size == 8 and tosize == 4:
             # is there a better sequence to move them?
             scratch = X86_64_SCRATCH_REG.value
+            self.mc.forget_scratch_register()
             self.mc.PEXTRQ_rxi(scratch, srcloc.value, 0)
             self.mc.PINSRD_xri(resloc.value, scratch, 0)
             self.mc.PEXTRQ_rxi(scratch, srcloc.value, 1)
@@ -426,6 +429,7 @@
     def genop_vec_expand_i(self, op, arglocs, resloc):
         srcloc, sizeloc = arglocs
         if not isinstance(srcloc, RegLoc):
+            # self.mc.forget_scratch_register(): done by self.mov()
             self.mov(srcloc, X86_64_SCRATCH_REG)
             srcloc = X86_64_SCRATCH_REG
         assert not srcloc.is_xmm
@@ -465,6 +469,7 @@
         while k > 0:
             if size == 8:
                 if resultloc.is_xmm and sourceloc.is_xmm: # both xmm
+                    self.mc.forget_scratch_register()
                     self.mc.PEXTRQ_rxi(X86_64_SCRATCH_REG.value, sourceloc.value, si)
                     self.mc.PINSRQ_xri(resultloc.value, X86_64_SCRATCH_REG.value, ri)
                 elif resultloc.is_xmm: # xmm <- reg
@@ -473,6 +478,7 @@
                     self.mc.PEXTRQ_rxi(resultloc.value, sourceloc.value, si)
             elif size == 4:
                 if resultloc.is_xmm and sourceloc.is_xmm:
+                    self.mc.forget_scratch_register()
                     self.mc.PEXTRD_rxi(X86_64_SCRATCH_REG.value, sourceloc.value, si)
                     self.mc.PINSRD_xri(resultloc.value, X86_64_SCRATCH_REG.value, ri)
                 elif resultloc.is_xmm:
@@ -481,6 +487,7 @@
                     self.mc.PEXTRD_rxi(resultloc.value, sourceloc.value, si)
             elif size == 2:
                 if resultloc.is_xmm and sourceloc.is_xmm:
+                    self.mc.forget_scratch_register()
                     self.mc.PEXTRW_rxi(X86_64_SCRATCH_REG.value, sourceloc.value, si)
                     self.mc.PINSRW_xri(resultloc.value, X86_64_SCRATCH_REG.value, ri)
                 elif resultloc.is_xmm:
@@ -489,6 +496,7 @@
                     self.mc.PEXTRW_rxi(resultloc.value, sourceloc.value, si)
             elif size == 1:
                 if resultloc.is_xmm and sourceloc.is_xmm:
+                    self.mc.forget_scratch_register()
                     self.mc.PEXTRB_rxi(X86_64_SCRATCH_REG.value, sourceloc.value, si)
                     self.mc.PINSRB_xri(resultloc.value, X86_64_SCRATCH_REG.value, ri)
                 elif resultloc.is_xmm:


More information about the pypy-commit mailing list