Author: Richard Plangger <r...@pasra.at> Branch: vecopt Changeset: r78266:c9e6e55b3900 Date: 2015-06-23 16:48 +0200 http://bitbucket.org/pypy/pypy/changeset/c9e6e55b3900/
Log: started to bail out for some operations that cannot be implemented efficiently in SSE4.1 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 @@ -2536,10 +2536,6 @@ self.mc.PHADDD(accumloc, accumloc) self.mc.PEXTRD_rxi(targetloc.value, accumloc.value, 0) return - if size == 2: - pass - if size == 1: - pass raise NotImplementedError("reduce sum for %s not impl." % vector_var) 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 @@ -657,6 +657,8 @@ if packed.is_raw_array_access(): if packed.getarg(1) == inquestion.result: return True + if inquestion.casts_box(): + pass return False def combine(self, i, j): diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -189,6 +189,12 @@ def returns_bool_result(self): return self._cls_has_bool_result + def casts_box(self): + return self.getopnum() == rop.INT_SIGNEXT or \ + rop.CAST_FLOAT_TO_INT <= opnum <= rop.CAST_SINGLEFLOAT_TO_FLOAT or \ + rop._VEC_CAST_FIRST <= opnum <= rop._VEC_CAST_LAST or \ + rop.CAST_PTR_TO_INT == opnum or \ + rop.CAST_INT_TO_PTR == opnum # =================== # Top of the hierachy @@ -472,6 +478,7 @@ '_VEC_ARITHMETIC_LAST', 'VEC_FLOAT_EQ/2', + '_VEC_CAST_FIRST', 'VEC_INT_SIGNEXT/2', # double -> float: v2 = cast(v1, 2) equal to v2 = (v1[0], v1[1], X, X) 'VEC_CAST_FLOAT_TO_SINGLEFLOAT/1', @@ -479,6 +486,7 @@ 'VEC_CAST_SINGLEFLOAT_TO_FLOAT/1', 'VEC_CAST_FLOAT_TO_INT/1', 'VEC_CAST_INT_TO_FLOAT/1', + '_VEC_CAST_LAST', 'VEC_FLOAT_UNPACK/3', # iX|fX = VEC_FLOAT_UNPACK(vX, index, item_count) 'VEC_FLOAT_PACK/4', # VEC_FLOAT_PACK(vX, var/const, index, item_count) diff --git a/rpython/jit/metainterp/warmspot.py b/rpython/jit/metainterp/warmspot.py --- a/rpython/jit/metainterp/warmspot.py +++ b/rpython/jit/metainterp/warmspot.py @@ -40,18 +40,21 @@ self.vec = vec def xxx_clock_start(self): + if not self.vec: + return now = time.clock() self.t.append(now) debug_start("xxx-clock-start") debug_print("name: %s id(jdsd): %s now: %dns" % \ - (self.name, self.unique_id, int(now*10**9))) + (self.name, self.unique_id, int(now)*10**9) ) debug_stop("xxx-clock-start") def xxx_clock_stop(self, fail=False): + if not self.vec: + return end = time.clock() if len(self.t) == 0: return - assert len(self.t) == 1 start = self.t[-1] if not fail: del self.t[-1] _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit