[pypy-commit] pypy vecopt: removed annotation errors that occur when building the jit
plan_rich
noreply at buildbot.pypy.org
Tue May 19 16:59:48 CEST 2015
Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r77393:18c3705b8f89
Date: 2015-05-19 16:59 +0200
http://bitbucket.org/pypy/pypy/changeset/18c3705b8f89/
Log: removed annotation errors that occur when building the jit removed
commented (old) code from assembler do not assign item_size to
boxvector, but recreate the object instead use getter instead of
direct access to boxvector (item_size,item_count)
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -2518,7 +2518,7 @@
elif itemsize == 4:
self.mc.PMULLD(loc0, loc1)
elif itemsize == 8:
- self.mc.PMULDQ(loc0, loc1)
+ self.mc.PMULDQ(loc0, loc1) # TODO
else:
raise NotImplementedError("did not implement integer mul")
@@ -2591,27 +2591,9 @@
elif count == 2:
self.mc.MOVDDUP(resloc, loc0)
- # TODO remove
- #def _shuffle_by_index(self, src_loc, tmp_loc, item_type, size, index, count):
- # if index == 0 and count == 1:
- # return src_loc
- # select = 0
- # if item_type == FLOAT:
- # if size == 4:
- # self.mc.MOVUPS(tmp_loc, src_loc) # TODO could be aligned if xx
- # i = 0
- # while i < count:
- # select |= (index+i<<(i*2))
- # i += 1
- # self.mc.SHUFPS_xxi(tmp_loc.value, tmp_loc.value, select)
- # return tmp_loc
- # else:
- # raise NotImplementedError("shuffle by index for float64 not impl")
- # else:
- # raise NotImplementedError("shuffle by index for non floats")
-
def genop_vec_int_pack(self, op, arglocs, resloc):
resultloc, sourceloc, residxloc, srcidxloc, countloc, sizeloc = arglocs
+ assert isinstance(resultloc, RegLoc)
size = sizeloc.value
srcidx = srcidxloc.value
residx = residxloc.value
@@ -2652,6 +2634,8 @@
def genop_vec_float_pack(self, op, arglocs, resultloc):
resloc, srcloc, residxloc, srcidxloc, countloc, sizeloc = arglocs
+ assert isinstance(resloc, RegLoc)
+ assert isinstance(srcloc, RegLoc)
count = countloc.value
residx = residxloc.value
srcidx = srcidxloc.value
@@ -2701,36 +2685,6 @@
self.mc.SHUFPD_xxi(resloc.value, srcloc.value, 2)
genop_vec_float_unpack = genop_vec_float_pack
- #(self, op, arglocs, resloc):
- # resultloc, fromloc, tmploc = arglocs
- # result = op.result
- # indexarg = op.getarg(2)
- # countarg = op.getarg(2)
- # assert isinstance(result, BoxVector)
- # assert isinstance(indexarg, ConstInt)
- # assert isinstance(countarg, ConstInt)
- # index = indexarg.value
- # count = countarg.value
- # size = result.item_size
- # if size == 4:
- # if count == 1:
- # raise NotImplementedError("pack: float single pack")
- # elif count == 2:
- # select = (1 << 2) # move 0 -> 0, 1 -> 1 for toloc
- # if index == 0:
- # # move 0 -> 2, 1 -> 3 for fromloc
- # self.mc.SHUFPS_xxi(resultloc.value, fromloc.value, select | (1 << 2))
- # elif index == 2:
- # # move 0 -> 2, 1 -> 3 for fromloc
- # self.mc.SHUFPS_xxi(resultloc.value, fromloc.value, select | (1 << 6))
- # else:
- # raise NotImplementedError("pack: only index in {0,2} supported")
- # else:
- # raise NotImplementedError("pack: count 3 for single float pack not supported")
- # elif size == 8:
- # raise NotImplementedError("pack: float double pack")
-
-
def genop_vec_cast_float_to_singlefloat(self, op, arglocs, resloc):
self.mc.CVTPD2PS(resloc, arglocs[0])
@@ -2744,14 +2698,6 @@
def genop_vec_cast_singlefloat_to_float(self, op, arglocs, resloc):
loc0, tmploc, indexloc = arglocs
self.mc.CVTPS2PD(resloc, arglocs[0])
- #index = indexloc.value
- #if index == 0:
- #else:
- # assert index == 2
- # self.mc.MOVUPS(tmploc, loc0) # TODO could be aligned if xx
- # select = (2<<0)|(3<<2) # move pos 2->0,3->1
- # self.mc.SHUFPS_xxi(tmploc.value, tmploc.value, select)
- # self.mc.CVTPS2PD(resloc, tmploc) # expand
# ________________________________________
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1546,7 +1546,7 @@
residx = 0
assert isinstance(op.result, BoxVector)
args = op.getarglist()
- size = op.result.item_size
+ size = op.result.getsize()
arglocs = [resloc, srcloc, imm(index.value), imm(0), imm(count.value), imm(size)]
self.perform(op, arglocs, resloc)
@@ -1562,13 +1562,13 @@
if isinstance(op.result, BoxVector):
resloc = self.xrm.force_result_in_reg(op.result, op.getarg(0), args)
assert isinstance(op.result, BoxVector)
- size = op.result.item_size
+ size = op.result.getsize()
else:
# unpack into iX box
resloc = self.force_allocate_reg(op.result, args)
arg = op.getarg(0)
assert isinstance(arg, BoxVector)
- size = arg.item_size
+ size = arg.getsize()
residx = 0
args = op.getarglist()
arglocs = [resloc, srcloc, imm(residx), imm(index.value), imm(count.value), imm(size)]
@@ -1582,8 +1582,8 @@
resloc = self.force_allocate_reg(op.result, args)
vres = op.result
assert isinstance(vres, BoxVector)
- count = vres.item_count
- size = vres.item_size
+ count = vres.getcount()
+ size = vres.getsize()
self.perform(op, [srcloc, imm(size), imm(count)], resloc)
def consider_vec_int_signext(self, op):
@@ -1593,8 +1593,8 @@
result = op.result
assert isinstance(sizearg, BoxVector)
assert isinstance(result, BoxVector)
- size = sizearg.item_size
- tosize = result.item_size
+ size = sizearg.getsize()
+ tosize = result.getsize()
self.perform(op, [resloc, imm(size), imm(tosize)], resloc)
def consider_vec_box(self, op):
diff --git a/rpython/jit/backend/x86/regloc.py b/rpython/jit/backend/x86/regloc.py
--- a/rpython/jit/backend/x86/regloc.py
+++ b/rpython/jit/backend/x86/regloc.py
@@ -685,7 +685,7 @@
PSUBQ = _binaryop('PSUBQ')
PSUBD = _binaryop('PSUBD')
PSUBW = _binaryop('PSUBW')
- PSUBQ = _binaryop('PSUBQ')
+ PSUBB = _binaryop('PSUBB')
PMULDQ = _binaryop('PMULDQ')
PMULLD = _binaryop('PMULLD')
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -561,6 +561,8 @@
return self.item_size
def getsigned(self):
return self.signed
+ def getcount(self):
+ return self.item_count
def forget_value(self):
raise NotImplementedError("cannot forget value of vector")
diff --git a/rpython/jit/metainterp/optimizeopt/vectorize.py b/rpython/jit/metainterp/optimizeopt/vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/vectorize.py
@@ -402,7 +402,6 @@
(j, vbox) = sched_data.box_to_vbox.get(arg, (-1, None))
if vbox:
arg_cloned = arg.clonebox()
- py.test.set_trace()
cj = ConstInt(j)
ci = ConstInt(1)
opnum = rop.VEC_FLOAT_UNPACK
@@ -568,7 +567,7 @@
return self.type != PackType.UNKNOWN_TYPE and self.size > 0
def new_vector_box(self, count):
- return BoxVector(self.type, count, self.size, self.signed, self.count)
+ return BoxVector(self.type, count, self.size, self.signed)
def record_vbox(self, vbox):
if self.type == PackType.UNKNOWN_TYPE:
@@ -587,13 +586,13 @@
class OpToVectorOp(object):
def __init__(self, arg_ptypes, result_ptype, has_ptype=False, result_vsize_arg=-1):
- self.arg_ptypes = arg_ptypes
+ self.arg_ptypes = list(arg_ptypes) # do not use a tuple. rpython cannot union
self.result_ptype = result_ptype
self.has_ptype = has_ptype
self.result_vsize_arg = result_vsize_arg
def has_result(self):
- return self.result_ptype != None
+ return self.result_ptype is not None
def get_result_ptype(self):
return self.result_ptype
@@ -731,18 +730,21 @@
ptype = tovector.get_result_ptype().clone()
if tovector.has_ptype:
ptype = self.pack.ptype
- if ptype is not None:
- if ptype.size == -1:
- ptype.size = self.pack.ptype.size
- vbox = self.box_vector(ptype)
- else:
- vbox = self.box_vector(self.pack.ptype)
+ count = -1
if tovector.result_vsize_arg != -1:
# vec_int_signext specifies the size in bytes on the
# first argument.
arg = vop.getarg(tovector.result_vsize_arg)
assert isinstance(arg, ConstInt)
- vbox.item_size = arg.value
+ count = arg.value
+ else:
+ count = self.pack_ops
+ if ptype is not None:
+ if ptype.size == -1:
+ ptype.size = self.pack.ptype.size
+ vbox = ptype.new_vector_box(count)
+ else:
+ vbox = self.pack.ptype.new_vector_box(count)
#
vop.result = vbox
i = self.pack_off
@@ -754,10 +756,6 @@
i += 1
off += 1
- def box_vector(self, ptype):
- """ TODO remove this? """
- return BoxVector(ptype.type, self.pack_ops, ptype.size, ptype.signed)
-
def vector_arg(self, vop, argidx, arg_ptype):
ops = self.pack.operations
_, vbox = self.box_to_vbox.get(vop.getarg(argidx), (-1, None))
More information about the pypy-commit
mailing list