[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