Author: Benjamin Peterson <benja...@python.org> Branch: Changeset: r44940:e5aa56d5cb61 Date: 2011-06-14 08:45 -0500 http://bitbucket.org/pypy/pypy/changeset/e5aa56d5cb61/
Log: merge heads diff --git a/pypy/jit/backend/llsupport/test/test_gc.py b/pypy/jit/backend/llsupport/test/test_gc.py --- a/pypy/jit/backend/llsupport/test/test_gc.py +++ b/pypy/jit/backend/llsupport/test/test_gc.py @@ -9,7 +9,7 @@ from pypy.jit.metainterp.resoperation import get_deep_immutable_oplist from pypy.jit.tool.oparser import parse from pypy.rpython.lltypesystem.rclass import OBJECT, OBJECT_VTABLE -from pypy.jit.metainterp.test.test_optimizeopt import equaloplists +from pypy.jit.metainterp.optimizeopt.test.test_optimizeopt import equaloplists def test_boehm(): gc_ll_descr = GcLLDescr_boehm(None, None, None) diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py --- a/pypy/jit/metainterp/compile.py +++ b/pypy/jit/metainterp/compile.py @@ -14,7 +14,7 @@ from pypy.jit.metainterp.history import BoxPtr, BoxObj, BoxFloat, Const from pypy.jit.metainterp import history from pypy.jit.metainterp.typesystem import llhelper, oohelper -from pypy.jit.metainterp.optimizeutil import InvalidLoop +from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.metainterp.resume import NUMBERING from pypy.jit.codewriter import heaptracker, longlong diff --git a/pypy/jit/metainterp/optimize.py b/pypy/jit/metainterp/optimize.py --- a/pypy/jit/metainterp/optimize.py +++ b/pypy/jit/metainterp/optimize.py @@ -1,9 +1,20 @@ from pypy.rlib.debug import debug_start, debug_stop +from pypy.jit.metainterp.jitexc import JitException + +class InvalidLoop(JitException): + """Raised when the optimize*.py detect that the loop that + we are trying to build cannot possibly make sense as a + long-running loop (e.g. it cannot run 2 complete iterations).""" + +class RetraceLoop(JitException): + """ Raised when inlining a short preamble resulted in an + InvalidLoop. This means the optimized loop is too specialized + to be useful here, so we trace it again and produced a second + copy specialized in some different way. + """ # ____________________________________________________________ -from pypy.jit.metainterp.optimizeopt import optimize_loop_1, optimize_bridge_1 - def optimize_loop(metainterp_sd, old_loop_tokens, loop, enable_opts): debug_start("jit-optimize") try: @@ -13,6 +24,7 @@ debug_stop("jit-optimize") def _optimize_loop(metainterp_sd, old_loop_tokens, loop, enable_opts): + from pypy.jit.metainterp.optimizeopt import optimize_loop_1 cpu = metainterp_sd.cpu loop.logops = metainterp_sd.logger_noopt.log_loop(loop.inputargs, loop.operations) @@ -36,6 +48,7 @@ def _optimize_bridge(metainterp_sd, old_loop_tokens, bridge, enable_opts, inline_short_preamble, retraced=False): + from pypy.jit.metainterp.optimizeopt import optimize_bridge_1 cpu = metainterp_sd.cpu bridge.logops = metainterp_sd.logger_noopt.log_loop(bridge.inputargs, bridge.operations) diff --git a/pypy/jit/metainterp/optimizeopt/fficall.py b/pypy/jit/metainterp/optimizeopt/fficall.py --- a/pypy/jit/metainterp/optimizeopt/fficall.py +++ b/pypy/jit/metainterp/optimizeopt/fficall.py @@ -4,7 +4,7 @@ from pypy.rlib.debug import debug_start, debug_stop, debug_print, have_debug_prints from pypy.jit.codewriter.effectinfo import EffectInfo from pypy.jit.metainterp.resoperation import rop, ResOperation -from pypy.jit.metainterp.optimizeutil import _findall +from pypy.jit.metainterp.optimizeopt.util import _findall from pypy.jit.metainterp.optimizeopt.optimizer import Optimization from pypy.jit.backend.llsupport.ffisupport import UnsupportedKind diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py --- a/pypy/jit/metainterp/optimizeopt/heap.py +++ b/pypy/jit/metainterp/optimizeopt/heap.py @@ -1,5 +1,5 @@ import os -from pypy.jit.metainterp.optimizeutil import _findall +from pypy.jit.metainterp.optimizeopt.util import _findall from pypy.jit.metainterp.resoperation import rop, ResOperation from pypy.rlib.objectmodel import we_are_translated from pypy.jit.metainterp.jitexc import JitException diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py --- a/pypy/jit/metainterp/optimizeopt/intbounds.py +++ b/pypy/jit/metainterp/optimizeopt/intbounds.py @@ -1,5 +1,5 @@ from pypy.jit.metainterp.optimizeopt.optimizer import Optimization, CONST_1, CONST_0 -from pypy.jit.metainterp.optimizeutil import _findall +from pypy.jit.metainterp.optimizeopt.util import _findall from pypy.jit.metainterp.optimizeopt.intutils import IntBound, IntUnbounded, \ IntLowerBound, IntUpperBound from pypy.jit.metainterp.history import Const, ConstInt diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py --- a/pypy/jit/metainterp/optimizeopt/optimizer.py +++ b/pypy/jit/metainterp/optimizeopt/optimizer.py @@ -4,9 +4,9 @@ from pypy.jit.metainterp.resoperation import rop, ResOperation from pypy.jit.metainterp import jitprof from pypy.jit.metainterp.executor import execute_nonspec -from pypy.jit.metainterp.optimizeutil import _findall, sort_descrs -from pypy.jit.metainterp.optimizeutil import descrlist_dict -from pypy.jit.metainterp.optimizeutil import InvalidLoop, args_dict +from pypy.jit.metainterp.optimizeopt.util import _findall, sort_descrs +from pypy.jit.metainterp.optimizeopt.util import descrlist_dict, args_dict +from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.metainterp import resume, compile from pypy.jit.metainterp.typesystem import llhelper, oohelper from pypy.rpython.lltypesystem import lltype diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py b/pypy/jit/metainterp/optimizeopt/rewrite.py --- a/pypy/jit/metainterp/optimizeopt/rewrite.py +++ b/pypy/jit/metainterp/optimizeopt/rewrite.py @@ -1,7 +1,7 @@ from pypy.jit.metainterp.optimizeopt.optimizer import * from pypy.jit.metainterp.resoperation import opboolinvers, opboolreflex from pypy.jit.metainterp.history import ConstInt -from pypy.jit.metainterp.optimizeutil import _findall +from pypy.jit.metainterp.optimizeopt.util import _findall from pypy.jit.metainterp.resoperation import rop, ResOperation from pypy.jit.codewriter.effectinfo import EffectInfo from pypy.jit.metainterp.optimizeopt.intutils import IntBound diff --git a/pypy/jit/metainterp/optimizeopt/simplify.py b/pypy/jit/metainterp/optimizeopt/simplify.py --- a/pypy/jit/metainterp/optimizeopt/simplify.py +++ b/pypy/jit/metainterp/optimizeopt/simplify.py @@ -1,7 +1,7 @@ from pypy.jit.metainterp.resoperation import ResOperation, rop from pypy.jit.metainterp.optimizeopt.optimizer import Optimization -from pypy.jit.metainterp.optimizeutil import _findall +from pypy.jit.metainterp.optimizeopt.util import _findall class OptSimplify(Optimization): def optimize_CALL_PURE(self, op): diff --git a/pypy/jit/metainterp/optimizeopt/string.py b/pypy/jit/metainterp/optimizeopt/string.py --- a/pypy/jit/metainterp/optimizeopt/string.py +++ b/pypy/jit/metainterp/optimizeopt/string.py @@ -8,7 +8,7 @@ from pypy.jit.metainterp.optimizeopt import optimizer, virtualize from pypy.jit.metainterp.optimizeopt.optimizer import CONST_0, CONST_1 from pypy.jit.metainterp.optimizeopt.optimizer import llhelper -from pypy.jit.metainterp.optimizeutil import _findall +from pypy.jit.metainterp.optimizeopt.util import _findall from pypy.jit.codewriter.effectinfo import EffectInfo from pypy.jit.codewriter import heaptracker from pypy.rlib.unroll import unrolling_iterable diff --git a/pypy/jit/metainterp/optimizeopt/test/__init__.py b/pypy/jit/metainterp/optimizeopt/test/__init__.py new file mode 100644 diff --git a/pypy/jit/metainterp/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py rename from pypy/jit/metainterp/test/test_optimizebasic.py rename to pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/pypy/jit/metainterp/test/test_optimizebasic.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -1,18 +1,18 @@ import py from pypy.rlib.objectmodel import instantiate -from pypy.jit.metainterp.test.test_optimizeutil import (LLtypeMixin, - #OOtypeMixin, - BaseTest) +from pypy.jit.metainterp.optimizeopt.test.test_util import (LLtypeMixin, + #OOtypeMixin, + BaseTest) from pypy.jit.metainterp.test.test_compile import FakeLogger import pypy.jit.metainterp.optimizeopt.optimizer as optimizeopt import pypy.jit.metainterp.optimizeopt.virtualize as virtualize -from pypy.jit.metainterp.optimizeutil import InvalidLoop +from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt from pypy.jit.metainterp.jitprof import EmptyProfiler from pypy.jit.metainterp import executor, compile, resume, history from pypy.jit.metainterp.resoperation import rop, opname, ResOperation from pypy.jit.tool.oparser import pure_parse -from pypy.jit.metainterp.optimizeutil import args_dict +from pypy.jit.metainterp.optimizeopt.util import args_dict ##class FakeFrame(object): ## parent_resumedata_snapshot = None @@ -104,7 +104,7 @@ assert vinfo3 is vinfo4 def test_descrlist_dict(): - from pypy.jit.metainterp import optimizeutil + from pypy.jit.metainterp.optimizeopt import util as optimizeutil h1 = optimizeutil.descrlist_hash([]) h2 = optimizeutil.descrlist_hash([LLtypeMixin.valuedescr]) h3 = optimizeutil.descrlist_hash( diff --git a/pypy/jit/metainterp/test/test_optimizefficall.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py rename from pypy/jit/metainterp/test/test_optimizefficall.py rename to pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py --- a/pypy/jit/metainterp/test/test_optimizefficall.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py @@ -2,8 +2,8 @@ from pypy.rlib.libffi import Func, types from pypy.jit.metainterp.history import AbstractDescr from pypy.jit.codewriter.effectinfo import EffectInfo -from pypy.jit.metainterp.test.test_optimizebasic import BaseTestBasic -from pypy.jit.metainterp.test.test_optimizebasic import LLtypeMixin +from pypy.jit.metainterp.optimizeopt.test.test_optimizebasic import BaseTestBasic +from pypy.jit.metainterp.optimizeopt.test.test_optimizebasic import LLtypeMixin class MyCallDescr(AbstractDescr): """ diff --git a/pypy/jit/metainterp/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py rename from pypy/jit/metainterp/test/test_optimizeopt.py rename to pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/pypy/jit/metainterp/test/test_optimizeopt.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -1,20 +1,20 @@ import py from pypy.rlib.objectmodel import instantiate -from pypy.jit.metainterp.test.test_optimizeutil import (LLtypeMixin, - #OOtypeMixin, - BaseTest) +from pypy.jit.metainterp.optimizeopt.test.test_util import (LLtypeMixin, + #OOtypeMixin, + BaseTest) import pypy.jit.metainterp.optimizeopt.optimizer as optimizeopt import pypy.jit.metainterp.optimizeopt.virtualize as virtualize from pypy.jit.metainterp.optimizeopt import optimize_loop_1, ALL_OPTS_DICT, build_opt_chain -from pypy.jit.metainterp.optimizeutil import InvalidLoop +from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt from pypy.jit.metainterp.history import TreeLoop, LoopToken from pypy.jit.metainterp.jitprof import EmptyProfiler from pypy.jit.metainterp import executor, compile, resume, history from pypy.jit.metainterp.resoperation import rop, opname, ResOperation from pypy.jit.tool.oparser import pure_parse -from pypy.jit.metainterp.test.test_optimizebasic import equaloplists -from pypy.jit.metainterp.optimizeutil import args_dict +from pypy.jit.metainterp.optimizeopt.test.test_optimizebasic import equaloplists +from pypy.jit.metainterp.optimizeopt.util import args_dict from pypy.config.pypyoption import get_pypy_config class Fake(object): @@ -134,7 +134,7 @@ assert vinfo3 is vinfo4 def test_descrlist_dict(): - from pypy.jit.metainterp import optimizeutil + from pypy.jit.metainterp.optimizeopt import util as optimizeutil h1 = optimizeutil.descrlist_hash([]) h2 = optimizeutil.descrlist_hash([LLtypeMixin.valuedescr]) h3 = optimizeutil.descrlist_hash( diff --git a/pypy/jit/metainterp/test/test_optimizeutil.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py rename from pypy/jit/metainterp/test/test_optimizeutil.py rename to pypy/jit/metainterp/optimizeopt/test/test_util.py --- a/pypy/jit/metainterp/test/test_optimizeutil.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py @@ -9,7 +9,8 @@ from pypy.jit.metainterp.history import (BoxInt, BoxPtr, ConstInt, ConstPtr, Const, TreeLoop, BoxObj, ConstObj, AbstractDescr) -from pypy.jit.metainterp.optimizeutil import sort_descrs, InvalidLoop +from pypy.jit.metainterp.optimizeopt.util import sort_descrs +from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.codewriter.effectinfo import EffectInfo from pypy.jit.codewriter.heaptracker import register_known_gctype, adr2int from pypy.jit.tool.oparser import parse diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py --- a/pypy/jit/metainterp/optimizeopt/unroll.py +++ b/pypy/jit/metainterp/optimizeopt/unroll.py @@ -5,7 +5,7 @@ from pypy.jit.metainterp.resume import Snapshot from pypy.jit.metainterp.history import TreeLoop, LoopToken from pypy.rlib.debug import debug_start, debug_stop, debug_print -from pypy.jit.metainterp.optimizeutil import InvalidLoop, RetraceLoop +from pypy.jit.metainterp.optimize import InvalidLoop, RetraceLoop from pypy.jit.metainterp.jitexc import JitException from pypy.jit.metainterp.history import make_hashable_int from pypy.jit.codewriter.effectinfo import EffectInfo diff --git a/pypy/jit/metainterp/optimizeutil.py b/pypy/jit/metainterp/optimizeopt/util.py rename from pypy/jit/metainterp/optimizeutil.py rename to pypy/jit/metainterp/optimizeopt/util.py --- a/pypy/jit/metainterp/optimizeutil.py +++ b/pypy/jit/metainterp/optimizeopt/util.py @@ -5,18 +5,6 @@ from pypy.jit.metainterp.jitexc import JitException from pypy.rlib.debug import make_sure_not_resized -class InvalidLoop(JitException): - """Raised when the optimize*.py detect that the loop that - we are trying to build cannot possibly make sense as a - long-running loop (e.g. it cannot run 2 complete iterations).""" - -class RetraceLoop(JitException): - """ Raised when inlining a short preamble resulted in an - InvalidLoop. This means the optimized loop is too specialized - to be useful here, so we trace it again and produced a second - copy specialized in some different way. - """ - # ____________________________________________________________ # Misc. utilities diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py b/pypy/jit/metainterp/optimizeopt/virtualize.py --- a/pypy/jit/metainterp/optimizeopt/virtualize.py +++ b/pypy/jit/metainterp/optimizeopt/virtualize.py @@ -1,7 +1,7 @@ from pypy.jit.metainterp.history import Const, ConstInt, BoxInt from pypy.jit.metainterp.resoperation import rop, ResOperation -from pypy.jit.metainterp.optimizeutil import _findall, sort_descrs -from pypy.jit.metainterp.optimizeutil import descrlist_dict +from pypy.jit.metainterp.optimizeopt.util import _findall, sort_descrs +from pypy.jit.metainterp.optimizeopt.util import descrlist_dict from pypy.rlib.objectmodel import we_are_translated from pypy.jit.metainterp.optimizeopt import optimizer from pypy.jit.metainterp.executor import execute diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py --- a/pypy/jit/metainterp/pyjitpl.py +++ b/pypy/jit/metainterp/pyjitpl.py @@ -21,7 +21,8 @@ from pypy.rlib.objectmodel import specialize from pypy.jit.codewriter.jitcode import JitCode, SwitchDictDescr, MissingLiveness from pypy.jit.codewriter import heaptracker, longlong -from pypy.jit.metainterp.optimizeutil import RetraceLoop, args_dict_box, args_dict +from pypy.jit.metainterp.optimizeopt.util import args_dict_box, args_dict +from pypy.jit.metainterp.optimize import RetraceLoop # ____________________________________________________________ diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py --- a/pypy/jit/metainterp/resume.py +++ b/pypy/jit/metainterp/resume.py @@ -10,7 +10,7 @@ from pypy.rlib.objectmodel import we_are_translated, specialize from pypy.rlib.debug import have_debug_prints, ll_assert from pypy.rlib.debug import debug_start, debug_stop, debug_print -from pypy.jit.metainterp.optimizeutil import InvalidLoop +from pypy.jit.metainterp.optimize import InvalidLoop # Logic to encode the chain of frames and the state of the boxes at a # guard operation, and to decode it again. This is a bit advanced, diff --git a/pypy/jit/metainterp/test/test_compile.py b/pypy/jit/metainterp/test/test_compile.py --- a/pypy/jit/metainterp/test/test_compile.py +++ b/pypy/jit/metainterp/test/test_compile.py @@ -5,7 +5,7 @@ from pypy.jit.metainterp.compile import ResumeGuardCountersInt from pypy.jit.metainterp.compile import compile_tmp_callback from pypy.jit.metainterp import jitprof, typesystem, compile -from pypy.jit.metainterp.test.test_optimizeutil import LLtypeMixin +from pypy.jit.metainterp.optimizeopt.test.test_util import LLtypeMixin from pypy.jit.tool.oparser import parse from pypy.jit.metainterp.optimizeopt import ALL_OPTS_DICT diff --git a/pypy/jit/metainterp/test/test_logger.py b/pypy/jit/metainterp/test/test_logger.py --- a/pypy/jit/metainterp/test/test_logger.py +++ b/pypy/jit/metainterp/test/test_logger.py @@ -4,7 +4,7 @@ from pypy.jit.metainterp import logger from pypy.jit.metainterp.typesystem import llhelper from StringIO import StringIO -from pypy.jit.metainterp.test.test_optimizeopt import equaloplists +from pypy.jit.metainterp.optimizeopt.test.test_optimizeopt import equaloplists from pypy.jit.metainterp.history import AbstractDescr, LoopToken, BasicFailDescr from pypy.jit.backend.model import AbstractCPU diff --git a/pypy/jit/metainterp/test/test_pyjitpl.py b/pypy/jit/metainterp/test/test_pyjitpl.py --- a/pypy/jit/metainterp/test/test_pyjitpl.py +++ b/pypy/jit/metainterp/test/test_pyjitpl.py @@ -6,7 +6,7 @@ from pypy.jit.metainterp.history import BoxInt, ConstInt from pypy.jit.metainterp.history import History from pypy.jit.metainterp.resoperation import ResOperation, rop -from pypy.jit.metainterp.test.test_optimizeopt import equaloplists +from pypy.jit.metainterp.optimizeopt.test.test_optimizeopt import equaloplists from pypy.jit.codewriter.jitcode import JitCode diff --git a/pypy/jit/metainterp/test/test_resume.py b/pypy/jit/metainterp/test/test_resume.py --- a/pypy/jit/metainterp/test/test_resume.py +++ b/pypy/jit/metainterp/test/test_resume.py @@ -6,7 +6,7 @@ from pypy.jit.metainterp.resume import * from pypy.jit.metainterp.history import BoxInt, BoxPtr, ConstInt from pypy.jit.metainterp.history import ConstPtr, ConstFloat -from pypy.jit.metainterp.test.test_optimizeutil import LLtypeMixin +from pypy.jit.metainterp.optimizeopt.test.test_util import LLtypeMixin from pypy.jit.metainterp import executor from pypy.jit.codewriter import heaptracker, longlong diff --git a/pypy/jit/metainterp/test/test_virtualizable.py b/pypy/jit/metainterp/test/test_virtualizable.py --- a/pypy/jit/metainterp/test/test_virtualizable.py +++ b/pypy/jit/metainterp/test/test_virtualizable.py @@ -11,7 +11,7 @@ from pypy.rpython.rclass import FieldListAccessor from pypy.jit.metainterp.warmspot import get_stats, get_translator from pypy.jit.metainterp import history -from pypy.jit.metainterp.test.test_optimizeutil import LLtypeMixin +from pypy.jit.metainterp.optimizeopt.test.test_util import LLtypeMixin def promote_virtualizable(*args): pass diff --git a/pypy/translator/c/gcc/test/msvc/track_and_esp.s b/pypy/translator/c/gcc/test/msvc/track_and_esp.s --- a/pypy/translator/c/gcc/test/msvc/track_and_esp.s +++ b/pypy/translator/c/gcc/test/msvc/track_and_esp.s @@ -153,6 +153,7 @@ push OFFSET _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC $block12$88259: call _pypy_g_SemiSpaceGC_obtain_free_space + ;; expected {4(%ebp) | 16(%esp), 12(%esp), 8(%esp), (%ebp) | } ; 58362: l_v21669 = (&pypy_g_ExcData)->ed_exc_type; ; 58363: l_v21670 = (l_v21669 == NULL); @@ -225,6 +226,7 @@ push 1 $block14$88247: call _pypy_g__ll_malloc_varsize_no_length__Signed_Signed_Sign + ;; expected {4(%ebp) | 20(%esp), 16(%esp), 12(%esp), (%ebp) | } mov esi, eax ; 58377: OP_TRACK_ALLOC_START(l_v21672, /* nothing */); @@ -232,6 +234,7 @@ push OFFSET ??_C@_0BN@BIPHFGBC@pypy_g_ll_math_ll_math_frexp?$AA@ push esi call _pypy_debug_alloc_start + ;; expected {4(%ebp) | 28(%esp), 24(%esp), 20(%esp), (%ebp) | } add esp, 20 ; 00000014H ; 58378: l_exp_p_0 = (long *)l_v21672; @@ -283,6 +286,7 @@ sub esp, 8 fstp QWORD PTR [esp] call _pypy_g_frexp__Float_arrayPtr_star_2 + ;; expected {4(%ebp) | 20(%esp), 16(%esp), 12(%esp), (%ebp) | } ; 58387: l_v21675 = (&pypy_g_ExcData)->ed_exc_type; ; 58388: l_v21676 = (l_v21675 == NULL); @@ -331,11 +335,13 @@ mov DWORD PTR _pypy_g_ExcData+4, eax mov DWORD PTR _pypy_g_ExcData, eax call _pypy_debug_alloc_stop + ;; expected {4(%ebp) | 12(%esp), 8(%esp), 4(%esp), (%ebp) | } ; 58413: OP_RAW_FREE(l_v21688, /* nothing */); push esi call _PyObject_Free + ;; expected {4(%ebp) | 16(%esp), 12(%esp), 8(%esp), (%ebp) | } ; 58414: l_v21691 = (struct pypy_object0 *)l_v21687; ; 58415: pypy_g_RPyReRaiseException(l_v21683, l_v21691); @@ -376,11 +382,13 @@ push esi call _pypy_debug_alloc_stop + ;; expected {4(%ebp) | 12(%esp), 8(%esp), 4(%esp), (%ebp) | } ; 58399: OP_RAW_FREE(l_v21679, /* nothing */); push esi call _PyObject_Free + ;; expected {4(%ebp) | 16(%esp), 12(%esp), 8(%esp), (%ebp) | } ; 58400: l_v21637 = l_v21678; ; 58401: l_v21638 = l_mantissa_0; diff --git a/pypy/translator/c/gcc/trackgcroot.py b/pypy/translator/c/gcc/trackgcroot.py --- a/pypy/translator/c/gcc/trackgcroot.py +++ b/pypy/translator/c/gcc/trackgcroot.py @@ -527,8 +527,9 @@ target = match.group("target") if target == self.ESP: # only for andl $-16, %esp used to align the stack in main(). - # main() should not be seen at all. - raise AssertionError("instruction unexpected outside of main()") + # main() should not be seen at all. But on e.g. MSVC we see + # the instruction somewhere else too... + return InsnCannotFollowEsp() else: return self.binary_insn(line) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit