Author: Armin Rigo <ar...@tunes.org> Branch: stmgc-c8 Changeset: r78293:fbdf4df6f63e Date: 2015-06-24 14:22 +0200 http://bitbucket.org/pypy/pypy/changeset/fbdf4df6f63e/
Log: Fix unexpected becomes-inevitable from some math functions diff --git a/TODO b/TODO --- a/TODO +++ b/TODO @@ -1,8 +1,3 @@ ------------------------------------------------------------- - -ll_math_modf(), say, causes stm_become_inevitable() -because of the raw array read "intpart_p[0]" - ------------------------------------------------------------ fuse the two 32bit setfield_gc for stmflags & tid in the jit diff --git a/rpython/rtyper/lltypesystem/module/ll_math.py b/rpython/rtyper/lltypesystem/module/ll_math.py --- a/rpython/rtyper/lltypesystem/module/ll_math.py +++ b/rpython/rtyper/lltypesystem/module/ll_math.py @@ -58,8 +58,10 @@ [rffi.DOUBLE, rffi.DOUBLE], rffi.DOUBLE, elidable_function=True) math_atan2 = llexternal('atan2', [rffi.DOUBLE, rffi.DOUBLE], rffi.DOUBLE) -math_frexp = llexternal('frexp', [rffi.DOUBLE, rffi.INTP], rffi.DOUBLE) -math_modf = llexternal('modf', [rffi.DOUBLE, rffi.DOUBLEP], rffi.DOUBLE) +math_frexp = llexternal('frexp', [rffi.DOUBLE, rffi.INTP_STM_NOTRACK], + rffi.DOUBLE) +math_modf = llexternal('modf', [rffi.DOUBLE, rffi.DOUBLEP_STM_NOTRACK], + rffi.DOUBLE) math_ldexp = llexternal('ldexp', [rffi.DOUBLE, rffi.INT], rffi.DOUBLE, save_err=rffi.RFFI_FULL_ERRNO_ZERO) math_pow = llexternal('pow', [rffi.DOUBLE, rffi.DOUBLE], rffi.DOUBLE, @@ -188,7 +190,7 @@ mantissa = x exponent = 0 else: - exp_p = lltype.malloc(rffi.INTP.TO, 1, flavor='raw') + exp_p = lltype.malloc(rffi.INTP_STM_NOTRACK.TO, 1, flavor='raw') try: mantissa = math_frexp(x, exp_p) exponent = rffi.cast(lltype.Signed, exp_p[0]) @@ -229,7 +231,7 @@ return (x, x) else: # isinf(x) return (math_copysign(0.0, x), x) - intpart_p = lltype.malloc(rffi.DOUBLEP.TO, 1, flavor='raw') + intpart_p = lltype.malloc(rffi.DOUBLEP_STM_NOTRACK.TO, 1, flavor='raw') try: fracpart = math_modf(x, intpart_p) intpart = intpart_p[0] diff --git a/rpython/rtyper/lltypesystem/rffi.py b/rpython/rtyper/lltypesystem/rffi.py --- a/rpython/rtyper/lltypesystem/rffi.py +++ b/rpython/rtyper/lltypesystem/rffi.py @@ -584,6 +584,9 @@ globals()[name.upper()] = tp tpp = lltype.Ptr(lltype.Array(tp, hints={'nolength': True})) globals()[name.upper()+'P'] = tpp + tppstm = lltype.Ptr(lltype.Array(tp, hints={'nolength': True, + 'stm_dont_track_raw_accesses': True})) + globals()[name.upper()+'P_STM_NOTRACK'] = tppstm result.append(tp) return result @@ -772,16 +775,25 @@ # double * DOUBLEP = lltype.Ptr(lltype.Array(DOUBLE, hints={'nolength': True})) +DOUBLEP_STM_NOTRACK = lltype.Ptr(lltype.Array(DOUBLE, hints={'nolength': True, + 'stm_dont_track_raw_accesses': True})) # float * FLOATP = lltype.Ptr(lltype.Array(FLOAT, hints={'nolength': True})) +FLOATP_STM_NOTRACK = lltype.Ptr(lltype.Array(FLOAT, hints={'nolength': True, + 'stm_dont_track_raw_accesses': True})) # long double * LONGDOUBLEP = lltype.Ptr(lltype.Array(LONGDOUBLE, hints={'nolength': True})) +LONGDOUBLEP_STM_NOTRACK = lltype.Ptr(lltype.Array(LONGDOUBLE, hints={ + 'nolength': True, + 'stm_dont_track_raw_accesses': True})) # Signed, Signed * SIGNED = lltype.Signed SIGNEDP = lltype.Ptr(lltype.Array(SIGNED, hints={'nolength': True})) +SIGNEDP_STM_NOTRACK = lltype.Ptr(lltype.Array(SIGNED, hints={'nolength': True, + 'stm_dont_track_raw_accesses': True})) # various type mapping _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit