[pypy-svn] r69010 - in pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc: . test/msvc
afa at codespeak.net
afa at codespeak.net
Thu Nov 5 23:13:50 CET 2009
Author: afa
Date: Thu Nov 5 23:13:47 2009
New Revision: 69010
Modified:
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/instruction.py (contents, props changed)
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track0.s (contents, props changed)
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track1.s (contents, props changed)
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track2.s (contents, props changed)
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track8.s (contents, props changed)
pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track_switch0.s (contents, props changed)
Log:
fixeol
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/instruction.py
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/instruction.py (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/instruction.py Thu Nov 5 23:13:47 2009
@@ -1,223 +1,223 @@
-LOC_NOWHERE = 0
-LOC_REG = 1
-LOC_EBP_BASED = 2
-LOC_ESP_BASED = 3
-LOC_MASK = 0x03
-
-def frameloc(base, offset):
- assert base in (LOC_EBP_BASED, LOC_ESP_BASED)
- assert offset % 4 == 0
- return base | offset
-
-
-class SomeNewValue(object):
- pass
-somenewvalue = SomeNewValue()
-
-class LocalVar(object):
- # A local variable location at position 'ofs_from_frame_end',
- # which is counted from the end of the stack frame (so it is always
- # negative, unless it refers to arguments of the current function).
- def __init__(self, ofs_from_frame_end, hint=None):
- self.ofs_from_frame_end = ofs_from_frame_end
- self.hint = hint
-
- def __repr__(self):
- return '<%+d;%s>' % (self.ofs_from_frame_end, self.hint or 'e*p')
-
- def __hash__(self):
- return hash(self.ofs_from_frame_end)
-
- def __cmp__(self, other):
- if isinstance(other, LocalVar):
- return cmp(self.ofs_from_frame_end, other.ofs_from_frame_end)
- else:
- return 1
-
- def getlocation(self, framesize, uses_frame_pointer):
- if (self.hint == 'esp' or not uses_frame_pointer
- or self.ofs_from_frame_end % 2 != 0):
- # try to use esp-relative addressing
- ofs_from_esp = framesize + self.ofs_from_frame_end
- if ofs_from_esp % 2 == 0:
- return frameloc(LOC_ESP_BASED, ofs_from_esp)
- # we can get an odd value if the framesize is marked as bogus
- # by visit_andl()
- assert uses_frame_pointer
- ofs_from_ebp = self.ofs_from_frame_end + 4
- return frameloc(LOC_EBP_BASED, ofs_from_ebp)
-
-
-class Insn(object):
- _args_ = []
- _locals_ = []
-
- def __repr__(self):
- return '%s(%s)' % (self.__class__.__name__,
- ', '.join([str(getattr(self, name))
- for name in self._args_]))
- def requestgcroots(self, tracker):
- return {}
-
- def source_of(self, localvar, tag):
- return localvar
-
- def all_sources_of(self, localvar):
- return [localvar]
-
-class Label(Insn):
- _args_ = ['label', 'lineno']
- def __init__(self, label, lineno):
- self.label = label
- self.lineno = lineno
- self.previous_insns = [] # all insns that jump (or fallthrough) here
-
-class InsnFunctionStart(Insn):
- framesize = 0
- previous_insns = ()
- def __init__(self, registers):
- self.arguments = {}
- for reg in registers:
- self.arguments[reg] = somenewvalue
-
- def source_of(self, localvar, tag):
- if localvar not in self.arguments:
- if localvar in ('%eax', '%edx', '%ecx'):
- # xxx this might show a bug in trackgcroot.py failing to
- # figure out which instruction stored a value in these
- # registers. However, this case also occurs when the
- # the function's calling convention was optimized by gcc:
- # the 3 registers above are then used to pass arguments
- pass
- else:
- assert (isinstance(localvar, LocalVar) and
- localvar.ofs_from_frame_end > 0), (
- "must come from an argument to the function, got %r" %
- (localvar,))
- self.arguments[localvar] = somenewvalue
- return self.arguments[localvar]
-
- def all_sources_of(self, localvar):
- return []
-
-class InsnSetLocal(Insn):
- _args_ = ['target', 'sources']
- _locals_ = ['target', 'sources']
-
- def __init__(self, target, sources=()):
- self.target = target
- self.sources = sources
-
- def source_of(self, localvar, tag):
- if localvar == self.target:
- return somenewvalue
- return localvar
-
- def all_sources_of(self, localvar):
- if localvar == self.target:
- return self.sources
- return [localvar]
-
-class InsnCopyLocal(Insn):
- _args_ = ['source', 'target']
- _locals_ = ['source', 'target']
-
- def __init__(self, source, target):
- self.source = source
- self.target = target
-
- def source_of(self, localvar, tag):
- if localvar == self.target:
- return self.source
- return localvar
-
- def all_sources_of(self, localvar):
- if localvar == self.target:
- return [self.source]
- return [localvar]
-
-class InsnStackAdjust(Insn):
- _args_ = ['delta']
- def __init__(self, delta):
- assert delta % 2 == 0 # should be "% 4", but there is the special
- self.delta = delta # case of 'pushw' to handle
-
-class InsnCannotFollowEsp(InsnStackAdjust):
- def __init__(self):
- self.delta = -7 # use an odd value as marker
-
-class InsnStop(Insn):
- pass
-
-class InsnRet(InsnStop):
- framesize = 0
- def __init__(self, registers):
- self.registers = registers
-
- def requestgcroots(self, tracker):
- # no need to track the value of these registers in the caller
- # function if we are the main(), or if we are flagged as a
- # "bottom" function (a callback from C code)
- if tracker.is_stack_bottom:
- return {}
- else:
- return dict(zip(self.registers, self.registers))
-
-class InsnCall(Insn):
- _args_ = ['lineno', 'gcroots']
- def __init__(self, lineno):
- # 'gcroots' is a dict built by side-effect during the call to
- # FunctionGcRootTracker.trackgcroots(). Its meaning is as
- # follows: the keys are the locations that contain gc roots
- # (register names or LocalVar instances). The value
- # corresponding to a key is the "tag", which is None for a
- # normal gc root, or else the name of a callee-saved register.
- # In the latter case it means that this is only a gc root if the
- # corresponding register in the caller was really containing a
- # gc pointer. A typical example:
- #
- # InsnCall({LocalVar(-8)': None,
- # '%esi': '%esi',
- # LocalVar(-12)': '%ebx'})
- #
- # means that the value at -8 from the frame end is a gc root
- # across this call; that %esi is a gc root if it was in the
- # caller (typically because %esi is not modified at all in the
- # current function); and that the value at -12 from the frame
- # end is a gc root if %ebx was a gc root in the caller
- # (typically because the current function saves and restores
- # %ebx from there in the prologue and epilogue).
- self.gcroots = {}
- self.lineno = lineno
-
- def source_of(self, localvar, tag):
- tag1 = self.gcroots.setdefault(localvar, tag)
- assert tag1 == tag, (
- "conflicting entries for InsnCall.gcroots[%s]:\n%r and %r" % (
- localvar, tag1, tag))
- return localvar
-
- def all_sources_of(self, localvar):
- return [localvar]
-
-class InsnGCROOT(Insn):
- _args_ = ['loc']
- _locals_ = ['loc']
- def __init__(self, loc):
- self.loc = loc
- def requestgcroots(self, tracker):
- return {self.loc: None}
-
-class InsnPrologue(Insn):
- def __setattr__(self, attr, value):
- if attr == 'framesize':
- assert value == 4, ("unrecognized function prologue - "
- "only supports push %ebp; movl %esp, %ebp")
- Insn.__setattr__(self, attr, value)
-
-class InsnEpilogue(Insn):
- def __init__(self, framesize=None):
- if framesize is not None:
- self.framesize = framesize
-
-
+LOC_NOWHERE = 0
+LOC_REG = 1
+LOC_EBP_BASED = 2
+LOC_ESP_BASED = 3
+LOC_MASK = 0x03
+
+def frameloc(base, offset):
+ assert base in (LOC_EBP_BASED, LOC_ESP_BASED)
+ assert offset % 4 == 0
+ return base | offset
+
+
+class SomeNewValue(object):
+ pass
+somenewvalue = SomeNewValue()
+
+class LocalVar(object):
+ # A local variable location at position 'ofs_from_frame_end',
+ # which is counted from the end of the stack frame (so it is always
+ # negative, unless it refers to arguments of the current function).
+ def __init__(self, ofs_from_frame_end, hint=None):
+ self.ofs_from_frame_end = ofs_from_frame_end
+ self.hint = hint
+
+ def __repr__(self):
+ return '<%+d;%s>' % (self.ofs_from_frame_end, self.hint or 'e*p')
+
+ def __hash__(self):
+ return hash(self.ofs_from_frame_end)
+
+ def __cmp__(self, other):
+ if isinstance(other, LocalVar):
+ return cmp(self.ofs_from_frame_end, other.ofs_from_frame_end)
+ else:
+ return 1
+
+ def getlocation(self, framesize, uses_frame_pointer):
+ if (self.hint == 'esp' or not uses_frame_pointer
+ or self.ofs_from_frame_end % 2 != 0):
+ # try to use esp-relative addressing
+ ofs_from_esp = framesize + self.ofs_from_frame_end
+ if ofs_from_esp % 2 == 0:
+ return frameloc(LOC_ESP_BASED, ofs_from_esp)
+ # we can get an odd value if the framesize is marked as bogus
+ # by visit_andl()
+ assert uses_frame_pointer
+ ofs_from_ebp = self.ofs_from_frame_end + 4
+ return frameloc(LOC_EBP_BASED, ofs_from_ebp)
+
+
+class Insn(object):
+ _args_ = []
+ _locals_ = []
+
+ def __repr__(self):
+ return '%s(%s)' % (self.__class__.__name__,
+ ', '.join([str(getattr(self, name))
+ for name in self._args_]))
+ def requestgcroots(self, tracker):
+ return {}
+
+ def source_of(self, localvar, tag):
+ return localvar
+
+ def all_sources_of(self, localvar):
+ return [localvar]
+
+class Label(Insn):
+ _args_ = ['label', 'lineno']
+ def __init__(self, label, lineno):
+ self.label = label
+ self.lineno = lineno
+ self.previous_insns = [] # all insns that jump (or fallthrough) here
+
+class InsnFunctionStart(Insn):
+ framesize = 0
+ previous_insns = ()
+ def __init__(self, registers):
+ self.arguments = {}
+ for reg in registers:
+ self.arguments[reg] = somenewvalue
+
+ def source_of(self, localvar, tag):
+ if localvar not in self.arguments:
+ if localvar in ('%eax', '%edx', '%ecx'):
+ # xxx this might show a bug in trackgcroot.py failing to
+ # figure out which instruction stored a value in these
+ # registers. However, this case also occurs when the
+ # the function's calling convention was optimized by gcc:
+ # the 3 registers above are then used to pass arguments
+ pass
+ else:
+ assert (isinstance(localvar, LocalVar) and
+ localvar.ofs_from_frame_end > 0), (
+ "must come from an argument to the function, got %r" %
+ (localvar,))
+ self.arguments[localvar] = somenewvalue
+ return self.arguments[localvar]
+
+ def all_sources_of(self, localvar):
+ return []
+
+class InsnSetLocal(Insn):
+ _args_ = ['target', 'sources']
+ _locals_ = ['target', 'sources']
+
+ def __init__(self, target, sources=()):
+ self.target = target
+ self.sources = sources
+
+ def source_of(self, localvar, tag):
+ if localvar == self.target:
+ return somenewvalue
+ return localvar
+
+ def all_sources_of(self, localvar):
+ if localvar == self.target:
+ return self.sources
+ return [localvar]
+
+class InsnCopyLocal(Insn):
+ _args_ = ['source', 'target']
+ _locals_ = ['source', 'target']
+
+ def __init__(self, source, target):
+ self.source = source
+ self.target = target
+
+ def source_of(self, localvar, tag):
+ if localvar == self.target:
+ return self.source
+ return localvar
+
+ def all_sources_of(self, localvar):
+ if localvar == self.target:
+ return [self.source]
+ return [localvar]
+
+class InsnStackAdjust(Insn):
+ _args_ = ['delta']
+ def __init__(self, delta):
+ assert delta % 2 == 0 # should be "% 4", but there is the special
+ self.delta = delta # case of 'pushw' to handle
+
+class InsnCannotFollowEsp(InsnStackAdjust):
+ def __init__(self):
+ self.delta = -7 # use an odd value as marker
+
+class InsnStop(Insn):
+ pass
+
+class InsnRet(InsnStop):
+ framesize = 0
+ def __init__(self, registers):
+ self.registers = registers
+
+ def requestgcroots(self, tracker):
+ # no need to track the value of these registers in the caller
+ # function if we are the main(), or if we are flagged as a
+ # "bottom" function (a callback from C code)
+ if tracker.is_stack_bottom:
+ return {}
+ else:
+ return dict(zip(self.registers, self.registers))
+
+class InsnCall(Insn):
+ _args_ = ['lineno', 'gcroots']
+ def __init__(self, lineno):
+ # 'gcroots' is a dict built by side-effect during the call to
+ # FunctionGcRootTracker.trackgcroots(). Its meaning is as
+ # follows: the keys are the locations that contain gc roots
+ # (register names or LocalVar instances). The value
+ # corresponding to a key is the "tag", which is None for a
+ # normal gc root, or else the name of a callee-saved register.
+ # In the latter case it means that this is only a gc root if the
+ # corresponding register in the caller was really containing a
+ # gc pointer. A typical example:
+ #
+ # InsnCall({LocalVar(-8)': None,
+ # '%esi': '%esi',
+ # LocalVar(-12)': '%ebx'})
+ #
+ # means that the value at -8 from the frame end is a gc root
+ # across this call; that %esi is a gc root if it was in the
+ # caller (typically because %esi is not modified at all in the
+ # current function); and that the value at -12 from the frame
+ # end is a gc root if %ebx was a gc root in the caller
+ # (typically because the current function saves and restores
+ # %ebx from there in the prologue and epilogue).
+ self.gcroots = {}
+ self.lineno = lineno
+
+ def source_of(self, localvar, tag):
+ tag1 = self.gcroots.setdefault(localvar, tag)
+ assert tag1 == tag, (
+ "conflicting entries for InsnCall.gcroots[%s]:\n%r and %r" % (
+ localvar, tag1, tag))
+ return localvar
+
+ def all_sources_of(self, localvar):
+ return [localvar]
+
+class InsnGCROOT(Insn):
+ _args_ = ['loc']
+ _locals_ = ['loc']
+ def __init__(self, loc):
+ self.loc = loc
+ def requestgcroots(self, tracker):
+ return {self.loc: None}
+
+class InsnPrologue(Insn):
+ def __setattr__(self, attr, value):
+ if attr == 'framesize':
+ assert value == 4, ("unrecognized function prologue - "
+ "only supports push %ebp; movl %esp, %ebp")
+ Insn.__setattr__(self, attr, value)
+
+class InsnEpilogue(Insn):
+ def __init__(self, framesize=None):
+ if framesize is not None:
+ self.framesize = framesize
+
+
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track0.s
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track0.s (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track0.s Thu Nov 5 23:13:47 2009
@@ -1,282 +1,282 @@
-; Function compile flags: /Ogtpy
-; COMDAT _pypy_g_ll_join_strs__Signed_arrayPtr
-_TEXT SEGMENT
-_l_result_2$ = -8 ; size = 4
-_l_v405$ = -4 ; size = 4
-_l_num_items_0$ = 8 ; size = 4
-_l_items_2$ = 12 ; size = 4
-_pypy_g_ll_join_strs__Signed_arrayPtr PROC ; COMDAT
-
-; 1457 : struct pypy_rpy_string0 *pypy_g_ll_join_strs__Signed_arrayPtr(long l_num_items_0, struct pypy_array0 *l_items_2) {
-
- sub esp, 8
- push ebx
- push ebp
- push esi
-
-; 1458 : long l_i_22; long l_i_23; long l_res_index_0;
-; 1459 : struct pypy_rpy_string0 *l_result_2; bool_t l_v403; bool_t l_v404;
-; 1460 : bool_t l_v409; bool_t l_v410; bool_t l_v411; long l_v402;
-; 1461 : long l_v414; long l_v417; long l_v418; long l_v421; long l_v422;
-; 1462 : long l_v423; struct pypy_object_vtable0 *l_v408;
-; 1463 : struct pypy_rpy_string0 *l_v412; struct pypy_rpy_string0 *l_v413;
-; 1464 : struct pypy_rpy_string0 *l_v415; struct pypy_rpy_string0 *l_v419;
-; 1465 : struct pypy_rpy_string0 *l_v420; struct pypy_rpy_string0 *l_v424;
-; 1466 : void* l_v405; void* l_v406;
-; 1467 :
-; 1468 : block0:
-; 1469 : l_i_23 = 0L;
-
- xor esi, esi
- push edi
-
-; 1470 : l_v402 = 0L;
-
- xor edi, edi
-
-; 1471 : goto block1;
-; 1472 :
-; 1473 : block1:
-; 1474 : OP_INT_LT(l_i_23, l_num_items_0, l_v403);
-
- cmp DWORD PTR _l_num_items_0$[esp+20], esi
-$block0$40039:
-$block1$40040:
-
-; 1475 : l_v404 = l_v403;
-; 1476 : while (l_v404) {
-
- jle SHORT $block2$40046
- mov ebp, DWORD PTR _l_items_2$[esp+20]
- add ebp, 8
-$LL5 at pypy_g_ll_@139:
-$block6$40044:
-
-; 1525 : goto block3_back;
-; 1526 :
-; 1527 : block6:
-; 1528 : l_v419 = RPyItem(l_items_2, l_i_23);
-
- test esi, esi
- jl SHORT $LN14 at pypy_g_ll_@139
- mov eax, DWORD PTR _l_items_2$[esp+20]
- cmp esi, DWORD PTR [eax+4]
- jl SHORT $LN15 at pypy_g_ll_@139
-$LN14 at pypy_g_ll_@139:
- call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
-$LN15 at pypy_g_ll_@139:
-
-; 1529 : l_v420 = l_v419;
-
- mov ebx, DWORD PTR [ebp]
-
-; 1530 : l_v421 = RPyField(l_v420, rs_chars).length;
-
- test ebx, ebx
- jne SHORT $LN16 at pypy_g_ll_@139
- call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
-$LN16 at pypy_g_ll_@139:
-
-; 1531 : OP_INT_ADD(l_v402, l_v421, l_v422);
-; 1532 : OP_INT_ADD(l_i_23, 1L, l_v423);
-; 1533 : l_i_23 = l_v423;
-
- inc esi
- add ebp, 4
-
-; 1534 : l_v402 = l_v422;
-
- add edi, DWORD PTR [ebx+8]
- cmp esi, DWORD PTR _l_num_items_0$[esp+20]
-$block1_back$40045:
- jl SHORT $LL5 at pypy_g_ll_@139
-$block2$40046:
-
-; 1477 : goto block6;
-; 1478 : block1_back: ;
-; 1479 : OP_INT_LT(l_i_23, l_num_items_0, l_v403);
-; 1480 : l_v404 = l_v403;
-; 1481 : }
-; 1482 : goto block2;
-; 1483 :
-; 1484 : block2:
-; 1485 : l_result_2 = pypy_g_mallocstr__Signed(l_v402);
-
- push edi
- call _pypy_g_mallocstr__Signed
- ;; expected {28(%esp) | 16(%esp), 8(%esp), 4(%esp), 12(%esp) | 36(%esp)}
-
-; 1486 : l_v405 = (void*)l_items_2;
-
- mov ecx, DWORD PTR _l_items_2$[esp+24]
- add esp, 4
- mov DWORD PTR _l_result_2$[esp+24], eax
- mov DWORD PTR _l_v405$[esp+24], ecx
-
-; 1487 : l_v406 = pypy_asm_gcroot(l_v405);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v405$[esp+24]
-
-; 1488 : l_items_2 = l_v406; /* for moving GCs */
-; 1489 : l_v408 = RPyField((&pypy_g_ExcData), ed_exc_type);
-; 1490 : l_v409 = (l_v408 == NULL);
-
- cmp DWORD PTR _pypy_g_ExcData, 0
-
-; 1491 : if (!l_v409) {
-
- je SHORT $LN3 at pypy_g_ll_@139
- pop edi
- pop esi
- pop ebp
-
-; 1492 : l_v424 = ((struct pypy_rpy_string0 *) NULL);
-
- xor eax, eax
- pop ebx
-
-; 1535 : goto block1_back;
-; 1536 : }
-
- add esp, 8
- ret 0
-$LN3 at pypy_g_ll_@139:
-
-; 1493 : goto block4;
-; 1494 : }
-; 1495 : l_i_22 = 0L;
-
- xor esi, esi
-
-; 1496 : l_res_index_0 = 0L;
-
- xor ebp, ebp
-
-; 1497 : goto block3;
-; 1498 :
-; 1499 : block3:
-; 1500 : OP_INT_LT(l_i_22, l_num_items_0, l_v410);
-
- cmp DWORD PTR _l_num_items_0$[esp+20], ebp
-$block3$40053:
-
-; 1501 : l_v411 = l_v410;
-; 1502 : while (l_v411) {
-
- jle SHORT $LN1 at pypy_g_ll_@139
- mov ebx, ecx
- add ebx, 8
-$LL2 at pypy_g_ll_@139:
-$block5$40057:
-
-; 1514 :
-; 1515 : block5:
-; 1516 : l_v412 = RPyItem(l_items_2, l_i_22);
-
- test esi, esi
- jl SHORT $LN9 at pypy_g_ll_@139
- mov edx, DWORD PTR _l_items_2$[esp+20]
- cmp esi, DWORD PTR [edx+4]
- jl SHORT $LN10 at pypy_g_ll_@139
-$LN9 at pypy_g_ll_@139:
- call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
-$LN10 at pypy_g_ll_@139:
-
-; 1517 : l_v413 = l_v412;
-
- mov edi, DWORD PTR [ebx]
-
-; 1518 : l_v414 = RPyField(l_v413, rs_chars).length;
-
- test edi, edi
- jne SHORT $LN11 at pypy_g_ll_@139
- call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
-$LN11 at pypy_g_ll_@139:
- mov edi, DWORD PTR [edi+8]
-
-; 1519 : l_v415 = RPyItem(l_items_2, l_i_22);
-
- test esi, esi
- jl SHORT $LN12 at pypy_g_ll_@139
- mov eax, DWORD PTR _l_items_2$[esp+20]
- cmp esi, DWORD PTR [eax+4]
- jl SHORT $LN13 at pypy_g_ll_@139
-$LN12 at pypy_g_ll_@139:
- call _RPyAbort
- ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
-$LN13 at pypy_g_ll_@139:
-
-; 1520 : pypy_g_copy_string_contents__rpy_stringPtr_rpy_stringPt(l_v415, l_result_2, 0L, l_res_index_0, l_v414);
-
- mov ecx, DWORD PTR [ebx]
- mov edx, DWORD PTR _l_result_2$[esp+24]
- push edi
- add ecx, 12 ; 0000000cH
- push ecx
- lea eax, DWORD PTR [edx+ebp+12]
- push eax
-$block0$80664:
-$block0$80634:
-$block0$80639:
-$block1$80640:
-$block0$80644:
-$block1$80645:
-$block1$80635:
-$block0$80659:
-$block0$80667:
-$block1$80668:
-$block0$80673:
-$block1$80674:
-$block1$80661:
-$block0$80678:
-$block1$80679:
- call _memcpy
- ;; expected {36(%esp) | 24(%esp), 16(%esp), 12(%esp), 20(%esp) | }
- add esp, 12 ; 0000000cH
-
-; 1521 : OP_INT_ADD(l_res_index_0, l_v414, l_v417);
-; 1522 : OP_INT_ADD(l_i_22, 1L, l_v418);
-; 1523 : l_i_22 = l_v418;
-
- inc esi
- add ebx, 4
-
-; 1524 : l_res_index_0 = l_v417;
-
- add ebp, edi
- cmp esi, DWORD PTR _l_num_items_0$[esp+20]
-$block1$80671:
-$block3_back$40058:
- jl SHORT $LL2 at pypy_g_ll_@139
-$LN1 at pypy_g_ll_@139:
-
-; 1503 : goto block5;
-; 1504 : block3_back: ;
-; 1505 : OP_INT_LT(l_i_22, l_num_items_0, l_v410);
-; 1506 : l_v411 = l_v410;
-; 1507 : }
-; 1508 : l_v424 = l_result_2;
-; 1509 : goto block4;
-; 1510 :
-; 1511 : block4:
-; 1512 : RPY_DEBUG_RETURN();
-; 1513 : return l_v424;
-
- mov eax, DWORD PTR _l_result_2$[esp+24]
- pop edi
- pop esi
- pop ebp
-$block4$40052:
- pop ebx
-
-; 1535 : goto block1_back;
-; 1536 : }
-
- add esp, 8
- ret 0
-_pypy_g_ll_join_strs__Signed_arrayPtr ENDP
+; Function compile flags: /Ogtpy
+; COMDAT _pypy_g_ll_join_strs__Signed_arrayPtr
+_TEXT SEGMENT
+_l_result_2$ = -8 ; size = 4
+_l_v405$ = -4 ; size = 4
+_l_num_items_0$ = 8 ; size = 4
+_l_items_2$ = 12 ; size = 4
+_pypy_g_ll_join_strs__Signed_arrayPtr PROC ; COMDAT
+
+; 1457 : struct pypy_rpy_string0 *pypy_g_ll_join_strs__Signed_arrayPtr(long l_num_items_0, struct pypy_array0 *l_items_2) {
+
+ sub esp, 8
+ push ebx
+ push ebp
+ push esi
+
+; 1458 : long l_i_22; long l_i_23; long l_res_index_0;
+; 1459 : struct pypy_rpy_string0 *l_result_2; bool_t l_v403; bool_t l_v404;
+; 1460 : bool_t l_v409; bool_t l_v410; bool_t l_v411; long l_v402;
+; 1461 : long l_v414; long l_v417; long l_v418; long l_v421; long l_v422;
+; 1462 : long l_v423; struct pypy_object_vtable0 *l_v408;
+; 1463 : struct pypy_rpy_string0 *l_v412; struct pypy_rpy_string0 *l_v413;
+; 1464 : struct pypy_rpy_string0 *l_v415; struct pypy_rpy_string0 *l_v419;
+; 1465 : struct pypy_rpy_string0 *l_v420; struct pypy_rpy_string0 *l_v424;
+; 1466 : void* l_v405; void* l_v406;
+; 1467 :
+; 1468 : block0:
+; 1469 : l_i_23 = 0L;
+
+ xor esi, esi
+ push edi
+
+; 1470 : l_v402 = 0L;
+
+ xor edi, edi
+
+; 1471 : goto block1;
+; 1472 :
+; 1473 : block1:
+; 1474 : OP_INT_LT(l_i_23, l_num_items_0, l_v403);
+
+ cmp DWORD PTR _l_num_items_0$[esp+20], esi
+$block0$40039:
+$block1$40040:
+
+; 1475 : l_v404 = l_v403;
+; 1476 : while (l_v404) {
+
+ jle SHORT $block2$40046
+ mov ebp, DWORD PTR _l_items_2$[esp+20]
+ add ebp, 8
+$LL5 at pypy_g_ll_@139:
+$block6$40044:
+
+; 1525 : goto block3_back;
+; 1526 :
+; 1527 : block6:
+; 1528 : l_v419 = RPyItem(l_items_2, l_i_23);
+
+ test esi, esi
+ jl SHORT $LN14 at pypy_g_ll_@139
+ mov eax, DWORD PTR _l_items_2$[esp+20]
+ cmp esi, DWORD PTR [eax+4]
+ jl SHORT $LN15 at pypy_g_ll_@139
+$LN14 at pypy_g_ll_@139:
+ call _RPyAbort
+ ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
+$LN15 at pypy_g_ll_@139:
+
+; 1529 : l_v420 = l_v419;
+
+ mov ebx, DWORD PTR [ebp]
+
+; 1530 : l_v421 = RPyField(l_v420, rs_chars).length;
+
+ test ebx, ebx
+ jne SHORT $LN16 at pypy_g_ll_@139
+ call _RPyAbort
+ ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | 32(%esp)}
+$LN16 at pypy_g_ll_@139:
+
+; 1531 : OP_INT_ADD(l_v402, l_v421, l_v422);
+; 1532 : OP_INT_ADD(l_i_23, 1L, l_v423);
+; 1533 : l_i_23 = l_v423;
+
+ inc esi
+ add ebp, 4
+
+; 1534 : l_v402 = l_v422;
+
+ add edi, DWORD PTR [ebx+8]
+ cmp esi, DWORD PTR _l_num_items_0$[esp+20]
+$block1_back$40045:
+ jl SHORT $LL5 at pypy_g_ll_@139
+$block2$40046:
+
+; 1477 : goto block6;
+; 1478 : block1_back: ;
+; 1479 : OP_INT_LT(l_i_23, l_num_items_0, l_v403);
+; 1480 : l_v404 = l_v403;
+; 1481 : }
+; 1482 : goto block2;
+; 1483 :
+; 1484 : block2:
+; 1485 : l_result_2 = pypy_g_mallocstr__Signed(l_v402);
+
+ push edi
+ call _pypy_g_mallocstr__Signed
+ ;; expected {28(%esp) | 16(%esp), 8(%esp), 4(%esp), 12(%esp) | 36(%esp)}
+
+; 1486 : l_v405 = (void*)l_items_2;
+
+ mov ecx, DWORD PTR _l_items_2$[esp+24]
+ add esp, 4
+ mov DWORD PTR _l_result_2$[esp+24], eax
+ mov DWORD PTR _l_v405$[esp+24], ecx
+
+; 1487 : l_v406 = pypy_asm_gcroot(l_v405);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v405$[esp+24]
+
+; 1488 : l_items_2 = l_v406; /* for moving GCs */
+; 1489 : l_v408 = RPyField((&pypy_g_ExcData), ed_exc_type);
+; 1490 : l_v409 = (l_v408 == NULL);
+
+ cmp DWORD PTR _pypy_g_ExcData, 0
+
+; 1491 : if (!l_v409) {
+
+ je SHORT $LN3 at pypy_g_ll_@139
+ pop edi
+ pop esi
+ pop ebp
+
+; 1492 : l_v424 = ((struct pypy_rpy_string0 *) NULL);
+
+ xor eax, eax
+ pop ebx
+
+; 1535 : goto block1_back;
+; 1536 : }
+
+ add esp, 8
+ ret 0
+$LN3 at pypy_g_ll_@139:
+
+; 1493 : goto block4;
+; 1494 : }
+; 1495 : l_i_22 = 0L;
+
+ xor esi, esi
+
+; 1496 : l_res_index_0 = 0L;
+
+ xor ebp, ebp
+
+; 1497 : goto block3;
+; 1498 :
+; 1499 : block3:
+; 1500 : OP_INT_LT(l_i_22, l_num_items_0, l_v410);
+
+ cmp DWORD PTR _l_num_items_0$[esp+20], ebp
+$block3$40053:
+
+; 1501 : l_v411 = l_v410;
+; 1502 : while (l_v411) {
+
+ jle SHORT $LN1 at pypy_g_ll_@139
+ mov ebx, ecx
+ add ebx, 8
+$LL2 at pypy_g_ll_@139:
+$block5$40057:
+
+; 1514 :
+; 1515 : block5:
+; 1516 : l_v412 = RPyItem(l_items_2, l_i_22);
+
+ test esi, esi
+ jl SHORT $LN9 at pypy_g_ll_@139
+ mov edx, DWORD PTR _l_items_2$[esp+20]
+ cmp esi, DWORD PTR [edx+4]
+ jl SHORT $LN10 at pypy_g_ll_@139
+$LN9 at pypy_g_ll_@139:
+ call _RPyAbort
+ ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
+$LN10 at pypy_g_ll_@139:
+
+; 1517 : l_v413 = l_v412;
+
+ mov edi, DWORD PTR [ebx]
+
+; 1518 : l_v414 = RPyField(l_v413, rs_chars).length;
+
+ test edi, edi
+ jne SHORT $LN11 at pypy_g_ll_@139
+ call _RPyAbort
+ ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
+$LN11 at pypy_g_ll_@139:
+ mov edi, DWORD PTR [edi+8]
+
+; 1519 : l_v415 = RPyItem(l_items_2, l_i_22);
+
+ test esi, esi
+ jl SHORT $LN12 at pypy_g_ll_@139
+ mov eax, DWORD PTR _l_items_2$[esp+20]
+ cmp esi, DWORD PTR [eax+4]
+ jl SHORT $LN13 at pypy_g_ll_@139
+$LN12 at pypy_g_ll_@139:
+ call _RPyAbort
+ ;; expected {24(%esp) | 12(%esp), 4(%esp), (%esp), 8(%esp) | }
+$LN13 at pypy_g_ll_@139:
+
+; 1520 : pypy_g_copy_string_contents__rpy_stringPtr_rpy_stringPt(l_v415, l_result_2, 0L, l_res_index_0, l_v414);
+
+ mov ecx, DWORD PTR [ebx]
+ mov edx, DWORD PTR _l_result_2$[esp+24]
+ push edi
+ add ecx, 12 ; 0000000cH
+ push ecx
+ lea eax, DWORD PTR [edx+ebp+12]
+ push eax
+$block0$80664:
+$block0$80634:
+$block0$80639:
+$block1$80640:
+$block0$80644:
+$block1$80645:
+$block1$80635:
+$block0$80659:
+$block0$80667:
+$block1$80668:
+$block0$80673:
+$block1$80674:
+$block1$80661:
+$block0$80678:
+$block1$80679:
+ call _memcpy
+ ;; expected {36(%esp) | 24(%esp), 16(%esp), 12(%esp), 20(%esp) | }
+ add esp, 12 ; 0000000cH
+
+; 1521 : OP_INT_ADD(l_res_index_0, l_v414, l_v417);
+; 1522 : OP_INT_ADD(l_i_22, 1L, l_v418);
+; 1523 : l_i_22 = l_v418;
+
+ inc esi
+ add ebx, 4
+
+; 1524 : l_res_index_0 = l_v417;
+
+ add ebp, edi
+ cmp esi, DWORD PTR _l_num_items_0$[esp+20]
+$block1$80671:
+$block3_back$40058:
+ jl SHORT $LL2 at pypy_g_ll_@139
+$LN1 at pypy_g_ll_@139:
+
+; 1503 : goto block5;
+; 1504 : block3_back: ;
+; 1505 : OP_INT_LT(l_i_22, l_num_items_0, l_v410);
+; 1506 : l_v411 = l_v410;
+; 1507 : }
+; 1508 : l_v424 = l_result_2;
+; 1509 : goto block4;
+; 1510 :
+; 1511 : block4:
+; 1512 : RPY_DEBUG_RETURN();
+; 1513 : return l_v424;
+
+ mov eax, DWORD PTR _l_result_2$[esp+24]
+ pop edi
+ pop esi
+ pop ebp
+$block4$40052:
+ pop ebx
+
+; 1535 : goto block1_back;
+; 1536 : }
+
+ add esp, 8
+ ret 0
+_pypy_g_ll_join_strs__Signed_arrayPtr ENDP
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track1.s
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track1.s (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track1.s Thu Nov 5 23:13:47 2009
@@ -1,31 +1,31 @@
-; Function compile flags: /Odtp
-_TEXT SEGMENT
-_pypy_g_frameworkgc_setup PROC
-
-; 46 : void pypy_g_frameworkgc_setup(void) {
-
- push ebp
- mov ebp, esp
-$block0$37400:
-
-; 47 :
-; 48 : block0:
-; 49 : pypy_g_SemiSpaceGC_setup((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC));
-
- push OFFSET _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC
- call _pypy_g_SemiSpaceGC_setup
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- add esp, 4
-$block1$37401:
-
-; 50 : goto block1;
-; 51 :
-; 52 : block1:
-; 53 : RPY_DEBUG_RETURN();
-; 54 : return /* nothing */;
-; 55 : }
-
- pop ebp
- ret 0
-_pypy_g_frameworkgc_setup ENDP
-_TEXT ENDS
+; Function compile flags: /Odtp
+_TEXT SEGMENT
+_pypy_g_frameworkgc_setup PROC
+
+; 46 : void pypy_g_frameworkgc_setup(void) {
+
+ push ebp
+ mov ebp, esp
+$block0$37400:
+
+; 47 :
+; 48 : block0:
+; 49 : pypy_g_SemiSpaceGC_setup((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC));
+
+ push OFFSET _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC
+ call _pypy_g_SemiSpaceGC_setup
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ add esp, 4
+$block1$37401:
+
+; 50 : goto block1;
+; 51 :
+; 52 : block1:
+; 53 : RPY_DEBUG_RETURN();
+; 54 : return /* nothing */;
+; 55 : }
+
+ pop ebp
+ ret 0
+_pypy_g_frameworkgc_setup ENDP
+_TEXT ENDS
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track2.s
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track2.s (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track2.s Thu Nov 5 23:13:47 2009
@@ -1,747 +1,747 @@
-; Function compile flags: /Odtpy
-; COMDAT _pypy_g__inplace_divrem1
-_TEXT SEGMENT
-tv158 = -292 ; size = 4
-tv152 = -288 ; size = 4
-tv72 = -284 ; size = 4
-tv65 = -280 ; size = 4
-_l_v30733$ = -273 ; size = 1
-_l_v30737$ = -272 ; size = 8
-_l_v30740$ = -257 ; size = 1
-_l_v30744$ = -256 ; size = 4
-_l_v30753$ = -252 ; size = 4
-_l_v30748$ = -248 ; size = 8
-_l_v30709$ = -233 ; size = 1
-_l_v30710$ = -232 ; size = 1
-_l_v30714$ = -231 ; size = 1
-_l_v30718$ = -230 ; size = 1
-_l_v30729$ = -229 ; size = 1
-_l_v30725$ = -228 ; size = 4
-_l_v30705$ = -224 ; size = 8
-_l_evalue_70$ = -216 ; size = 4
-_l_index_219$ = -212 ; size = 4
-_l_v30738$ = -205 ; size = 1
-_l_v30730$ = -204 ; size = 4
-_l_v30734$ = -200 ; size = 4
-_l_length_82$ = -196 ; size = 4
-_l_v30745$ = -189 ; size = 1
-_l_v30752$ = -188 ; size = 4
-_l_v30749$ = -184 ; size = 8
-_l_l_100$ = -172 ; size = 4
-_l_l_101$ = -168 ; size = 4
-_l_length_83$ = -164 ; size = 4
-_l_v30704$ = -160 ; size = 4
-_l_v30722$ = -156 ; size = 4
-_l_v30715$ = -152 ; size = 8
-_l_v30726$ = -144 ; size = 8
-_l_v30711$ = -132 ; size = 4
-_l_x_97$ = -128 ; size = 4
-_l_v30739$ = -121 ; size = 1
-_l_v30731$ = -120 ; size = 8
-_l_v30735$ = -112 ; size = 8
-_l_v30742$ = -97 ; size = 1
-_l_v30751$ = -96 ; size = 4
-_l_v30707$ = -90 ; size = 1
-_l_v30723$ = -89 ; size = 1
-_l_v30712$ = -88 ; size = 4
-_l_v30716$ = -84 ; size = 4
-_l_v30703$ = -80 ; size = 8
-_l_v30727$ = -72 ; size = 8
-_l_v30732$ = -64 ; size = 8
-_l_v30736$ = -56 ; size = 8
-_l_index_218$ = -44 ; size = 4
-_l_v30750$ = -40 ; size = 4
-_l_v30754$ = -36 ; size = 4
-_l_v30717$ = -30 ; size = 1
-_l_v30720$ = -29 ; size = 1
-_l_v30713$ = -28 ; size = 4
-_l_v30702$ = -24 ; size = 8
-_l_v30706$ = -16 ; size = 8
-_l_v30728$ = -8 ; size = 8
-_l_self_3688$ = 8 ; size = 4
-_l_pin_1$ = 12 ; size = 4
-_l_n_38$ = 16 ; size = 8
-_l_size_53$ = 24 ; size = 4
-_pypy_g__inplace_divrem1 PROC ; COMDAT
-
-; 16550: long pypy_g__inplace_divrem1(struct pypy_pypy_rlib_rbigint_rbigint0 *l_self_3688, struct pypy_pypy_rlib_rbigint_rbigint0 *l_pin_1, long long l_n_38, long l_size_53) {
-
- push ebp
- mov ebp, esp
- sub esp, 292 ; 00000124H
-$block0$210880:
-
-; 16551: struct pypy_object0 *l_evalue_70; long l_index_218; long l_index_219;
-; 16552: struct pypy_array5 *l_l_100; struct pypy_array5 *l_l_101;
-; 16553: long l_length_82; long l_length_83; bool_t l_v30707; bool_t l_v30709;
-; 16554: bool_t l_v30710; bool_t l_v30714; bool_t l_v30717; bool_t l_v30718;
-; 16555: bool_t l_v30720; bool_t l_v30723; bool_t l_v30729; bool_t l_v30733;
-; 16556: bool_t l_v30738; bool_t l_v30739; bool_t l_v30740; bool_t l_v30742;
-; 16557: bool_t l_v30745; long l_v30704; long l_v30712; long l_v30713;
-; 16558: long l_v30716; long l_v30722; long l_v30725; long l_v30730;
-; 16559: long l_v30734; long l_v30744; long l_v30750; long l_v30751;
-; 16560: long l_v30752; long l_v30753; long l_v30754; long long l_v30702;
-; 16561: long long l_v30703; long long l_v30705; long long l_v30706;
-; 16562: long long l_v30715; long long l_v30726; long long l_v30727;
-; 16563: long long l_v30728; long long l_v30731; long long l_v30732;
-; 16564: long long l_v30735; long long l_v30736; long long l_v30737;
-; 16565: long long l_v30748; long long l_v30749; struct pypy_array5 *l_v30711;
-; 16566: long l_x_97;
-; 16567:
-; 16568: block0:
-; 16569: OP_LLONG_GT(l_n_38, 0LL, l_v30707);
-
- cmp DWORD PTR _l_n_38$[ebp+4], 0
- jl SHORT $LN11 at pypy_g__in
- jg SHORT $LN19 at pypy_g__in
- cmp DWORD PTR _l_n_38$[ebp], 0
- jbe SHORT $LN11 at pypy_g__in
-$LN19 at pypy_g__in:
- mov DWORD PTR tv65[ebp], 1
- jmp SHORT $LN12 at pypy_g__in
-$LN11 at pypy_g__in:
- mov DWORD PTR tv65[ebp], 0
-$LN12 at pypy_g__in:
- mov al, BYTE PTR tv65[ebp]
- mov BYTE PTR _l_v30707$[ebp], al
-
-; 16570: if (l_v30707) {
-
- movzx ecx, BYTE PTR _l_v30707$[ebp]
- test ecx, ecx
- je SHORT $LN8 at pypy_g__in
-
-; 16571: goto block3;
-
- jmp SHORT $block3$210882
-$LN8 at pypy_g__in:
-
-; 16572: }
-; 16573: l_evalue_70 = (&pypy_g_exceptions_AssertionError.ae_super.se_super.e_super);
-
- mov DWORD PTR _l_evalue_70$[ebp], OFFSET _pypy_g_exceptions_AssertionError
-$block1$210883:
-
-; 16574: goto block1;
-; 16575:
-; 16576: block1:
-; 16577: pypy_g_RPyRaiseException((&pypy_g_exceptions_AssertionError_vtable.ae_super.se_super.e_super), l_evalue_70);
-
- mov edx, DWORD PTR _l_evalue_70$[ebp]
- push edx
- push OFFSET _pypy_g_exceptions_AssertionError_vtable
- call _pypy_g_RPyRaiseException
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- add esp, 8
-
-; 16578: l_v30753 = -1L;
-
- mov DWORD PTR _l_v30753$[ebp], -1
-$block2$210884:
-
-; 16579: goto block2;
-; 16580:
-; 16581: block2:
-; 16582: RPY_DEBUG_RETURN();
-; 16583: return l_v30753;
-
- mov eax, DWORD PTR _l_v30753$[ebp]
- jmp $LN9 at pypy_g__in
-$block3$210882:
-
-; 16584:
-; 16585: block3:
-; 16586: OP_LLONG_LE(l_n_38, 2147483647LL, l_v30709);
-
- cmp DWORD PTR _l_n_38$[ebp+4], 0
- jg SHORT $LN13 at pypy_g__in
- jl SHORT $LN20 at pypy_g__in
- cmp DWORD PTR _l_n_38$[ebp], 2147483647 ; 7fffffffH
- ja SHORT $LN13 at pypy_g__in
-$LN20 at pypy_g__in:
- mov DWORD PTR tv72[ebp], 1
- jmp SHORT $LN14 at pypy_g__in
-$LN13 at pypy_g__in:
- mov DWORD PTR tv72[ebp], 0
-$LN14 at pypy_g__in:
- mov al, BYTE PTR tv72[ebp]
- mov BYTE PTR _l_v30709$[ebp], al
-
-; 16587: if (l_v30709) {
-
- movzx ecx, BYTE PTR _l_v30709$[ebp]
- test ecx, ecx
- je SHORT $LN7 at pypy_g__in
-
-; 16588: goto block4;
-
- jmp SHORT $block4$210886
-$LN7 at pypy_g__in:
-
-; 16589: }
-; 16590: l_evalue_70 = (&pypy_g_exceptions_AssertionError.ae_super.se_super.e_super);
-
- mov DWORD PTR _l_evalue_70$[ebp], OFFSET _pypy_g_exceptions_AssertionError
-
-; 16591: goto block1;
-
- jmp SHORT $block1$210883
-$block4$210886:
-
-; 16592:
-; 16593: block4:
-; 16594: OP_INT_IS_TRUE(l_size_53, l_v30710);
-
- xor edx, edx
- cmp DWORD PTR _l_size_53$[ebp], 0
- setne dl
- mov BYTE PTR _l_v30710$[ebp], dl
-
-; 16595: if (l_v30710) {
-
- movzx eax, BYTE PTR _l_v30710$[ebp]
- test eax, eax
- je SHORT $block5$210889
-
-; 16596: l_v30754 = l_size_53;
-
- mov ecx, DWORD PTR _l_size_53$[ebp]
- mov DWORD PTR _l_v30754$[ebp], ecx
-
-; 16597: goto block6;
-
- jmp SHORT $block6$210888
-$block5$210889:
-
-; 16598: }
-; 16599: goto block5;
-; 16600:
-; 16601: block5:
-; 16602: l_v30711 = RPyField(l_pin_1, prrr_inst_digits);
-
- mov edx, DWORD PTR _l_pin_1$[ebp]
- mov eax, DWORD PTR [edx+8]
- mov DWORD PTR _l_v30711$[ebp], eax
-
-; 16603: l_v30712 = l_v30711->length;
-
- mov ecx, DWORD PTR _l_v30711$[ebp]
- mov edx, DWORD PTR [ecx+4]
- mov DWORD PTR _l_v30712$[ebp], edx
-
-; 16604: l_v30754 = l_v30712;
-
- mov eax, DWORD PTR _l_v30712$[ebp]
- mov DWORD PTR _l_v30754$[ebp], eax
-$block6$210888:
-
-; 16605: goto block6;
-; 16606:
-; 16607: block6:
-; 16608: OP_INT_SUB(l_v30754, 1L, l_v30713);
-
- mov ecx, DWORD PTR _l_v30754$[ebp]
- sub ecx, 1
- mov DWORD PTR _l_v30713$[ebp], ecx
-
-; 16609: l_v30702 = 0LL;
-
- mov DWORD PTR _l_v30702$[ebp], 0
- mov DWORD PTR _l_v30702$[ebp+4], 0
-
-; 16610: l_x_97 = l_v30713;
-
- mov edx, DWORD PTR _l_v30713$[ebp]
- mov DWORD PTR _l_x_97$[ebp], edx
-$block7$210890:
-
-; 16611: goto block7;
-; 16612:
-; 16613: block7:
-; 16614: OP_INT_GE(l_x_97, 0L, l_v30714);
-
- xor eax, eax
- cmp DWORD PTR _l_x_97$[ebp], 0
- setge al
- mov BYTE PTR _l_v30714$[ebp], al
-$LN5 at pypy_g__in:
-
-; 16615: while (l_v30714) {
-
- movzx ecx, BYTE PTR _l_v30714$[ebp]
- test ecx, ecx
- je SHORT $block8$210896
-
-; 16616: goto block9;
-
- jmp SHORT $block9$210894
-$block7_back$210895:
-
-; 16617: block7_back: ;
-; 16618: OP_INT_GE(l_x_97, 0L, l_v30714);
-
- xor edx, edx
- cmp DWORD PTR _l_x_97$[ebp], 0
- setge dl
- mov BYTE PTR _l_v30714$[ebp], dl
-
-; 16619: }
-
- jmp SHORT $LN5 at pypy_g__in
-$block8$210896:
-
-; 16620: goto block8;
-; 16621:
-; 16622: block8:
-; 16623: OP_LLONG_AND(l_v30702, 2147483647LL, l_v30715);
-
- mov eax, DWORD PTR _l_v30702$[ebp]
- and eax, 2147483647 ; 7fffffffH
- mov ecx, DWORD PTR _l_v30702$[ebp+4]
- and ecx, 0
- mov DWORD PTR _l_v30715$[ebp], eax
- mov DWORD PTR _l_v30715$[ebp+4], ecx
-
-; 16624: OP_TRUNCATE_LONGLONG_TO_INT(l_v30715, l_v30716);
-
- mov edx, DWORD PTR _l_v30715$[ebp]
- mov DWORD PTR _l_v30716$[ebp], edx
-
-; 16625: l_v30753 = l_v30716;
-
- mov eax, DWORD PTR _l_v30716$[ebp]
- mov DWORD PTR _l_v30753$[ebp], eax
-
-; 16626: goto block2;
-
- jmp $block2$210884
-$block9$210894:
-
-; 16627:
-; 16628: block9:
-; 16629: OP_LLONG_LSHIFT(l_v30702, 31LL, l_v30703);
-
- mov eax, DWORD PTR _l_v30702$[ebp]
- mov edx, DWORD PTR _l_v30702$[ebp+4]
- mov cl, 31 ; 0000001fH
- call __allshl
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- mov DWORD PTR _l_v30703$[ebp], eax
- mov DWORD PTR _l_v30703$[ebp+4], edx
-
-; 16630: l_l_100 = RPyField(l_pin_1, prrr_inst_digits);
-
- mov ecx, DWORD PTR _l_pin_1$[ebp]
- mov edx, DWORD PTR [ecx+8]
- mov DWORD PTR _l_l_100$[ebp], edx
-
-; 16631: l_length_83 = l_l_100->length;
-
- mov eax, DWORD PTR _l_l_100$[ebp]
- mov ecx, DWORD PTR [eax+4]
- mov DWORD PTR _l_length_83$[ebp], ecx
-
-; 16632: OP_INT_LT(l_x_97, 0L, l_v30717);
-
- xor edx, edx
- cmp DWORD PTR _l_x_97$[ebp], 0
- setl dl
- mov BYTE PTR _l_v30717$[ebp], dl
-
-; 16633: if (l_v30717) {
-
- movzx eax, BYTE PTR _l_v30717$[ebp]
- test eax, eax
- je SHORT $LN3 at pypy_g__in
-
-; 16634: goto block14;
-
- jmp $block14$210899
-$LN3 at pypy_g__in:
-
-; 16635: }
-; 16636: l_index_218 = l_x_97;
-
- mov ecx, DWORD PTR _l_x_97$[ebp]
- mov DWORD PTR _l_index_218$[ebp], ecx
-$block10$210900:
-
-; 16637: goto block10;
-; 16638:
-; 16639: block10:
-; 16640: OP_INT_GE(l_index_218, 0L, l_v30718);
-
- xor edx, edx
- cmp DWORD PTR _l_index_218$[ebp], 0
- setge dl
- mov BYTE PTR _l_v30718$[ebp], dl
-
-; 16641: RPyAssert(l_v30718, "negative list getitem index out of bound");
-; 16642: OP_INT_LT(l_index_218, l_length_83, l_v30720);
-
- mov eax, DWORD PTR _l_index_218$[ebp]
- xor ecx, ecx
- cmp eax, DWORD PTR _l_length_83$[ebp]
- setl cl
- mov BYTE PTR _l_v30720$[ebp], cl
-
-; 16643: RPyAssert(l_v30720, "list getitem index out of bound");
-; 16644: l_v30722 = l_l_100->length;
-
- mov edx, DWORD PTR _l_l_100$[ebp]
- mov eax, DWORD PTR [edx+4]
- mov DWORD PTR _l_v30722$[ebp], eax
-
-; 16645: OP_INT_LT(l_index_218, l_v30722, l_v30723);
-
- mov ecx, DWORD PTR _l_index_218$[ebp]
- xor edx, edx
- cmp ecx, DWORD PTR _l_v30722$[ebp]
- setl dl
- mov BYTE PTR _l_v30723$[ebp], dl
-
-; 16646: RPyAssert(l_v30723, "fixed getitem out of bounds");
-; 16647: l_v30725 = RPyItem(l_l_100, l_index_218);
-
- mov eax, DWORD PTR _l_index_218$[ebp]
- mov ecx, DWORD PTR _l_l_100$[ebp]
- mov edx, DWORD PTR [ecx+eax*4+8]
- mov DWORD PTR _l_v30725$[ebp], edx
-
-; 16648: OP_CAST_INT_TO_LONGLONG(l_v30725, l_v30726);
-
- mov eax, DWORD PTR _l_v30725$[ebp]
- cdq
- mov DWORD PTR _l_v30726$[ebp], eax
- mov DWORD PTR _l_v30726$[ebp+4], edx
-
-; 16649: OP_LLONG_ADD(l_v30703, l_v30726, l_v30706);
-
- mov eax, DWORD PTR _l_v30703$[ebp]
- add eax, DWORD PTR _l_v30726$[ebp]
- mov ecx, DWORD PTR _l_v30703$[ebp+4]
- adc ecx, DWORD PTR _l_v30726$[ebp+4]
- mov DWORD PTR _l_v30706$[ebp], eax
- mov DWORD PTR _l_v30706$[ebp+4], ecx
-
-; 16650: OP_LLONG_FLOORDIV(l_v30706, l_n_38, l_v30727);
-
- mov edx, DWORD PTR _l_n_38$[ebp+4]
- push edx
- mov eax, DWORD PTR _l_n_38$[ebp]
- push eax
- mov ecx, DWORD PTR _l_v30706$[ebp+4]
- push ecx
- mov edx, DWORD PTR _l_v30706$[ebp]
- push edx
- call __alldiv
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- mov DWORD PTR _l_v30727$[ebp], eax
- mov DWORD PTR _l_v30727$[ebp+4], edx
-
-; 16651: OP_LLONG_XOR(l_v30706, l_n_38, l_v30728);
-
- mov eax, DWORD PTR _l_v30706$[ebp]
- xor eax, DWORD PTR _l_n_38$[ebp]
- mov ecx, DWORD PTR _l_v30706$[ebp+4]
- xor ecx, DWORD PTR _l_n_38$[ebp+4]
- mov DWORD PTR _l_v30728$[ebp], eax
- mov DWORD PTR _l_v30728$[ebp+4], ecx
-
-; 16652: OP_LLONG_LE(l_v30728, 0LL, l_v30729);
-
- jg SHORT $LN15 at pypy_g__in
- jl SHORT $LN21 at pypy_g__in
- cmp DWORD PTR _l_v30728$[ebp], 0
- ja SHORT $LN15 at pypy_g__in
-$LN21 at pypy_g__in:
- mov DWORD PTR tv152[ebp], 1
- jmp SHORT $LN16 at pypy_g__in
-$LN15 at pypy_g__in:
- mov DWORD PTR tv152[ebp], 0
-$LN16 at pypy_g__in:
- mov dl, BYTE PTR tv152[ebp]
- mov BYTE PTR _l_v30729$[ebp], dl
-
-; 16653: OP_CAST_BOOL_TO_INT(l_v30729, l_v30730);
-
- movzx eax, BYTE PTR _l_v30729$[ebp]
- mov DWORD PTR _l_v30730$[ebp], eax
-
-; 16654: OP_CAST_INT_TO_LONGLONG(l_v30730, l_v30731);
-
- mov eax, DWORD PTR _l_v30730$[ebp]
- cdq
- mov DWORD PTR _l_v30731$[ebp], eax
- mov DWORD PTR _l_v30731$[ebp+4], edx
-
-; 16655: OP_LLONG_MOD(l_v30706, l_n_38, l_v30732);
-
- mov ecx, DWORD PTR _l_n_38$[ebp+4]
- push ecx
- mov edx, DWORD PTR _l_n_38$[ebp]
- push edx
- mov eax, DWORD PTR _l_v30706$[ebp+4]
- push eax
- mov ecx, DWORD PTR _l_v30706$[ebp]
- push ecx
- call __allrem
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- mov DWORD PTR _l_v30732$[ebp], eax
- mov DWORD PTR _l_v30732$[ebp+4], edx
-
-; 16656: OP_LLONG_NE(l_v30732, 0LL, l_v30733);
-
- mov edx, DWORD PTR _l_v30732$[ebp]
- or edx, DWORD PTR _l_v30732$[ebp+4]
- je SHORT $LN17 at pypy_g__in
- mov DWORD PTR tv158[ebp], 1
- jmp SHORT $LN18 at pypy_g__in
-$LN17 at pypy_g__in:
- mov DWORD PTR tv158[ebp], 0
-$LN18 at pypy_g__in:
- mov al, BYTE PTR tv158[ebp]
- mov BYTE PTR _l_v30733$[ebp], al
-
-; 16657: OP_CAST_BOOL_TO_INT(l_v30733, l_v30734);
-
- movzx ecx, BYTE PTR _l_v30733$[ebp]
- mov DWORD PTR _l_v30734$[ebp], ecx
-
-; 16658: OP_CAST_INT_TO_LONGLONG(l_v30734, l_v30735);
-
- mov eax, DWORD PTR _l_v30734$[ebp]
- cdq
- mov DWORD PTR _l_v30735$[ebp], eax
- mov DWORD PTR _l_v30735$[ebp+4], edx
-
-; 16659: OP_LLONG_AND(l_v30731, l_v30735, l_v30736);
-
- mov edx, DWORD PTR _l_v30731$[ebp]
- and edx, DWORD PTR _l_v30735$[ebp]
- mov eax, DWORD PTR _l_v30731$[ebp+4]
- and eax, DWORD PTR _l_v30735$[ebp+4]
- mov DWORD PTR _l_v30736$[ebp], edx
- mov DWORD PTR _l_v30736$[ebp+4], eax
-
-; 16660: OP_LLONG_SUB(l_v30727, l_v30736, l_v30705);
-
- mov ecx, DWORD PTR _l_v30727$[ebp]
- sub ecx, DWORD PTR _l_v30736$[ebp]
- mov edx, DWORD PTR _l_v30727$[ebp+4]
- sbb edx, DWORD PTR _l_v30736$[ebp+4]
- mov DWORD PTR _l_v30705$[ebp], ecx
- mov DWORD PTR _l_v30705$[ebp+4], edx
-
-; 16661: OP_LLONG_AND(l_v30705, 2147483647LL, l_v30737);
-
- mov eax, DWORD PTR _l_v30705$[ebp]
- and eax, 2147483647 ; 7fffffffH
- mov ecx, DWORD PTR _l_v30705$[ebp+4]
- and ecx, 0
- mov DWORD PTR _l_v30737$[ebp], eax
- mov DWORD PTR _l_v30737$[ebp+4], ecx
-
-; 16662: OP_TRUNCATE_LONGLONG_TO_INT(l_v30737, l_v30704);
-
- mov edx, DWORD PTR _l_v30737$[ebp]
- mov DWORD PTR _l_v30704$[ebp], edx
-
-; 16663: OP_INT_GE(l_v30704, 0L, l_v30738);
-
- xor eax, eax
- cmp DWORD PTR _l_v30704$[ebp], 0
- setge al
- mov BYTE PTR _l_v30738$[ebp], al
-
-; 16664: if (l_v30738) {
-
- movzx ecx, BYTE PTR _l_v30738$[ebp]
- test ecx, ecx
- je SHORT $LN2 at pypy_g__in
-
-; 16665: goto block11;
-
- jmp SHORT $block11$210908
-$LN2 at pypy_g__in:
-
-; 16666: }
-; 16667: l_evalue_70 = (&pypy_g_exceptions_AssertionError.ae_super.se_super.e_super);
-
- mov DWORD PTR _l_evalue_70$[ebp], OFFSET _pypy_g_exceptions_AssertionError
-
-; 16668: goto block1;
-
- jmp $block1$210883
-$block11$210908:
-
-; 16669:
-; 16670: block11:
-; 16671: l_l_101 = RPyField(l_self_3688, prrr_inst_digits);
-
- mov edx, DWORD PTR _l_self_3688$[ebp]
- mov eax, DWORD PTR [edx+8]
- mov DWORD PTR _l_l_101$[ebp], eax
-
-; 16672: l_length_82 = l_l_101->length;
-
- mov ecx, DWORD PTR _l_l_101$[ebp]
- mov edx, DWORD PTR [ecx+4]
- mov DWORD PTR _l_length_82$[ebp], edx
-
-; 16673: OP_INT_LT(l_x_97, 0L, l_v30739);
-
- xor eax, eax
- cmp DWORD PTR _l_x_97$[ebp], 0
- setl al
- mov BYTE PTR _l_v30739$[ebp], al
-
-; 16674: if (l_v30739) {
-
- movzx ecx, BYTE PTR _l_v30739$[ebp]
- test ecx, ecx
- je SHORT $LN1 at pypy_g__in
-
-; 16675: goto block13;
-
- jmp $block13$210910
-$LN1 at pypy_g__in:
-
-; 16676: }
-; 16677: l_index_219 = l_x_97;
-
- mov edx, DWORD PTR _l_x_97$[ebp]
- mov DWORD PTR _l_index_219$[ebp], edx
-$block12$210911:
-
-; 16678: goto block12;
-; 16679:
-; 16680: block12:
-; 16681: OP_INT_GE(l_index_219, 0L, l_v30740);
-
- xor eax, eax
- cmp DWORD PTR _l_index_219$[ebp], 0
- setge al
- mov BYTE PTR _l_v30740$[ebp], al
-
-; 16682: RPyAssert(l_v30740, "negative list setitem index out of bound");
-; 16683: OP_INT_LT(l_index_219, l_length_82, l_v30742);
-
- mov ecx, DWORD PTR _l_index_219$[ebp]
- xor edx, edx
- cmp ecx, DWORD PTR _l_length_82$[ebp]
- setl dl
- mov BYTE PTR _l_v30742$[ebp], dl
-
-; 16684: RPyAssert(l_v30742, "list setitem index out of bound");
-; 16685: l_v30744 = l_l_101->length;
-
- mov eax, DWORD PTR _l_l_101$[ebp]
- mov ecx, DWORD PTR [eax+4]
- mov DWORD PTR _l_v30744$[ebp], ecx
-
-; 16686: OP_INT_LT(l_index_219, l_v30744, l_v30745);
-
- mov edx, DWORD PTR _l_index_219$[ebp]
- xor eax, eax
- cmp edx, DWORD PTR _l_v30744$[ebp]
- setl al
- mov BYTE PTR _l_v30745$[ebp], al
-
-; 16687: RPyAssert(l_v30745, "fixed setitem out of bounds");
-; 16688: RPyItem(l_l_101, l_index_219) = l_v30704;
-
- mov ecx, DWORD PTR _l_index_219$[ebp]
- mov edx, DWORD PTR _l_l_101$[ebp]
- mov eax, DWORD PTR _l_v30704$[ebp]
- mov DWORD PTR [edx+ecx*4+8], eax
-
-; 16689: OP_LLONG_MUL(l_v30705, l_n_38, l_v30748);
-
- mov ecx, DWORD PTR _l_n_38$[ebp+4]
- push ecx
- mov edx, DWORD PTR _l_n_38$[ebp]
- push edx
- mov eax, DWORD PTR _l_v30705$[ebp+4]
- push eax
- mov ecx, DWORD PTR _l_v30705$[ebp]
- push ecx
- call __allmul
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- mov DWORD PTR _l_v30748$[ebp], eax
- mov DWORD PTR _l_v30748$[ebp+4], edx
-
-; 16690: OP_LLONG_SUB(l_v30706, l_v30748, l_v30749);
-
- mov edx, DWORD PTR _l_v30706$[ebp]
- sub edx, DWORD PTR _l_v30748$[ebp]
- mov eax, DWORD PTR _l_v30706$[ebp+4]
- sbb eax, DWORD PTR _l_v30748$[ebp+4]
- mov DWORD PTR _l_v30749$[ebp], edx
- mov DWORD PTR _l_v30749$[ebp+4], eax
-
-; 16691: OP_INT_SUB(l_x_97, 1L, l_v30750);
-
- mov ecx, DWORD PTR _l_x_97$[ebp]
- sub ecx, 1
- mov DWORD PTR _l_v30750$[ebp], ecx
-
-; 16692: l_v30702 = l_v30749;
-
- mov edx, DWORD PTR _l_v30749$[ebp]
- mov DWORD PTR _l_v30702$[ebp], edx
- mov eax, DWORD PTR _l_v30749$[ebp+4]
- mov DWORD PTR _l_v30702$[ebp+4], eax
-
-; 16693: l_x_97 = l_v30750;
-
- mov ecx, DWORD PTR _l_v30750$[ebp]
- mov DWORD PTR _l_x_97$[ebp], ecx
-
-; 16694: goto block7_back;
-
- jmp $block7_back$210895
-$block13$210910:
-
-; 16695:
-; 16696: block13:
-; 16697: OP_INT_ADD(l_x_97, l_length_82, l_v30751);
-
- mov edx, DWORD PTR _l_x_97$[ebp]
- add edx, DWORD PTR _l_length_82$[ebp]
- mov DWORD PTR _l_v30751$[ebp], edx
-
-; 16698: l_index_219 = l_v30751;
-
- mov eax, DWORD PTR _l_v30751$[ebp]
- mov DWORD PTR _l_index_219$[ebp], eax
-
-; 16699: goto block12;
-
- jmp $block12$210911
-$block14$210899:
-
-; 16700:
-; 16701: block14:
-; 16702: OP_INT_ADD(l_x_97, l_length_83, l_v30752);
-
- mov ecx, DWORD PTR _l_x_97$[ebp]
- add ecx, DWORD PTR _l_length_83$[ebp]
- mov DWORD PTR _l_v30752$[ebp], ecx
-
-; 16703: l_index_218 = l_v30752;
-
- mov edx, DWORD PTR _l_v30752$[ebp]
- mov DWORD PTR _l_index_218$[ebp], edx
-
-; 16704: goto block10;
-
- jmp $block10$210900
-$LN9 at pypy_g__in:
-
-; 16705: }
-
- mov esp, ebp
- pop ebp
- ret 0
-_pypy_g__inplace_divrem1 ENDP
+; Function compile flags: /Odtpy
+; COMDAT _pypy_g__inplace_divrem1
+_TEXT SEGMENT
+tv158 = -292 ; size = 4
+tv152 = -288 ; size = 4
+tv72 = -284 ; size = 4
+tv65 = -280 ; size = 4
+_l_v30733$ = -273 ; size = 1
+_l_v30737$ = -272 ; size = 8
+_l_v30740$ = -257 ; size = 1
+_l_v30744$ = -256 ; size = 4
+_l_v30753$ = -252 ; size = 4
+_l_v30748$ = -248 ; size = 8
+_l_v30709$ = -233 ; size = 1
+_l_v30710$ = -232 ; size = 1
+_l_v30714$ = -231 ; size = 1
+_l_v30718$ = -230 ; size = 1
+_l_v30729$ = -229 ; size = 1
+_l_v30725$ = -228 ; size = 4
+_l_v30705$ = -224 ; size = 8
+_l_evalue_70$ = -216 ; size = 4
+_l_index_219$ = -212 ; size = 4
+_l_v30738$ = -205 ; size = 1
+_l_v30730$ = -204 ; size = 4
+_l_v30734$ = -200 ; size = 4
+_l_length_82$ = -196 ; size = 4
+_l_v30745$ = -189 ; size = 1
+_l_v30752$ = -188 ; size = 4
+_l_v30749$ = -184 ; size = 8
+_l_l_100$ = -172 ; size = 4
+_l_l_101$ = -168 ; size = 4
+_l_length_83$ = -164 ; size = 4
+_l_v30704$ = -160 ; size = 4
+_l_v30722$ = -156 ; size = 4
+_l_v30715$ = -152 ; size = 8
+_l_v30726$ = -144 ; size = 8
+_l_v30711$ = -132 ; size = 4
+_l_x_97$ = -128 ; size = 4
+_l_v30739$ = -121 ; size = 1
+_l_v30731$ = -120 ; size = 8
+_l_v30735$ = -112 ; size = 8
+_l_v30742$ = -97 ; size = 1
+_l_v30751$ = -96 ; size = 4
+_l_v30707$ = -90 ; size = 1
+_l_v30723$ = -89 ; size = 1
+_l_v30712$ = -88 ; size = 4
+_l_v30716$ = -84 ; size = 4
+_l_v30703$ = -80 ; size = 8
+_l_v30727$ = -72 ; size = 8
+_l_v30732$ = -64 ; size = 8
+_l_v30736$ = -56 ; size = 8
+_l_index_218$ = -44 ; size = 4
+_l_v30750$ = -40 ; size = 4
+_l_v30754$ = -36 ; size = 4
+_l_v30717$ = -30 ; size = 1
+_l_v30720$ = -29 ; size = 1
+_l_v30713$ = -28 ; size = 4
+_l_v30702$ = -24 ; size = 8
+_l_v30706$ = -16 ; size = 8
+_l_v30728$ = -8 ; size = 8
+_l_self_3688$ = 8 ; size = 4
+_l_pin_1$ = 12 ; size = 4
+_l_n_38$ = 16 ; size = 8
+_l_size_53$ = 24 ; size = 4
+_pypy_g__inplace_divrem1 PROC ; COMDAT
+
+; 16550: long pypy_g__inplace_divrem1(struct pypy_pypy_rlib_rbigint_rbigint0 *l_self_3688, struct pypy_pypy_rlib_rbigint_rbigint0 *l_pin_1, long long l_n_38, long l_size_53) {
+
+ push ebp
+ mov ebp, esp
+ sub esp, 292 ; 00000124H
+$block0$210880:
+
+; 16551: struct pypy_object0 *l_evalue_70; long l_index_218; long l_index_219;
+; 16552: struct pypy_array5 *l_l_100; struct pypy_array5 *l_l_101;
+; 16553: long l_length_82; long l_length_83; bool_t l_v30707; bool_t l_v30709;
+; 16554: bool_t l_v30710; bool_t l_v30714; bool_t l_v30717; bool_t l_v30718;
+; 16555: bool_t l_v30720; bool_t l_v30723; bool_t l_v30729; bool_t l_v30733;
+; 16556: bool_t l_v30738; bool_t l_v30739; bool_t l_v30740; bool_t l_v30742;
+; 16557: bool_t l_v30745; long l_v30704; long l_v30712; long l_v30713;
+; 16558: long l_v30716; long l_v30722; long l_v30725; long l_v30730;
+; 16559: long l_v30734; long l_v30744; long l_v30750; long l_v30751;
+; 16560: long l_v30752; long l_v30753; long l_v30754; long long l_v30702;
+; 16561: long long l_v30703; long long l_v30705; long long l_v30706;
+; 16562: long long l_v30715; long long l_v30726; long long l_v30727;
+; 16563: long long l_v30728; long long l_v30731; long long l_v30732;
+; 16564: long long l_v30735; long long l_v30736; long long l_v30737;
+; 16565: long long l_v30748; long long l_v30749; struct pypy_array5 *l_v30711;
+; 16566: long l_x_97;
+; 16567:
+; 16568: block0:
+; 16569: OP_LLONG_GT(l_n_38, 0LL, l_v30707);
+
+ cmp DWORD PTR _l_n_38$[ebp+4], 0
+ jl SHORT $LN11 at pypy_g__in
+ jg SHORT $LN19 at pypy_g__in
+ cmp DWORD PTR _l_n_38$[ebp], 0
+ jbe SHORT $LN11 at pypy_g__in
+$LN19 at pypy_g__in:
+ mov DWORD PTR tv65[ebp], 1
+ jmp SHORT $LN12 at pypy_g__in
+$LN11 at pypy_g__in:
+ mov DWORD PTR tv65[ebp], 0
+$LN12 at pypy_g__in:
+ mov al, BYTE PTR tv65[ebp]
+ mov BYTE PTR _l_v30707$[ebp], al
+
+; 16570: if (l_v30707) {
+
+ movzx ecx, BYTE PTR _l_v30707$[ebp]
+ test ecx, ecx
+ je SHORT $LN8 at pypy_g__in
+
+; 16571: goto block3;
+
+ jmp SHORT $block3$210882
+$LN8 at pypy_g__in:
+
+; 16572: }
+; 16573: l_evalue_70 = (&pypy_g_exceptions_AssertionError.ae_super.se_super.e_super);
+
+ mov DWORD PTR _l_evalue_70$[ebp], OFFSET _pypy_g_exceptions_AssertionError
+$block1$210883:
+
+; 16574: goto block1;
+; 16575:
+; 16576: block1:
+; 16577: pypy_g_RPyRaiseException((&pypy_g_exceptions_AssertionError_vtable.ae_super.se_super.e_super), l_evalue_70);
+
+ mov edx, DWORD PTR _l_evalue_70$[ebp]
+ push edx
+ push OFFSET _pypy_g_exceptions_AssertionError_vtable
+ call _pypy_g_RPyRaiseException
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ add esp, 8
+
+; 16578: l_v30753 = -1L;
+
+ mov DWORD PTR _l_v30753$[ebp], -1
+$block2$210884:
+
+; 16579: goto block2;
+; 16580:
+; 16581: block2:
+; 16582: RPY_DEBUG_RETURN();
+; 16583: return l_v30753;
+
+ mov eax, DWORD PTR _l_v30753$[ebp]
+ jmp $LN9 at pypy_g__in
+$block3$210882:
+
+; 16584:
+; 16585: block3:
+; 16586: OP_LLONG_LE(l_n_38, 2147483647LL, l_v30709);
+
+ cmp DWORD PTR _l_n_38$[ebp+4], 0
+ jg SHORT $LN13 at pypy_g__in
+ jl SHORT $LN20 at pypy_g__in
+ cmp DWORD PTR _l_n_38$[ebp], 2147483647 ; 7fffffffH
+ ja SHORT $LN13 at pypy_g__in
+$LN20 at pypy_g__in:
+ mov DWORD PTR tv72[ebp], 1
+ jmp SHORT $LN14 at pypy_g__in
+$LN13 at pypy_g__in:
+ mov DWORD PTR tv72[ebp], 0
+$LN14 at pypy_g__in:
+ mov al, BYTE PTR tv72[ebp]
+ mov BYTE PTR _l_v30709$[ebp], al
+
+; 16587: if (l_v30709) {
+
+ movzx ecx, BYTE PTR _l_v30709$[ebp]
+ test ecx, ecx
+ je SHORT $LN7 at pypy_g__in
+
+; 16588: goto block4;
+
+ jmp SHORT $block4$210886
+$LN7 at pypy_g__in:
+
+; 16589: }
+; 16590: l_evalue_70 = (&pypy_g_exceptions_AssertionError.ae_super.se_super.e_super);
+
+ mov DWORD PTR _l_evalue_70$[ebp], OFFSET _pypy_g_exceptions_AssertionError
+
+; 16591: goto block1;
+
+ jmp SHORT $block1$210883
+$block4$210886:
+
+; 16592:
+; 16593: block4:
+; 16594: OP_INT_IS_TRUE(l_size_53, l_v30710);
+
+ xor edx, edx
+ cmp DWORD PTR _l_size_53$[ebp], 0
+ setne dl
+ mov BYTE PTR _l_v30710$[ebp], dl
+
+; 16595: if (l_v30710) {
+
+ movzx eax, BYTE PTR _l_v30710$[ebp]
+ test eax, eax
+ je SHORT $block5$210889
+
+; 16596: l_v30754 = l_size_53;
+
+ mov ecx, DWORD PTR _l_size_53$[ebp]
+ mov DWORD PTR _l_v30754$[ebp], ecx
+
+; 16597: goto block6;
+
+ jmp SHORT $block6$210888
+$block5$210889:
+
+; 16598: }
+; 16599: goto block5;
+; 16600:
+; 16601: block5:
+; 16602: l_v30711 = RPyField(l_pin_1, prrr_inst_digits);
+
+ mov edx, DWORD PTR _l_pin_1$[ebp]
+ mov eax, DWORD PTR [edx+8]
+ mov DWORD PTR _l_v30711$[ebp], eax
+
+; 16603: l_v30712 = l_v30711->length;
+
+ mov ecx, DWORD PTR _l_v30711$[ebp]
+ mov edx, DWORD PTR [ecx+4]
+ mov DWORD PTR _l_v30712$[ebp], edx
+
+; 16604: l_v30754 = l_v30712;
+
+ mov eax, DWORD PTR _l_v30712$[ebp]
+ mov DWORD PTR _l_v30754$[ebp], eax
+$block6$210888:
+
+; 16605: goto block6;
+; 16606:
+; 16607: block6:
+; 16608: OP_INT_SUB(l_v30754, 1L, l_v30713);
+
+ mov ecx, DWORD PTR _l_v30754$[ebp]
+ sub ecx, 1
+ mov DWORD PTR _l_v30713$[ebp], ecx
+
+; 16609: l_v30702 = 0LL;
+
+ mov DWORD PTR _l_v30702$[ebp], 0
+ mov DWORD PTR _l_v30702$[ebp+4], 0
+
+; 16610: l_x_97 = l_v30713;
+
+ mov edx, DWORD PTR _l_v30713$[ebp]
+ mov DWORD PTR _l_x_97$[ebp], edx
+$block7$210890:
+
+; 16611: goto block7;
+; 16612:
+; 16613: block7:
+; 16614: OP_INT_GE(l_x_97, 0L, l_v30714);
+
+ xor eax, eax
+ cmp DWORD PTR _l_x_97$[ebp], 0
+ setge al
+ mov BYTE PTR _l_v30714$[ebp], al
+$LN5 at pypy_g__in:
+
+; 16615: while (l_v30714) {
+
+ movzx ecx, BYTE PTR _l_v30714$[ebp]
+ test ecx, ecx
+ je SHORT $block8$210896
+
+; 16616: goto block9;
+
+ jmp SHORT $block9$210894
+$block7_back$210895:
+
+; 16617: block7_back: ;
+; 16618: OP_INT_GE(l_x_97, 0L, l_v30714);
+
+ xor edx, edx
+ cmp DWORD PTR _l_x_97$[ebp], 0
+ setge dl
+ mov BYTE PTR _l_v30714$[ebp], dl
+
+; 16619: }
+
+ jmp SHORT $LN5 at pypy_g__in
+$block8$210896:
+
+; 16620: goto block8;
+; 16621:
+; 16622: block8:
+; 16623: OP_LLONG_AND(l_v30702, 2147483647LL, l_v30715);
+
+ mov eax, DWORD PTR _l_v30702$[ebp]
+ and eax, 2147483647 ; 7fffffffH
+ mov ecx, DWORD PTR _l_v30702$[ebp+4]
+ and ecx, 0
+ mov DWORD PTR _l_v30715$[ebp], eax
+ mov DWORD PTR _l_v30715$[ebp+4], ecx
+
+; 16624: OP_TRUNCATE_LONGLONG_TO_INT(l_v30715, l_v30716);
+
+ mov edx, DWORD PTR _l_v30715$[ebp]
+ mov DWORD PTR _l_v30716$[ebp], edx
+
+; 16625: l_v30753 = l_v30716;
+
+ mov eax, DWORD PTR _l_v30716$[ebp]
+ mov DWORD PTR _l_v30753$[ebp], eax
+
+; 16626: goto block2;
+
+ jmp $block2$210884
+$block9$210894:
+
+; 16627:
+; 16628: block9:
+; 16629: OP_LLONG_LSHIFT(l_v30702, 31LL, l_v30703);
+
+ mov eax, DWORD PTR _l_v30702$[ebp]
+ mov edx, DWORD PTR _l_v30702$[ebp+4]
+ mov cl, 31 ; 0000001fH
+ call __allshl
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ mov DWORD PTR _l_v30703$[ebp], eax
+ mov DWORD PTR _l_v30703$[ebp+4], edx
+
+; 16630: l_l_100 = RPyField(l_pin_1, prrr_inst_digits);
+
+ mov ecx, DWORD PTR _l_pin_1$[ebp]
+ mov edx, DWORD PTR [ecx+8]
+ mov DWORD PTR _l_l_100$[ebp], edx
+
+; 16631: l_length_83 = l_l_100->length;
+
+ mov eax, DWORD PTR _l_l_100$[ebp]
+ mov ecx, DWORD PTR [eax+4]
+ mov DWORD PTR _l_length_83$[ebp], ecx
+
+; 16632: OP_INT_LT(l_x_97, 0L, l_v30717);
+
+ xor edx, edx
+ cmp DWORD PTR _l_x_97$[ebp], 0
+ setl dl
+ mov BYTE PTR _l_v30717$[ebp], dl
+
+; 16633: if (l_v30717) {
+
+ movzx eax, BYTE PTR _l_v30717$[ebp]
+ test eax, eax
+ je SHORT $LN3 at pypy_g__in
+
+; 16634: goto block14;
+
+ jmp $block14$210899
+$LN3 at pypy_g__in:
+
+; 16635: }
+; 16636: l_index_218 = l_x_97;
+
+ mov ecx, DWORD PTR _l_x_97$[ebp]
+ mov DWORD PTR _l_index_218$[ebp], ecx
+$block10$210900:
+
+; 16637: goto block10;
+; 16638:
+; 16639: block10:
+; 16640: OP_INT_GE(l_index_218, 0L, l_v30718);
+
+ xor edx, edx
+ cmp DWORD PTR _l_index_218$[ebp], 0
+ setge dl
+ mov BYTE PTR _l_v30718$[ebp], dl
+
+; 16641: RPyAssert(l_v30718, "negative list getitem index out of bound");
+; 16642: OP_INT_LT(l_index_218, l_length_83, l_v30720);
+
+ mov eax, DWORD PTR _l_index_218$[ebp]
+ xor ecx, ecx
+ cmp eax, DWORD PTR _l_length_83$[ebp]
+ setl cl
+ mov BYTE PTR _l_v30720$[ebp], cl
+
+; 16643: RPyAssert(l_v30720, "list getitem index out of bound");
+; 16644: l_v30722 = l_l_100->length;
+
+ mov edx, DWORD PTR _l_l_100$[ebp]
+ mov eax, DWORD PTR [edx+4]
+ mov DWORD PTR _l_v30722$[ebp], eax
+
+; 16645: OP_INT_LT(l_index_218, l_v30722, l_v30723);
+
+ mov ecx, DWORD PTR _l_index_218$[ebp]
+ xor edx, edx
+ cmp ecx, DWORD PTR _l_v30722$[ebp]
+ setl dl
+ mov BYTE PTR _l_v30723$[ebp], dl
+
+; 16646: RPyAssert(l_v30723, "fixed getitem out of bounds");
+; 16647: l_v30725 = RPyItem(l_l_100, l_index_218);
+
+ mov eax, DWORD PTR _l_index_218$[ebp]
+ mov ecx, DWORD PTR _l_l_100$[ebp]
+ mov edx, DWORD PTR [ecx+eax*4+8]
+ mov DWORD PTR _l_v30725$[ebp], edx
+
+; 16648: OP_CAST_INT_TO_LONGLONG(l_v30725, l_v30726);
+
+ mov eax, DWORD PTR _l_v30725$[ebp]
+ cdq
+ mov DWORD PTR _l_v30726$[ebp], eax
+ mov DWORD PTR _l_v30726$[ebp+4], edx
+
+; 16649: OP_LLONG_ADD(l_v30703, l_v30726, l_v30706);
+
+ mov eax, DWORD PTR _l_v30703$[ebp]
+ add eax, DWORD PTR _l_v30726$[ebp]
+ mov ecx, DWORD PTR _l_v30703$[ebp+4]
+ adc ecx, DWORD PTR _l_v30726$[ebp+4]
+ mov DWORD PTR _l_v30706$[ebp], eax
+ mov DWORD PTR _l_v30706$[ebp+4], ecx
+
+; 16650: OP_LLONG_FLOORDIV(l_v30706, l_n_38, l_v30727);
+
+ mov edx, DWORD PTR _l_n_38$[ebp+4]
+ push edx
+ mov eax, DWORD PTR _l_n_38$[ebp]
+ push eax
+ mov ecx, DWORD PTR _l_v30706$[ebp+4]
+ push ecx
+ mov edx, DWORD PTR _l_v30706$[ebp]
+ push edx
+ call __alldiv
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ mov DWORD PTR _l_v30727$[ebp], eax
+ mov DWORD PTR _l_v30727$[ebp+4], edx
+
+; 16651: OP_LLONG_XOR(l_v30706, l_n_38, l_v30728);
+
+ mov eax, DWORD PTR _l_v30706$[ebp]
+ xor eax, DWORD PTR _l_n_38$[ebp]
+ mov ecx, DWORD PTR _l_v30706$[ebp+4]
+ xor ecx, DWORD PTR _l_n_38$[ebp+4]
+ mov DWORD PTR _l_v30728$[ebp], eax
+ mov DWORD PTR _l_v30728$[ebp+4], ecx
+
+; 16652: OP_LLONG_LE(l_v30728, 0LL, l_v30729);
+
+ jg SHORT $LN15 at pypy_g__in
+ jl SHORT $LN21 at pypy_g__in
+ cmp DWORD PTR _l_v30728$[ebp], 0
+ ja SHORT $LN15 at pypy_g__in
+$LN21 at pypy_g__in:
+ mov DWORD PTR tv152[ebp], 1
+ jmp SHORT $LN16 at pypy_g__in
+$LN15 at pypy_g__in:
+ mov DWORD PTR tv152[ebp], 0
+$LN16 at pypy_g__in:
+ mov dl, BYTE PTR tv152[ebp]
+ mov BYTE PTR _l_v30729$[ebp], dl
+
+; 16653: OP_CAST_BOOL_TO_INT(l_v30729, l_v30730);
+
+ movzx eax, BYTE PTR _l_v30729$[ebp]
+ mov DWORD PTR _l_v30730$[ebp], eax
+
+; 16654: OP_CAST_INT_TO_LONGLONG(l_v30730, l_v30731);
+
+ mov eax, DWORD PTR _l_v30730$[ebp]
+ cdq
+ mov DWORD PTR _l_v30731$[ebp], eax
+ mov DWORD PTR _l_v30731$[ebp+4], edx
+
+; 16655: OP_LLONG_MOD(l_v30706, l_n_38, l_v30732);
+
+ mov ecx, DWORD PTR _l_n_38$[ebp+4]
+ push ecx
+ mov edx, DWORD PTR _l_n_38$[ebp]
+ push edx
+ mov eax, DWORD PTR _l_v30706$[ebp+4]
+ push eax
+ mov ecx, DWORD PTR _l_v30706$[ebp]
+ push ecx
+ call __allrem
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ mov DWORD PTR _l_v30732$[ebp], eax
+ mov DWORD PTR _l_v30732$[ebp+4], edx
+
+; 16656: OP_LLONG_NE(l_v30732, 0LL, l_v30733);
+
+ mov edx, DWORD PTR _l_v30732$[ebp]
+ or edx, DWORD PTR _l_v30732$[ebp+4]
+ je SHORT $LN17 at pypy_g__in
+ mov DWORD PTR tv158[ebp], 1
+ jmp SHORT $LN18 at pypy_g__in
+$LN17 at pypy_g__in:
+ mov DWORD PTR tv158[ebp], 0
+$LN18 at pypy_g__in:
+ mov al, BYTE PTR tv158[ebp]
+ mov BYTE PTR _l_v30733$[ebp], al
+
+; 16657: OP_CAST_BOOL_TO_INT(l_v30733, l_v30734);
+
+ movzx ecx, BYTE PTR _l_v30733$[ebp]
+ mov DWORD PTR _l_v30734$[ebp], ecx
+
+; 16658: OP_CAST_INT_TO_LONGLONG(l_v30734, l_v30735);
+
+ mov eax, DWORD PTR _l_v30734$[ebp]
+ cdq
+ mov DWORD PTR _l_v30735$[ebp], eax
+ mov DWORD PTR _l_v30735$[ebp+4], edx
+
+; 16659: OP_LLONG_AND(l_v30731, l_v30735, l_v30736);
+
+ mov edx, DWORD PTR _l_v30731$[ebp]
+ and edx, DWORD PTR _l_v30735$[ebp]
+ mov eax, DWORD PTR _l_v30731$[ebp+4]
+ and eax, DWORD PTR _l_v30735$[ebp+4]
+ mov DWORD PTR _l_v30736$[ebp], edx
+ mov DWORD PTR _l_v30736$[ebp+4], eax
+
+; 16660: OP_LLONG_SUB(l_v30727, l_v30736, l_v30705);
+
+ mov ecx, DWORD PTR _l_v30727$[ebp]
+ sub ecx, DWORD PTR _l_v30736$[ebp]
+ mov edx, DWORD PTR _l_v30727$[ebp+4]
+ sbb edx, DWORD PTR _l_v30736$[ebp+4]
+ mov DWORD PTR _l_v30705$[ebp], ecx
+ mov DWORD PTR _l_v30705$[ebp+4], edx
+
+; 16661: OP_LLONG_AND(l_v30705, 2147483647LL, l_v30737);
+
+ mov eax, DWORD PTR _l_v30705$[ebp]
+ and eax, 2147483647 ; 7fffffffH
+ mov ecx, DWORD PTR _l_v30705$[ebp+4]
+ and ecx, 0
+ mov DWORD PTR _l_v30737$[ebp], eax
+ mov DWORD PTR _l_v30737$[ebp+4], ecx
+
+; 16662: OP_TRUNCATE_LONGLONG_TO_INT(l_v30737, l_v30704);
+
+ mov edx, DWORD PTR _l_v30737$[ebp]
+ mov DWORD PTR _l_v30704$[ebp], edx
+
+; 16663: OP_INT_GE(l_v30704, 0L, l_v30738);
+
+ xor eax, eax
+ cmp DWORD PTR _l_v30704$[ebp], 0
+ setge al
+ mov BYTE PTR _l_v30738$[ebp], al
+
+; 16664: if (l_v30738) {
+
+ movzx ecx, BYTE PTR _l_v30738$[ebp]
+ test ecx, ecx
+ je SHORT $LN2 at pypy_g__in
+
+; 16665: goto block11;
+
+ jmp SHORT $block11$210908
+$LN2 at pypy_g__in:
+
+; 16666: }
+; 16667: l_evalue_70 = (&pypy_g_exceptions_AssertionError.ae_super.se_super.e_super);
+
+ mov DWORD PTR _l_evalue_70$[ebp], OFFSET _pypy_g_exceptions_AssertionError
+
+; 16668: goto block1;
+
+ jmp $block1$210883
+$block11$210908:
+
+; 16669:
+; 16670: block11:
+; 16671: l_l_101 = RPyField(l_self_3688, prrr_inst_digits);
+
+ mov edx, DWORD PTR _l_self_3688$[ebp]
+ mov eax, DWORD PTR [edx+8]
+ mov DWORD PTR _l_l_101$[ebp], eax
+
+; 16672: l_length_82 = l_l_101->length;
+
+ mov ecx, DWORD PTR _l_l_101$[ebp]
+ mov edx, DWORD PTR [ecx+4]
+ mov DWORD PTR _l_length_82$[ebp], edx
+
+; 16673: OP_INT_LT(l_x_97, 0L, l_v30739);
+
+ xor eax, eax
+ cmp DWORD PTR _l_x_97$[ebp], 0
+ setl al
+ mov BYTE PTR _l_v30739$[ebp], al
+
+; 16674: if (l_v30739) {
+
+ movzx ecx, BYTE PTR _l_v30739$[ebp]
+ test ecx, ecx
+ je SHORT $LN1 at pypy_g__in
+
+; 16675: goto block13;
+
+ jmp $block13$210910
+$LN1 at pypy_g__in:
+
+; 16676: }
+; 16677: l_index_219 = l_x_97;
+
+ mov edx, DWORD PTR _l_x_97$[ebp]
+ mov DWORD PTR _l_index_219$[ebp], edx
+$block12$210911:
+
+; 16678: goto block12;
+; 16679:
+; 16680: block12:
+; 16681: OP_INT_GE(l_index_219, 0L, l_v30740);
+
+ xor eax, eax
+ cmp DWORD PTR _l_index_219$[ebp], 0
+ setge al
+ mov BYTE PTR _l_v30740$[ebp], al
+
+; 16682: RPyAssert(l_v30740, "negative list setitem index out of bound");
+; 16683: OP_INT_LT(l_index_219, l_length_82, l_v30742);
+
+ mov ecx, DWORD PTR _l_index_219$[ebp]
+ xor edx, edx
+ cmp ecx, DWORD PTR _l_length_82$[ebp]
+ setl dl
+ mov BYTE PTR _l_v30742$[ebp], dl
+
+; 16684: RPyAssert(l_v30742, "list setitem index out of bound");
+; 16685: l_v30744 = l_l_101->length;
+
+ mov eax, DWORD PTR _l_l_101$[ebp]
+ mov ecx, DWORD PTR [eax+4]
+ mov DWORD PTR _l_v30744$[ebp], ecx
+
+; 16686: OP_INT_LT(l_index_219, l_v30744, l_v30745);
+
+ mov edx, DWORD PTR _l_index_219$[ebp]
+ xor eax, eax
+ cmp edx, DWORD PTR _l_v30744$[ebp]
+ setl al
+ mov BYTE PTR _l_v30745$[ebp], al
+
+; 16687: RPyAssert(l_v30745, "fixed setitem out of bounds");
+; 16688: RPyItem(l_l_101, l_index_219) = l_v30704;
+
+ mov ecx, DWORD PTR _l_index_219$[ebp]
+ mov edx, DWORD PTR _l_l_101$[ebp]
+ mov eax, DWORD PTR _l_v30704$[ebp]
+ mov DWORD PTR [edx+ecx*4+8], eax
+
+; 16689: OP_LLONG_MUL(l_v30705, l_n_38, l_v30748);
+
+ mov ecx, DWORD PTR _l_n_38$[ebp+4]
+ push ecx
+ mov edx, DWORD PTR _l_n_38$[ebp]
+ push edx
+ mov eax, DWORD PTR _l_v30705$[ebp+4]
+ push eax
+ mov ecx, DWORD PTR _l_v30705$[ebp]
+ push ecx
+ call __allmul
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ mov DWORD PTR _l_v30748$[ebp], eax
+ mov DWORD PTR _l_v30748$[ebp+4], edx
+
+; 16690: OP_LLONG_SUB(l_v30706, l_v30748, l_v30749);
+
+ mov edx, DWORD PTR _l_v30706$[ebp]
+ sub edx, DWORD PTR _l_v30748$[ebp]
+ mov eax, DWORD PTR _l_v30706$[ebp+4]
+ sbb eax, DWORD PTR _l_v30748$[ebp+4]
+ mov DWORD PTR _l_v30749$[ebp], edx
+ mov DWORD PTR _l_v30749$[ebp+4], eax
+
+; 16691: OP_INT_SUB(l_x_97, 1L, l_v30750);
+
+ mov ecx, DWORD PTR _l_x_97$[ebp]
+ sub ecx, 1
+ mov DWORD PTR _l_v30750$[ebp], ecx
+
+; 16692: l_v30702 = l_v30749;
+
+ mov edx, DWORD PTR _l_v30749$[ebp]
+ mov DWORD PTR _l_v30702$[ebp], edx
+ mov eax, DWORD PTR _l_v30749$[ebp+4]
+ mov DWORD PTR _l_v30702$[ebp+4], eax
+
+; 16693: l_x_97 = l_v30750;
+
+ mov ecx, DWORD PTR _l_v30750$[ebp]
+ mov DWORD PTR _l_x_97$[ebp], ecx
+
+; 16694: goto block7_back;
+
+ jmp $block7_back$210895
+$block13$210910:
+
+; 16695:
+; 16696: block13:
+; 16697: OP_INT_ADD(l_x_97, l_length_82, l_v30751);
+
+ mov edx, DWORD PTR _l_x_97$[ebp]
+ add edx, DWORD PTR _l_length_82$[ebp]
+ mov DWORD PTR _l_v30751$[ebp], edx
+
+; 16698: l_index_219 = l_v30751;
+
+ mov eax, DWORD PTR _l_v30751$[ebp]
+ mov DWORD PTR _l_index_219$[ebp], eax
+
+; 16699: goto block12;
+
+ jmp $block12$210911
+$block14$210899:
+
+; 16700:
+; 16701: block14:
+; 16702: OP_INT_ADD(l_x_97, l_length_83, l_v30752);
+
+ mov ecx, DWORD PTR _l_x_97$[ebp]
+ add ecx, DWORD PTR _l_length_83$[ebp]
+ mov DWORD PTR _l_v30752$[ebp], ecx
+
+; 16703: l_index_218 = l_v30752;
+
+ mov edx, DWORD PTR _l_v30752$[ebp]
+ mov DWORD PTR _l_index_218$[ebp], edx
+
+; 16704: goto block10;
+
+ jmp $block10$210900
+$LN9 at pypy_g__in:
+
+; 16705: }
+
+ mov esp, ebp
+ pop ebp
+ ret 0
+_pypy_g__inplace_divrem1 ENDP
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track8.s
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track8.s (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track8.s Thu Nov 5 23:13:47 2009
@@ -1,547 +1,547 @@
-; Function compile flags: /Ogtpy
-; COMDAT _pypy_g_foo
-_TEXT SEGMENT
-tv419 = -8 ; size = 4
-_l_v416$ = -4 ; size = 4
-_l_v413$ = -4 ; size = 4
-_l_v410$ = -4 ; size = 4
-_l_v407$ = -4 ; size = 4
-_l_v404$ = -4 ; size = 4
-_l_v401$ = -4 ; size = 4
-_l_v394$ = -4 ; size = 4
-_l_v391$ = -4 ; size = 4
-_l_v388$ = -4 ; size = 4
-_l_v385$ = -4 ; size = 4
-_l_v382$ = -4 ; size = 4
-_l_v379$ = -4 ; size = 4
-_l_v376$ = -4 ; size = 4
-_l_v368$ = -4 ; size = 4
-_l_v365$ = -4 ; size = 4
-_l_v362$ = -4 ; size = 4
-_l_v359$ = -4 ; size = 4
-_l_v356$ = -4 ; size = 4
-_l_v353$ = -4 ; size = 4
-_local$40423 = 8 ; size = 1
-_l_rec_1$ = 8 ; size = 4
-_l_a1_1$ = 12 ; size = 4
-_l_a2_1$ = 16 ; size = 4
-_l_a3_1$ = 20 ; size = 4
-_l_a4_1$ = 24 ; size = 4
-_l_a5_1$ = 28 ; size = 4
-_l_a6_1$ = 32 ; size = 4
-_pypy_g_foo PROC ; COMDAT
-
-; 1026 : bool_t l_v337; bool_t l_v340; bool_t l_v345; bool_t l_v346;
-; 1027 : bool_t l_v371; bool_t l_v398; bool_t l_v420; bool_t l_v426;
-; 1028 : long l_v342; long l_v344; long l_v374; long l_v399; long l_v421;
-; 1029 : struct pypy_header0 *l_v347; struct pypy_object0 *l_v372;
-; 1030 : struct pypy_object_vtable0 *l_v339;
-; 1031 : struct pypy_object_vtable0 *l_v397;
-; 1032 : struct pypy_object_vtable0 *l_v419;
-; 1033 : struct pypy_object_vtable0 *l_v425; struct pypy_src8_A0 *l_v335;
-; 1034 : void* l_v336; void* l_v341; void* l_v343; void* l_v349; void* l_v351;
-; 1035 : void* l_v352; void* l_v353; void* l_v354; void* l_v356; void* l_v357;
-; 1036 : void* l_v359; void* l_v360; void* l_v362; void* l_v363; void* l_v365;
-; 1037 : void* l_v366; void* l_v368; void* l_v369; void* l_v376; void* l_v377;
-; 1038 : void* l_v379; void* l_v380; void* l_v382; void* l_v383; void* l_v385;
-; 1039 : void* l_v386; void* l_v388; void* l_v389; void* l_v391; void* l_v392;
-; 1040 : void* l_v394; void* l_v395; void* l_v401; void* l_v402; void* l_v404;
-; 1041 : void* l_v405; void* l_v407; void* l_v408; void* l_v410; void* l_v411;
-; 1042 : void* l_v413; void* l_v414; void* l_v416; void* l_v417; void* l_v424;
-; 1043 : void* l_v428;
-; 1044 :
-; 1045 : block0:
-; 1046 : OP_INT_GT(l_rec_1, 0L, l_v337);
-
- mov eax, DWORD PTR _l_rec_1$[esp-4]
- sub esp, 8
- test eax, eax
-$block0$34376:
-
-; 1047 : if (l_v337) {
-
- jle $block1$34379
- push ebx
- mov ebx, DWORD PTR _l_a2_1$[esp+8]
- push ebp
- mov ebp, DWORD PTR _l_a1_1$[esp+12]
- push edi
- mov edi, DWORD PTR _l_a3_1$[esp+16]
- add eax, -1
- mov DWORD PTR tv419[esp+20], eax
- push esi
- npad 10
-$LL63 at pypy_g_foo:
-
-; 1048 : goto block2;
-; 1049 : }
-; 1050 : goto block1;
-; 1051 :
-; 1052 : block1:
-; 1053 : RPY_DEBUG_RETURN();
-; 1054 : return /* nothing */;
-; 1055 :
-; 1056 : block2:
-; 1057 : pypy_g_stack_check___();
-
- lea eax, DWORD PTR _local$40423[esp+20]
- sub eax, DWORD PTR __LLstacktoobig_stack_base_pointer
-$block0$40413:
- cmp eax, DWORD PTR __LLstacktoobig_stack_min
-$block2$34378:
- jl SHORT $LN16 at pypy_g_foo
- cmp eax, DWORD PTR __LLstacktoobig_stack_max
- jle SHORT $LN17 at pypy_g_foo
-$LN16 at pypy_g_foo:
- call _LL_stack_too_big_slowpath
- ;; expected {24(%esp) | 12(%esp), (%esp), 4(%esp), 8(%esp) | %ebx, %edi, %ebp, 44(%esp), 48(%esp), 52(%esp)}
- test eax, eax
- jne $LN71 at pypy_g_foo
-$LN17 at pypy_g_foo:
-$block1$40416:
-
-; 1058 : l_v339 = RPyField((&pypy_g_ExcData), ed_exc_type);
-; 1059 : l_v340 = (l_v339 == NULL);
-
- cmp DWORD PTR _pypy_g_ExcData, 0
-
-; 1060 : if (!l_v340) {
-
- jne $LN75 at pypy_g_foo
-
-; 1061 : goto block1;
-; 1062 : }
-; 1063 : goto block3;
-; 1064 :
-; 1065 : block3:
-; 1066 : l_v341 = RPyField((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), ssgc_inst_free);
-
- mov esi, DWORD PTR _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+12
-
-; 1067 : OP_RAW_MALLOC_USAGE((0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_src8_A0), sizeof(struct pypy_forwarding_stub0))), l_v342);
-; 1068 : l_v343 = RPyField((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), ssgc_inst_top_of_space);
-; 1069 : OP_ADR_DELTA(l_v343, l_v341, l_v344);
-
- mov eax, DWORD PTR _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+80
- sub eax, esi
-
-; 1070 : OP_INT_GT(l_v342, l_v344, l_v345);
-
- cmp eax, 8
-$block3$34382:
-
-; 1071 : if (l_v345) {
-
- jge SHORT $block4$34395
-
-; 1184 : goto block1;
-; 1185 :
-; 1186 : block10:
-; 1187 : abort(); /* debug_llinterpcall should be unreachable */
-; 1188 : goto block5;
-; 1189 :
-; 1190 : block11:
-; 1191 : l_v424 = pypy_g_SemiSpaceGC_obtain_free_space((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), (0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_src8_A0), sizeof(struct pypy_forwarding_stub0))));
-
- push 8
- push OFFSET _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC
-$block11$34394:
- call _pypy_g_SemiSpaceGC_obtain_free_space
- ;; expected {32(%esp) | 20(%esp), 8(%esp), 12(%esp), 16(%esp) | %ebx, %edi, %ebp, 52(%esp), 56(%esp), 60(%esp)}
- add esp, 8
-
-; 1192 : l_v425 = RPyField((&pypy_g_ExcData), ed_exc_type);
-; 1193 : l_v426 = (l_v425 == NULL);
-
- cmp DWORD PTR _pypy_g_ExcData, 0
-
-; 1194 : if (!l_v426) {
-
- je SHORT $LN1 at pypy_g_foo
-
-; 1195 : l_v428 = NULL;
-
- xor esi, esi
-
-; 1196 : goto block6;
-
- jmp SHORT $block6$34416
-$LN1 at pypy_g_foo:
-
-; 1197 : }
-; 1198 : l_v336 = l_v424;
-
- mov esi, eax
-$block4$34395:
-
-; 1072 : goto block11;
-; 1073 : }
-; 1074 : l_v336 = l_v341;
-; 1075 : goto block4;
-; 1076 :
-; 1077 : block4:
-; 1078 : OP_INT_IS_TRUE(RUNNING_ON_LLINTERP, l_v346);
-; 1079 : if (l_v346) {
-; 1080 : goto block10;
-; 1081 : }
-; 1082 : goto block5;
-; 1083 :
-; 1084 : block5:
-; 1085 : l_v347 = (struct pypy_header0 *)l_v336;
-; 1086 : RPyField(l_v347, h_tid) = (GROUP_MEMBER_OFFSET(struct group_pypy_g_typeinfo_s, member1)|0L);
-; 1087 : OP_ADR_ADD(l_v336, (0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_src8_A0), sizeof(struct pypy_forwarding_stub0))), l_v349);
-
- lea ecx, DWORD PTR [esi+8]
- mov DWORD PTR [esi], 1
-$block5$34398:
-
-; 1088 : RPyField((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), ssgc_inst_free) = l_v349;
-
- mov DWORD PTR _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+12, ecx
-$block6$34416:
-
-; 1089 : OP_ADR_ADD(l_v336, 0, l_v351);
-; 1090 : l_v352 = (void*)l_v351;
-; 1091 : l_v428 = l_v352;
-; 1092 : goto block6;
-; 1093 :
-; 1094 : block6:
-; 1095 : l_v353 = (void*)l_a2_1;
-
- mov DWORD PTR _l_v353$[esp+24], ebx
-
-; 1096 : l_v354 = pypy_asm_gcroot(l_v353);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v353$[esp+24]
-
-; 1097 : l_a2_1 = l_v354; /* for moving GCs */
-; 1098 : l_v356 = (void*)l_a5_1;
-
- mov edx, DWORD PTR _l_a5_1$[esp+20]
- mov DWORD PTR _l_v356$[esp+24], edx
-
-; 1099 : l_v357 = pypy_asm_gcroot(l_v356);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v356$[esp+24]
-
-; 1100 : l_a5_1 = l_v357; /* for moving GCs */
-; 1101 : l_v359 = (void*)l_a6_1;
-
- mov eax, DWORD PTR _l_a6_1$[esp+20]
- mov DWORD PTR _l_v359$[esp+24], eax
-
-; 1102 : l_v360 = pypy_asm_gcroot(l_v359);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v359$[esp+24]
-
-; 1103 : l_a6_1 = l_v360; /* for moving GCs */
-; 1104 : l_v362 = (void*)l_a1_1;
-
- mov DWORD PTR _l_v362$[esp+24], ebp
-
-; 1105 : l_v363 = pypy_asm_gcroot(l_v362);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v362$[esp+24]
-
-; 1106 : l_a1_1 = l_v363; /* for moving GCs */
-; 1107 : l_v365 = (void*)l_a3_1;
-
- mov DWORD PTR _l_v365$[esp+24], edi
-
-; 1108 : l_v366 = pypy_asm_gcroot(l_v365);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v365$[esp+24]
-
-; 1109 : l_a3_1 = l_v366; /* for moving GCs */
-; 1110 : l_v368 = (void*)l_a4_1;
-
- mov ecx, DWORD PTR _l_a4_1$[esp+20]
- mov DWORD PTR _l_v368$[esp+24], ecx
-
-; 1111 : l_v369 = pypy_asm_gcroot(l_v368);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v368$[esp+24]
-
-; 1112 : l_a4_1 = l_v369; /* for moving GCs */
-; 1113 : l_v335 = (struct pypy_src8_A0 *)l_v428;
-; 1114 : l_v371 = (l_v335 != NULL);
-
- test esi, esi
-
-; 1115 : if (!l_v371) {
-
- je $LN75 at pypy_g_foo
-
-; 1116 : goto block1;
-; 1117 : }
-; 1118 : goto block7;
-; 1119 :
-; 1120 : block7:
-; 1121 : l_v372 = (struct pypy_object0 *)l_v335;
-; 1122 : RPyField(l_v372, o_typeptr) = (&pypy_g_src8_A_vtable.a_super);
-; 1123 : OP_INT_SUB(l_rec_1, 1L, l_v374);
-; 1124 : pypy_g_foo(l_v374, l_v335, l_v335, l_v335, l_v335, l_v335, l_v335);
-
- mov edx, DWORD PTR tv419[esp+24]
- push esi
- push esi
- push esi
- push esi
- push esi
- push esi
- push edx
-$block7$34426:
- mov DWORD PTR [esi+4], OFFSET _pypy_g_src8_A_vtable
- call _pypy_g_foo
- ;; expected {52(%esp) | 40(%esp), 28(%esp), 32(%esp), 36(%esp) | %ebx, %esi, %edi, %ebp, 72(%esp), 76(%esp), 80(%esp)}
- add esp, 28 ; 0000001cH
-
-; 1125 : l_v376 = (void*)l_a2_1;
-
- mov DWORD PTR _l_v376$[esp+24], ebx
-
-; 1126 : l_v377 = pypy_asm_gcroot(l_v376);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v376$[esp+24]
-
-; 1127 : l_a2_1 = l_v377; /* for moving GCs */
-; 1128 : l_v379 = (void*)l_a6_1;
-
- mov eax, DWORD PTR _l_a6_1$[esp+20]
- mov DWORD PTR _l_v379$[esp+24], eax
-
-; 1129 : l_v380 = pypy_asm_gcroot(l_v379);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v379$[esp+24]
-
-; 1130 : l_a6_1 = l_v380; /* for moving GCs */
-; 1131 : l_v382 = (void*)l_a1_1;
-
- mov DWORD PTR _l_v382$[esp+24], ebp
-
-; 1132 : l_v383 = pypy_asm_gcroot(l_v382);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v382$[esp+24]
-
-; 1133 : l_a1_1 = l_v383; /* for moving GCs */
-; 1134 : l_v385 = (void*)l_v335;
-
- mov DWORD PTR _l_v385$[esp+24], esi
-
-; 1135 : l_v386 = pypy_asm_gcroot(l_v385);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v385$[esp+24]
-
-; 1136 : l_v335 = l_v386; /* for moving GCs */
-; 1137 : l_v388 = (void*)l_a3_1;
-
- mov DWORD PTR _l_v388$[esp+24], edi
-
-; 1138 : l_v389 = pypy_asm_gcroot(l_v388);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v388$[esp+24]
-
-; 1139 : l_a3_1 = l_v389; /* for moving GCs */
-; 1140 : l_v391 = (void*)l_a5_1;
-
- mov ecx, DWORD PTR _l_a5_1$[esp+20]
- mov DWORD PTR _l_v391$[esp+24], ecx
-
-; 1141 : l_v392 = pypy_asm_gcroot(l_v391);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v391$[esp+24]
-
-; 1142 : l_a5_1 = l_v392; /* for moving GCs */
-; 1143 : l_v394 = (void*)l_a4_1;
-
- mov edx, DWORD PTR _l_a4_1$[esp+20]
- mov DWORD PTR _l_v394$[esp+24], edx
-
-; 1144 : l_v395 = pypy_asm_gcroot(l_v394);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v394$[esp+24]
-
-; 1145 : l_a4_1 = l_v395; /* for moving GCs */
-; 1146 : l_v397 = RPyField((&pypy_g_ExcData), ed_exc_type);
-; 1147 : l_v398 = (l_v397 == NULL);
-
- cmp DWORD PTR _pypy_g_ExcData, 0
-
-; 1148 : if (!l_v398) {
-
- jne $LN75 at pypy_g_foo
-
-; 1149 : goto block1;
-; 1150 : }
-; 1151 : goto block8;
-; 1152 :
-; 1153 : block8:
-; 1154 : OP_INT_SUB(l_rec_1, 1L, l_v399);
-; 1155 : pypy_g_foo(l_v399, l_v335, l_v335, l_v335, l_v335, l_v335, l_v335);
-
- mov eax, DWORD PTR tv419[esp+24]
- push esi
- push esi
- push esi
- push esi
- push esi
- push esi
- push eax
-$block8$34437:
- call _pypy_g_foo
- ;; expected {52(%esp) | 40(%esp), 28(%esp), 32(%esp), 36(%esp) | %ebx, %edi, %ebp, 72(%esp), 76(%esp), 80(%esp)}
- add esp, 28 ; 0000001cH
-
-; 1156 : l_v401 = (void*)l_a2_1;
-
- mov DWORD PTR _l_v401$[esp+24], ebx
-
-; 1157 : l_v402 = pypy_asm_gcroot(l_v401);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v401$[esp+24]
-
-; 1158 : l_a2_1 = l_v402; /* for moving GCs */
-; 1159 : l_v404 = (void*)l_a1_1;
-
- mov DWORD PTR _l_v404$[esp+24], ebp
-
-; 1160 : l_v405 = pypy_asm_gcroot(l_v404);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v404$[esp+24]
-
-; 1161 : l_a1_1 = l_v405; /* for moving GCs */
-; 1162 : l_v407 = (void*)l_a3_1;
-
- mov DWORD PTR _l_v407$[esp+24], edi
-
-; 1163 : l_v408 = pypy_asm_gcroot(l_v407);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v407$[esp+24]
-
-; 1164 : l_a3_1 = l_v408; /* for moving GCs */
-; 1165 : l_v410 = (void*)l_a6_1;
-
- mov ecx, DWORD PTR _l_a6_1$[esp+20]
- mov DWORD PTR _l_v410$[esp+24], ecx
-
-; 1166 : l_v411 = pypy_asm_gcroot(l_v410);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v410$[esp+24]
-
-; 1167 : l_a6_1 = l_v411; /* for moving GCs */
-; 1168 : l_v413 = (void*)l_a5_1;
-
- mov edx, DWORD PTR _l_a5_1$[esp+20]
- mov DWORD PTR _l_v413$[esp+24], edx
-
-; 1169 : l_v414 = pypy_asm_gcroot(l_v413);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v413$[esp+24]
-
-; 1170 : l_a5_1 = l_v414; /* for moving GCs */
-; 1171 : l_v416 = (void*)l_a4_1;
-
- mov esi, DWORD PTR _l_a4_1$[esp+20]
- mov DWORD PTR _l_v416$[esp+24], esi
-
-; 1172 : l_v417 = pypy_asm_gcroot(l_v416);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v416$[esp+24]
-
-; 1173 : l_a4_1 = l_v417; /* for moving GCs */
-; 1174 : l_v419 = RPyField((&pypy_g_ExcData), ed_exc_type);
-; 1175 : l_v420 = (l_v419 == NULL);
-
- cmp DWORD PTR _pypy_g_ExcData, 0
-
-; 1176 : if (!l_v420) {
-
- jne SHORT $LN75 at pypy_g_foo
-
-; 1177 : goto block1;
-; 1178 : }
-; 1179 : goto block9;
-; 1180 :
-; 1181 : block9:
-; 1182 : OP_INT_SUB(l_rec_1, 1L, l_v421);
-; 1183 : pypy_g_foo(l_v421, l_a6_1, l_a5_1, l_a4_1, l_a3_1, l_a2_1, l_a1_1);
-
- sub DWORD PTR _l_rec_1$[esp+20], 1
- sub DWORD PTR tv419[esp+24], 1
- cmp DWORD PTR _l_rec_1$[esp+20], 0
- mov eax, ebp
- mov ebp, DWORD PTR _l_a6_1$[esp+20]
- mov ecx, ebx
- mov ebx, DWORD PTR _l_a5_1$[esp+20]
- mov edx, edi
-$block9$34446:
- mov edi, esi
- mov DWORD PTR _l_a4_1$[esp+20], edx
- mov DWORD PTR _l_a5_1$[esp+20], ecx
- mov DWORD PTR _l_a6_1$[esp+20], eax
-$block0_1$34376:
- jg $LL63 at pypy_g_foo
- pop esi
- pop edi
- pop ebp
- pop ebx
-
-; 1199 : goto block4;
-; 1200 : }
-
- add esp, 8
- ret 0
-$LN71 at pypy_g_foo:
-$block0$40426:
-$block0$40437:
-$block0$40434:
-$block2$40415:
-
-; 1048 : goto block2;
-; 1049 : }
-; 1050 : goto block1;
-; 1051 :
-; 1052 : block1:
-; 1053 : RPY_DEBUG_RETURN();
-; 1054 : return /* nothing */;
-; 1055 :
-; 1056 : block2:
-; 1057 : pypy_g_stack_check___();
-
- mov DWORD PTR _pypy_g_ExcData, OFFSET _pypy_g_exceptions_RuntimeError_vtable
- mov DWORD PTR _pypy_g_ExcData+4, OFFSET _pypy_g_exceptions_RuntimeError
-$block1$40435:
-$block1$40438:
-$block1$40427:
-$LN75 at pypy_g_foo:
- pop esi
- pop edi
- pop ebp
- pop ebx
-$block1$34379:
-
-; 1199 : goto block4;
-; 1200 : }
-
- add esp, 8
- ret 0
-_pypy_g_foo ENDP
+; Function compile flags: /Ogtpy
+; COMDAT _pypy_g_foo
+_TEXT SEGMENT
+tv419 = -8 ; size = 4
+_l_v416$ = -4 ; size = 4
+_l_v413$ = -4 ; size = 4
+_l_v410$ = -4 ; size = 4
+_l_v407$ = -4 ; size = 4
+_l_v404$ = -4 ; size = 4
+_l_v401$ = -4 ; size = 4
+_l_v394$ = -4 ; size = 4
+_l_v391$ = -4 ; size = 4
+_l_v388$ = -4 ; size = 4
+_l_v385$ = -4 ; size = 4
+_l_v382$ = -4 ; size = 4
+_l_v379$ = -4 ; size = 4
+_l_v376$ = -4 ; size = 4
+_l_v368$ = -4 ; size = 4
+_l_v365$ = -4 ; size = 4
+_l_v362$ = -4 ; size = 4
+_l_v359$ = -4 ; size = 4
+_l_v356$ = -4 ; size = 4
+_l_v353$ = -4 ; size = 4
+_local$40423 = 8 ; size = 1
+_l_rec_1$ = 8 ; size = 4
+_l_a1_1$ = 12 ; size = 4
+_l_a2_1$ = 16 ; size = 4
+_l_a3_1$ = 20 ; size = 4
+_l_a4_1$ = 24 ; size = 4
+_l_a5_1$ = 28 ; size = 4
+_l_a6_1$ = 32 ; size = 4
+_pypy_g_foo PROC ; COMDAT
+
+; 1026 : bool_t l_v337; bool_t l_v340; bool_t l_v345; bool_t l_v346;
+; 1027 : bool_t l_v371; bool_t l_v398; bool_t l_v420; bool_t l_v426;
+; 1028 : long l_v342; long l_v344; long l_v374; long l_v399; long l_v421;
+; 1029 : struct pypy_header0 *l_v347; struct pypy_object0 *l_v372;
+; 1030 : struct pypy_object_vtable0 *l_v339;
+; 1031 : struct pypy_object_vtable0 *l_v397;
+; 1032 : struct pypy_object_vtable0 *l_v419;
+; 1033 : struct pypy_object_vtable0 *l_v425; struct pypy_src8_A0 *l_v335;
+; 1034 : void* l_v336; void* l_v341; void* l_v343; void* l_v349; void* l_v351;
+; 1035 : void* l_v352; void* l_v353; void* l_v354; void* l_v356; void* l_v357;
+; 1036 : void* l_v359; void* l_v360; void* l_v362; void* l_v363; void* l_v365;
+; 1037 : void* l_v366; void* l_v368; void* l_v369; void* l_v376; void* l_v377;
+; 1038 : void* l_v379; void* l_v380; void* l_v382; void* l_v383; void* l_v385;
+; 1039 : void* l_v386; void* l_v388; void* l_v389; void* l_v391; void* l_v392;
+; 1040 : void* l_v394; void* l_v395; void* l_v401; void* l_v402; void* l_v404;
+; 1041 : void* l_v405; void* l_v407; void* l_v408; void* l_v410; void* l_v411;
+; 1042 : void* l_v413; void* l_v414; void* l_v416; void* l_v417; void* l_v424;
+; 1043 : void* l_v428;
+; 1044 :
+; 1045 : block0:
+; 1046 : OP_INT_GT(l_rec_1, 0L, l_v337);
+
+ mov eax, DWORD PTR _l_rec_1$[esp-4]
+ sub esp, 8
+ test eax, eax
+$block0$34376:
+
+; 1047 : if (l_v337) {
+
+ jle $block1$34379
+ push ebx
+ mov ebx, DWORD PTR _l_a2_1$[esp+8]
+ push ebp
+ mov ebp, DWORD PTR _l_a1_1$[esp+12]
+ push edi
+ mov edi, DWORD PTR _l_a3_1$[esp+16]
+ add eax, -1
+ mov DWORD PTR tv419[esp+20], eax
+ push esi
+ npad 10
+$LL63 at pypy_g_foo:
+
+; 1048 : goto block2;
+; 1049 : }
+; 1050 : goto block1;
+; 1051 :
+; 1052 : block1:
+; 1053 : RPY_DEBUG_RETURN();
+; 1054 : return /* nothing */;
+; 1055 :
+; 1056 : block2:
+; 1057 : pypy_g_stack_check___();
+
+ lea eax, DWORD PTR _local$40423[esp+20]
+ sub eax, DWORD PTR __LLstacktoobig_stack_base_pointer
+$block0$40413:
+ cmp eax, DWORD PTR __LLstacktoobig_stack_min
+$block2$34378:
+ jl SHORT $LN16 at pypy_g_foo
+ cmp eax, DWORD PTR __LLstacktoobig_stack_max
+ jle SHORT $LN17 at pypy_g_foo
+$LN16 at pypy_g_foo:
+ call _LL_stack_too_big_slowpath
+ ;; expected {24(%esp) | 12(%esp), (%esp), 4(%esp), 8(%esp) | %ebx, %edi, %ebp, 44(%esp), 48(%esp), 52(%esp)}
+ test eax, eax
+ jne $LN71 at pypy_g_foo
+$LN17 at pypy_g_foo:
+$block1$40416:
+
+; 1058 : l_v339 = RPyField((&pypy_g_ExcData), ed_exc_type);
+; 1059 : l_v340 = (l_v339 == NULL);
+
+ cmp DWORD PTR _pypy_g_ExcData, 0
+
+; 1060 : if (!l_v340) {
+
+ jne $LN75 at pypy_g_foo
+
+; 1061 : goto block1;
+; 1062 : }
+; 1063 : goto block3;
+; 1064 :
+; 1065 : block3:
+; 1066 : l_v341 = RPyField((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), ssgc_inst_free);
+
+ mov esi, DWORD PTR _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+12
+
+; 1067 : OP_RAW_MALLOC_USAGE((0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_src8_A0), sizeof(struct pypy_forwarding_stub0))), l_v342);
+; 1068 : l_v343 = RPyField((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), ssgc_inst_top_of_space);
+; 1069 : OP_ADR_DELTA(l_v343, l_v341, l_v344);
+
+ mov eax, DWORD PTR _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+80
+ sub eax, esi
+
+; 1070 : OP_INT_GT(l_v342, l_v344, l_v345);
+
+ cmp eax, 8
+$block3$34382:
+
+; 1071 : if (l_v345) {
+
+ jge SHORT $block4$34395
+
+; 1184 : goto block1;
+; 1185 :
+; 1186 : block10:
+; 1187 : abort(); /* debug_llinterpcall should be unreachable */
+; 1188 : goto block5;
+; 1189 :
+; 1190 : block11:
+; 1191 : l_v424 = pypy_g_SemiSpaceGC_obtain_free_space((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), (0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_src8_A0), sizeof(struct pypy_forwarding_stub0))));
+
+ push 8
+ push OFFSET _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC
+$block11$34394:
+ call _pypy_g_SemiSpaceGC_obtain_free_space
+ ;; expected {32(%esp) | 20(%esp), 8(%esp), 12(%esp), 16(%esp) | %ebx, %edi, %ebp, 52(%esp), 56(%esp), 60(%esp)}
+ add esp, 8
+
+; 1192 : l_v425 = RPyField((&pypy_g_ExcData), ed_exc_type);
+; 1193 : l_v426 = (l_v425 == NULL);
+
+ cmp DWORD PTR _pypy_g_ExcData, 0
+
+; 1194 : if (!l_v426) {
+
+ je SHORT $LN1 at pypy_g_foo
+
+; 1195 : l_v428 = NULL;
+
+ xor esi, esi
+
+; 1196 : goto block6;
+
+ jmp SHORT $block6$34416
+$LN1 at pypy_g_foo:
+
+; 1197 : }
+; 1198 : l_v336 = l_v424;
+
+ mov esi, eax
+$block4$34395:
+
+; 1072 : goto block11;
+; 1073 : }
+; 1074 : l_v336 = l_v341;
+; 1075 : goto block4;
+; 1076 :
+; 1077 : block4:
+; 1078 : OP_INT_IS_TRUE(RUNNING_ON_LLINTERP, l_v346);
+; 1079 : if (l_v346) {
+; 1080 : goto block10;
+; 1081 : }
+; 1082 : goto block5;
+; 1083 :
+; 1084 : block5:
+; 1085 : l_v347 = (struct pypy_header0 *)l_v336;
+; 1086 : RPyField(l_v347, h_tid) = (GROUP_MEMBER_OFFSET(struct group_pypy_g_typeinfo_s, member1)|0L);
+; 1087 : OP_ADR_ADD(l_v336, (0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_src8_A0), sizeof(struct pypy_forwarding_stub0))), l_v349);
+
+ lea ecx, DWORD PTR [esi+8]
+ mov DWORD PTR [esi], 1
+$block5$34398:
+
+; 1088 : RPyField((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC), ssgc_inst_free) = l_v349;
+
+ mov DWORD PTR _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+12, ecx
+$block6$34416:
+
+; 1089 : OP_ADR_ADD(l_v336, 0, l_v351);
+; 1090 : l_v352 = (void*)l_v351;
+; 1091 : l_v428 = l_v352;
+; 1092 : goto block6;
+; 1093 :
+; 1094 : block6:
+; 1095 : l_v353 = (void*)l_a2_1;
+
+ mov DWORD PTR _l_v353$[esp+24], ebx
+
+; 1096 : l_v354 = pypy_asm_gcroot(l_v353);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v353$[esp+24]
+
+; 1097 : l_a2_1 = l_v354; /* for moving GCs */
+; 1098 : l_v356 = (void*)l_a5_1;
+
+ mov edx, DWORD PTR _l_a5_1$[esp+20]
+ mov DWORD PTR _l_v356$[esp+24], edx
+
+; 1099 : l_v357 = pypy_asm_gcroot(l_v356);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v356$[esp+24]
+
+; 1100 : l_a5_1 = l_v357; /* for moving GCs */
+; 1101 : l_v359 = (void*)l_a6_1;
+
+ mov eax, DWORD PTR _l_a6_1$[esp+20]
+ mov DWORD PTR _l_v359$[esp+24], eax
+
+; 1102 : l_v360 = pypy_asm_gcroot(l_v359);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v359$[esp+24]
+
+; 1103 : l_a6_1 = l_v360; /* for moving GCs */
+; 1104 : l_v362 = (void*)l_a1_1;
+
+ mov DWORD PTR _l_v362$[esp+24], ebp
+
+; 1105 : l_v363 = pypy_asm_gcroot(l_v362);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v362$[esp+24]
+
+; 1106 : l_a1_1 = l_v363; /* for moving GCs */
+; 1107 : l_v365 = (void*)l_a3_1;
+
+ mov DWORD PTR _l_v365$[esp+24], edi
+
+; 1108 : l_v366 = pypy_asm_gcroot(l_v365);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v365$[esp+24]
+
+; 1109 : l_a3_1 = l_v366; /* for moving GCs */
+; 1110 : l_v368 = (void*)l_a4_1;
+
+ mov ecx, DWORD PTR _l_a4_1$[esp+20]
+ mov DWORD PTR _l_v368$[esp+24], ecx
+
+; 1111 : l_v369 = pypy_asm_gcroot(l_v368);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v368$[esp+24]
+
+; 1112 : l_a4_1 = l_v369; /* for moving GCs */
+; 1113 : l_v335 = (struct pypy_src8_A0 *)l_v428;
+; 1114 : l_v371 = (l_v335 != NULL);
+
+ test esi, esi
+
+; 1115 : if (!l_v371) {
+
+ je $LN75 at pypy_g_foo
+
+; 1116 : goto block1;
+; 1117 : }
+; 1118 : goto block7;
+; 1119 :
+; 1120 : block7:
+; 1121 : l_v372 = (struct pypy_object0 *)l_v335;
+; 1122 : RPyField(l_v372, o_typeptr) = (&pypy_g_src8_A_vtable.a_super);
+; 1123 : OP_INT_SUB(l_rec_1, 1L, l_v374);
+; 1124 : pypy_g_foo(l_v374, l_v335, l_v335, l_v335, l_v335, l_v335, l_v335);
+
+ mov edx, DWORD PTR tv419[esp+24]
+ push esi
+ push esi
+ push esi
+ push esi
+ push esi
+ push esi
+ push edx
+$block7$34426:
+ mov DWORD PTR [esi+4], OFFSET _pypy_g_src8_A_vtable
+ call _pypy_g_foo
+ ;; expected {52(%esp) | 40(%esp), 28(%esp), 32(%esp), 36(%esp) | %ebx, %esi, %edi, %ebp, 72(%esp), 76(%esp), 80(%esp)}
+ add esp, 28 ; 0000001cH
+
+; 1125 : l_v376 = (void*)l_a2_1;
+
+ mov DWORD PTR _l_v376$[esp+24], ebx
+
+; 1126 : l_v377 = pypy_asm_gcroot(l_v376);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v376$[esp+24]
+
+; 1127 : l_a2_1 = l_v377; /* for moving GCs */
+; 1128 : l_v379 = (void*)l_a6_1;
+
+ mov eax, DWORD PTR _l_a6_1$[esp+20]
+ mov DWORD PTR _l_v379$[esp+24], eax
+
+; 1129 : l_v380 = pypy_asm_gcroot(l_v379);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v379$[esp+24]
+
+; 1130 : l_a6_1 = l_v380; /* for moving GCs */
+; 1131 : l_v382 = (void*)l_a1_1;
+
+ mov DWORD PTR _l_v382$[esp+24], ebp
+
+; 1132 : l_v383 = pypy_asm_gcroot(l_v382);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v382$[esp+24]
+
+; 1133 : l_a1_1 = l_v383; /* for moving GCs */
+; 1134 : l_v385 = (void*)l_v335;
+
+ mov DWORD PTR _l_v385$[esp+24], esi
+
+; 1135 : l_v386 = pypy_asm_gcroot(l_v385);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v385$[esp+24]
+
+; 1136 : l_v335 = l_v386; /* for moving GCs */
+; 1137 : l_v388 = (void*)l_a3_1;
+
+ mov DWORD PTR _l_v388$[esp+24], edi
+
+; 1138 : l_v389 = pypy_asm_gcroot(l_v388);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v388$[esp+24]
+
+; 1139 : l_a3_1 = l_v389; /* for moving GCs */
+; 1140 : l_v391 = (void*)l_a5_1;
+
+ mov ecx, DWORD PTR _l_a5_1$[esp+20]
+ mov DWORD PTR _l_v391$[esp+24], ecx
+
+; 1141 : l_v392 = pypy_asm_gcroot(l_v391);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v391$[esp+24]
+
+; 1142 : l_a5_1 = l_v392; /* for moving GCs */
+; 1143 : l_v394 = (void*)l_a4_1;
+
+ mov edx, DWORD PTR _l_a4_1$[esp+20]
+ mov DWORD PTR _l_v394$[esp+24], edx
+
+; 1144 : l_v395 = pypy_asm_gcroot(l_v394);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v394$[esp+24]
+
+; 1145 : l_a4_1 = l_v395; /* for moving GCs */
+; 1146 : l_v397 = RPyField((&pypy_g_ExcData), ed_exc_type);
+; 1147 : l_v398 = (l_v397 == NULL);
+
+ cmp DWORD PTR _pypy_g_ExcData, 0
+
+; 1148 : if (!l_v398) {
+
+ jne $LN75 at pypy_g_foo
+
+; 1149 : goto block1;
+; 1150 : }
+; 1151 : goto block8;
+; 1152 :
+; 1153 : block8:
+; 1154 : OP_INT_SUB(l_rec_1, 1L, l_v399);
+; 1155 : pypy_g_foo(l_v399, l_v335, l_v335, l_v335, l_v335, l_v335, l_v335);
+
+ mov eax, DWORD PTR tv419[esp+24]
+ push esi
+ push esi
+ push esi
+ push esi
+ push esi
+ push esi
+ push eax
+$block8$34437:
+ call _pypy_g_foo
+ ;; expected {52(%esp) | 40(%esp), 28(%esp), 32(%esp), 36(%esp) | %ebx, %edi, %ebp, 72(%esp), 76(%esp), 80(%esp)}
+ add esp, 28 ; 0000001cH
+
+; 1156 : l_v401 = (void*)l_a2_1;
+
+ mov DWORD PTR _l_v401$[esp+24], ebx
+
+; 1157 : l_v402 = pypy_asm_gcroot(l_v401);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v401$[esp+24]
+
+; 1158 : l_a2_1 = l_v402; /* for moving GCs */
+; 1159 : l_v404 = (void*)l_a1_1;
+
+ mov DWORD PTR _l_v404$[esp+24], ebp
+
+; 1160 : l_v405 = pypy_asm_gcroot(l_v404);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v404$[esp+24]
+
+; 1161 : l_a1_1 = l_v405; /* for moving GCs */
+; 1162 : l_v407 = (void*)l_a3_1;
+
+ mov DWORD PTR _l_v407$[esp+24], edi
+
+; 1163 : l_v408 = pypy_asm_gcroot(l_v407);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v407$[esp+24]
+
+; 1164 : l_a3_1 = l_v408; /* for moving GCs */
+; 1165 : l_v410 = (void*)l_a6_1;
+
+ mov ecx, DWORD PTR _l_a6_1$[esp+20]
+ mov DWORD PTR _l_v410$[esp+24], ecx
+
+; 1166 : l_v411 = pypy_asm_gcroot(l_v410);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v410$[esp+24]
+
+; 1167 : l_a6_1 = l_v411; /* for moving GCs */
+; 1168 : l_v413 = (void*)l_a5_1;
+
+ mov edx, DWORD PTR _l_a5_1$[esp+20]
+ mov DWORD PTR _l_v413$[esp+24], edx
+
+; 1169 : l_v414 = pypy_asm_gcroot(l_v413);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v413$[esp+24]
+
+; 1170 : l_a5_1 = l_v414; /* for moving GCs */
+; 1171 : l_v416 = (void*)l_a4_1;
+
+ mov esi, DWORD PTR _l_a4_1$[esp+20]
+ mov DWORD PTR _l_v416$[esp+24], esi
+
+; 1172 : l_v417 = pypy_asm_gcroot(l_v416);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v416$[esp+24]
+
+; 1173 : l_a4_1 = l_v417; /* for moving GCs */
+; 1174 : l_v419 = RPyField((&pypy_g_ExcData), ed_exc_type);
+; 1175 : l_v420 = (l_v419 == NULL);
+
+ cmp DWORD PTR _pypy_g_ExcData, 0
+
+; 1176 : if (!l_v420) {
+
+ jne SHORT $LN75 at pypy_g_foo
+
+; 1177 : goto block1;
+; 1178 : }
+; 1179 : goto block9;
+; 1180 :
+; 1181 : block9:
+; 1182 : OP_INT_SUB(l_rec_1, 1L, l_v421);
+; 1183 : pypy_g_foo(l_v421, l_a6_1, l_a5_1, l_a4_1, l_a3_1, l_a2_1, l_a1_1);
+
+ sub DWORD PTR _l_rec_1$[esp+20], 1
+ sub DWORD PTR tv419[esp+24], 1
+ cmp DWORD PTR _l_rec_1$[esp+20], 0
+ mov eax, ebp
+ mov ebp, DWORD PTR _l_a6_1$[esp+20]
+ mov ecx, ebx
+ mov ebx, DWORD PTR _l_a5_1$[esp+20]
+ mov edx, edi
+$block9$34446:
+ mov edi, esi
+ mov DWORD PTR _l_a4_1$[esp+20], edx
+ mov DWORD PTR _l_a5_1$[esp+20], ecx
+ mov DWORD PTR _l_a6_1$[esp+20], eax
+$block0_1$34376:
+ jg $LL63 at pypy_g_foo
+ pop esi
+ pop edi
+ pop ebp
+ pop ebx
+
+; 1199 : goto block4;
+; 1200 : }
+
+ add esp, 8
+ ret 0
+$LN71 at pypy_g_foo:
+$block0$40426:
+$block0$40437:
+$block0$40434:
+$block2$40415:
+
+; 1048 : goto block2;
+; 1049 : }
+; 1050 : goto block1;
+; 1051 :
+; 1052 : block1:
+; 1053 : RPY_DEBUG_RETURN();
+; 1054 : return /* nothing */;
+; 1055 :
+; 1056 : block2:
+; 1057 : pypy_g_stack_check___();
+
+ mov DWORD PTR _pypy_g_ExcData, OFFSET _pypy_g_exceptions_RuntimeError_vtable
+ mov DWORD PTR _pypy_g_ExcData+4, OFFSET _pypy_g_exceptions_RuntimeError
+$block1$40435:
+$block1$40438:
+$block1$40427:
+$LN75 at pypy_g_foo:
+ pop esi
+ pop edi
+ pop ebp
+ pop ebx
+$block1$34379:
+
+; 1199 : goto block4;
+; 1200 : }
+
+ add esp, 8
+ ret 0
+_pypy_g_foo ENDP
Modified: pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track_switch0.s
==============================================================================
--- pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track_switch0.s (original)
+++ pypy/branch/msvc-asmgcroot/pypy/translator/c/gcc/test/msvc/track_switch0.s Thu Nov 5 23:13:47 2009
@@ -1,420 +1,420 @@
-; Function compile flags: /Odtpy
-; COMDAT _pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root
-_TEXT SEGMENT
-tv138 = -116 ; size = 4
-_l_v271568$ = -109 ; size = 1
-_l_v271567$ = -108 ; size = 4
-_l_v271575$ = -104 ; size = 4
-_l_v271551$ = -97 ; size = 1
-_l_v271579$ = -96 ; size = 4
-_l_v271576$ = -89 ; size = 1
-_l_v271572$ = -88 ; size = 4
-_l_v271583$ = -84 ; size = 4
-_l_v271556$ = -80 ; size = 4
-_l_v271559$ = -76 ; size = 4
-_l_v271544$ = -72 ; size = 4
-_l_v271545$ = -68 ; size = 4
-_l_v271580$ = -64 ; size = 4
-_l_v271557$ = -60 ; size = 4
-_l_v271581$ = -56 ; size = 4
-_l_v271553$ = -52 ; size = 4
-_l_v271570$ = -48 ; size = 4
-_l_v271554$ = -42 ; size = 1
-_l_v271565$ = -41 ; size = 1
-_l_v271558$ = -40 ; size = 4
-_l_v271562$ = -33 ; size = 1
-_l_v271561$ = -32 ; size = 4
-_l_v271547$ = -28 ; size = 4
-_l_v271548$ = -24 ; size = 4
-_l_v271573$ = -18 ; size = 1
-_l_v271546$ = -17 ; size = 1
-_l_v271582$ = -16 ; size = 4
-_l_v271550$ = -12 ; size = 4
-_l_v271564$ = -8 ; size = 4
-_l_v271578$ = -4 ; size = 4
-_l_self_596$ = 8 ; size = 4
-_l_scope_w_259$ = 12 ; size = 4
-_pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root PROC ; COMDAT
-
-; 15629: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root(struct pypy_pypy_interpreter_gateway_BuiltinActivation0 *l_self_596, struct pypy_array1 *l_scope_w_259) {
-
- push ebp
- mov ebp, esp
- sub esp, 116 ; 00000074H
-$block0$211591:
-
-; 15630: bool_t l_v271551; bool_t l_v271554; bool_t l_v271562;
-; 15631: bool_t l_v271565; bool_t l_v271568; bool_t l_v271573;
-; 15632: bool_t l_v271576; char l_v271546; long l_v271550; long l_v271553;
-; 15633: long l_v271564; long l_v271567; long l_v271572; long l_v271575;
-; 15634: struct pypy_object0 *l_v271556; struct pypy_object0 *l_v271570;
-; 15635: struct pypy_object0 *l_v271578;
-; 15636: struct pypy_object_vtable0 *l_v271561;
-; 15637: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271544;
-; 15638: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271545;
-; 15639: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271557;
-; 15640: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271579;
-; 15641: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271580;
-; 15642: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271581;
-; 15643: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271582;
-; 15644: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271583;
-; 15645: struct pypy_pypy_interpreter_gateway_BuiltinActivation_UwS_UCD0 *l_v271548;
-; 15646: struct pypy_pypy_module_unicodedata_interp_ucd_UCD0 *l_v271547;
-; 15647: void* l_v271558; void* l_v271559;
-; 15648:
-; 15649: block0:
-; 15650: l_v271548 = (struct pypy_pypy_interpreter_gateway_BuiltinActivation_UwS_UCD0 *)l_self_596;
-
- mov eax, DWORD PTR _l_self_596$[ebp]
- mov DWORD PTR _l_v271548$[ebp], eax
-
-; 15651: l_v271546 = RPyField(l_v271548, bausucdoswrwr_inst_behavior);
-
- mov ecx, DWORD PTR _l_v271548$[ebp]
- mov dl, BYTE PTR [ecx+8]
- mov BYTE PTR _l_v271546$[ebp], dl
-
-; 15652: RPyAssert(1, "unexpectedly negative list getitem index");
-; 15653: l_v271550 = l_scope_w_259->length;
-
- mov eax, DWORD PTR _l_scope_w_259$[ebp]
- mov ecx, DWORD PTR [eax+4]
- mov DWORD PTR _l_v271550$[ebp], ecx
-
-; 15654: OP_INT_LT(0L, l_v271550, l_v271551);
-
- xor edx, edx
- cmp DWORD PTR _l_v271550$[ebp], 0
- setg dl
- mov BYTE PTR _l_v271551$[ebp], dl
-
-; 15655: RPyAssert(l_v271551, "list getitem index out of bound");
-; 15656: l_v271553 = l_scope_w_259->length;
-
- mov eax, DWORD PTR _l_scope_w_259$[ebp]
- mov ecx, DWORD PTR [eax+4]
- mov DWORD PTR _l_v271553$[ebp], ecx
-
-; 15657: OP_INT_LT(0L, l_v271553, l_v271554);
-
- xor edx, edx
- cmp DWORD PTR _l_v271553$[ebp], 0
- setg dl
- mov BYTE PTR _l_v271554$[ebp], dl
-
-; 15658: RPyAssert(l_v271554, "fixed getitem out of bounds");
-; 15659: l_v271556 = RPyItem(l_scope_w_259, 0L);
-
- mov eax, DWORD PTR _l_scope_w_259$[ebp]
- mov ecx, DWORD PTR [eax+8]
- mov DWORD PTR _l_v271556$[ebp], ecx
-
-; 15660: l_v271557 = (struct pypy_pypy_interpreter_baseobjspace_W_Root0 *)l_v271556;
-
- mov edx, DWORD PTR _l_v271556$[ebp]
- mov DWORD PTR _l_v271557$[ebp], edx
-
-; 15661: l_v271547 = pypy_g_interp_w__UCD(l_v271557, 0);
-
- push 0
- mov eax, DWORD PTR _l_v271557$[ebp]
- push eax
- call _pypy_g_interp_w__UCD
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | 12(%ebp)}
- add esp, 8
- mov DWORD PTR _l_v271547$[ebp], eax
-
-; 15662: l_v271558 = (void*)l_scope_w_259;
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov DWORD PTR _l_v271558$[ebp], ecx
-
-; 15663: l_v271559 = pypy_asm_gcroot(l_v271558);
-
- mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
- imul eax, DWORD PTR _l_v271558$[ebp]
- mov edx, DWORD PTR _l_v271558$[ebp]
- mov DWORD PTR _l_v271559$[ebp], edx
-
-; 15664: l_scope_w_259 = l_v271559; /* for moving GCs */
-
- mov eax, DWORD PTR _l_v271559$[ebp]
- mov DWORD PTR _l_scope_w_259$[ebp], eax
-
-; 15665: l_v271561 = RPyField((&pypy_g_ExcData), ed_exc_type);
-
- mov ecx, DWORD PTR _pypy_g_ExcData
- mov DWORD PTR _l_v271561$[ebp], ecx
-
-; 15666: l_v271562 = (l_v271561 == NULL);
-
- xor edx, edx
- cmp DWORD PTR _l_v271561$[ebp], 0
- sete dl
- mov BYTE PTR _l_v271562$[ebp], dl
-
-; 15667: if (!l_v271562) {
-
- movzx eax, BYTE PTR _l_v271562$[ebp]
- test eax, eax
- jne SHORT $block1$211600
-
-; 15668: l_v271583 = ((struct pypy_pypy_interpreter_baseobjspace_W_Root0 *) NULL);
-
- mov DWORD PTR _l_v271583$[ebp], 0
-
-; 15669: goto block3;
-
- jmp $block3$211599
-$block1$211600:
-
-; 15670: }
-; 15671: goto block1;
-; 15672:
-; 15673: block1:
-; 15674: RPyAssert(1, "unexpectedly negative list getitem index");
-; 15675: l_v271564 = l_scope_w_259->length;
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov edx, DWORD PTR [ecx+4]
- mov DWORD PTR _l_v271564$[ebp], edx
-
-; 15676: OP_INT_LT(1L, l_v271564, l_v271565);
-
- xor eax, eax
- cmp DWORD PTR _l_v271564$[ebp], 1
- setg al
- mov BYTE PTR _l_v271565$[ebp], al
-
-; 15677: RPyAssert(l_v271565, "list getitem index out of bound");
-; 15678: l_v271567 = l_scope_w_259->length;
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov edx, DWORD PTR [ecx+4]
- mov DWORD PTR _l_v271567$[ebp], edx
-
-; 15679: OP_INT_LT(1L, l_v271567, l_v271568);
-
- xor eax, eax
- cmp DWORD PTR _l_v271567$[ebp], 1
- setg al
- mov BYTE PTR _l_v271568$[ebp], al
-
-; 15680: RPyAssert(l_v271568, "fixed getitem out of bounds");
-; 15681: l_v271570 = RPyItem(l_scope_w_259, 1L);
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov edx, DWORD PTR [ecx+12]
- mov DWORD PTR _l_v271570$[ebp], edx
-
-; 15682: l_v271544 = (struct pypy_pypy_interpreter_baseobjspace_W_Root0 *)l_v271570;
-
- mov eax, DWORD PTR _l_v271570$[ebp]
- mov DWORD PTR _l_v271544$[ebp], eax
-
-; 15683: RPyAssert(1, "unexpectedly negative list getitem index");
-; 15684: l_v271572 = l_scope_w_259->length;
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov edx, DWORD PTR [ecx+4]
- mov DWORD PTR _l_v271572$[ebp], edx
-
-; 15685: OP_INT_LT(2L, l_v271572, l_v271573);
-
- xor eax, eax
- cmp DWORD PTR _l_v271572$[ebp], 2
- setg al
- mov BYTE PTR _l_v271573$[ebp], al
-
-; 15686: RPyAssert(l_v271573, "list getitem index out of bound");
-; 15687: l_v271575 = l_scope_w_259->length;
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov edx, DWORD PTR [ecx+4]
- mov DWORD PTR _l_v271575$[ebp], edx
-
-; 15688: OP_INT_LT(2L, l_v271575, l_v271576);
-
- xor eax, eax
- cmp DWORD PTR _l_v271575$[ebp], 2
- setg al
- mov BYTE PTR _l_v271576$[ebp], al
-
-; 15689: RPyAssert(l_v271576, "fixed getitem out of bounds");
-; 15690: l_v271578 = RPyItem(l_scope_w_259, 2L);
-
- mov ecx, DWORD PTR _l_scope_w_259$[ebp]
- mov edx, DWORD PTR [ecx+16]
- mov DWORD PTR _l_v271578$[ebp], edx
-
-; 15691: l_v271545 = (struct pypy_pypy_interpreter_baseobjspace_W_Root0 *)l_v271578;
-
- mov eax, DWORD PTR _l_v271578$[ebp]
- mov DWORD PTR _l_v271545$[ebp], eax
-
-; 15692: switch (l_v271546) {
-
- movsx ecx, BYTE PTR _l_v271546$[ebp]
- mov DWORD PTR tv138[ebp], ecx
- cmp DWORD PTR tv138[ebp], 3
- ja SHORT $LN1 at pypy_g_Bui@2
- mov edx, DWORD PTR tv138[ebp]
- jmp DWORD PTR $LN14 at pypy_g_Bui@2[edx*4]
-$LN5 at pypy_g_Bui@2:
-
-; 15693: case 0:
-; 15694: goto block2;
-
- jmp SHORT $block2$211608
-$LN4 at pypy_g_Bui@2:
-
-; 15695: case 1:
-; 15696: goto block4;
-
- jmp SHORT $block4$211610
-$LN3 at pypy_g_Bui@2:
-
-; 15697: case 2:
-; 15698: goto block5;
-
- jmp SHORT $block5$211612
-$LN2 at pypy_g_Bui@2:
-
-; 15699: case 3:
-; 15700: goto block6;
-
- jmp $block6$211614
-$LN1 at pypy_g_Bui@2:
-
-; 15701: default:
-; 15702: assert(!"bad switch!!");
-
- mov eax, OFFSET ??_C at _0N@PGLFNKFI at bad?5switch?$CB?$CB?$AA@
- test eax, eax
- je SHORT $block2$211608
- push 15702 ; 00003d56H
- push OFFSET ??_C at _1BO@DMBFIACJ@?$AAi?$AAm?$AAp?$AAl?$AAe?$AAm?$AAe?$AAn?$AAt?$AA_?$AA1?$AA1?$AA?4?$AAc?$AA?$AA@
- push OFFSET ??_C at _1CA@EIJBLFPJ@?$AA?$CB?$AA?$CC?$AAb?$AAa?$AAd?$AA?5?$AAs?$AAw?$AAi?$AAt?$AAc?$AAh?$AA?$CB?$AA?$CB?$AA?$CC?$AA?$AA@
- call DWORD PTR __imp___wassert
- add esp, 12 ; 0000000cH
-$block2$211608:
-
-; 15703: }
-; 15704:
-; 15705: block2:
-; 15706: l_v271579 = pypy_g_UCD_digit(l_v271547, l_v271544, l_v271545);
-
- mov edx, DWORD PTR _l_v271545$[ebp]
- push edx
- mov eax, DWORD PTR _l_v271544$[ebp]
- push eax
- mov ecx, DWORD PTR _l_v271547$[ebp]
- push ecx
- call _pypy_g_UCD_digit
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- add esp, 12 ; 0000000cH
- mov DWORD PTR _l_v271579$[ebp], eax
-
-; 15707: l_v271583 = l_v271579;
-
- mov edx, DWORD PTR _l_v271579$[ebp]
- mov DWORD PTR _l_v271583$[ebp], edx
-$block3$211599:
-
-; 15708: goto block3;
-; 15709:
-; 15710: block3:
-; 15711: RPY_DEBUG_RETURN();
-; 15712: return l_v271583;
-
- mov eax, DWORD PTR _l_v271583$[ebp]
- jmp SHORT $LN9 at pypy_g_Bui@2
-$block4$211610:
-
-; 15713:
-; 15714: block4:
-; 15715: l_v271580 = pypy_g_UCD_name(l_v271547, l_v271544, l_v271545);
-
- mov eax, DWORD PTR _l_v271545$[ebp]
- push eax
- mov ecx, DWORD PTR _l_v271544$[ebp]
- push ecx
- mov edx, DWORD PTR _l_v271547$[ebp]
- push edx
- call _pypy_g_UCD_name
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- add esp, 12 ; 0000000cH
- mov DWORD PTR _l_v271580$[ebp], eax
-
-; 15716: l_v271583 = l_v271580;
-
- mov eax, DWORD PTR _l_v271580$[ebp]
- mov DWORD PTR _l_v271583$[ebp], eax
-
-; 15717: goto block3;
-
- jmp SHORT $block3$211599
-$block5$211612:
-
-; 15718:
-; 15719: block5:
-; 15720: l_v271581 = pypy_g_UCD_decimal(l_v271547, l_v271544, l_v271545);
-
- mov ecx, DWORD PTR _l_v271545$[ebp]
- push ecx
- mov edx, DWORD PTR _l_v271544$[ebp]
- push edx
- mov eax, DWORD PTR _l_v271547$[ebp]
- push eax
- call _pypy_g_UCD_decimal
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- add esp, 12 ; 0000000cH
- mov DWORD PTR _l_v271581$[ebp], eax
-
-; 15721: l_v271583 = l_v271581;
-
- mov ecx, DWORD PTR _l_v271581$[ebp]
- mov DWORD PTR _l_v271583$[ebp], ecx
-
-; 15722: goto block3;
-
- jmp SHORT $block3$211599
-$block6$211614:
-
-; 15723:
-; 15724: block6:
-; 15725: l_v271582 = pypy_g_UCD_numeric(l_v271547, l_v271544, l_v271545);
-
- mov edx, DWORD PTR _l_v271545$[ebp]
- push edx
- mov eax, DWORD PTR _l_v271544$[ebp]
- push eax
- mov ecx, DWORD PTR _l_v271547$[ebp]
- push ecx
- call _pypy_g_UCD_numeric
- ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
- add esp, 12 ; 0000000cH
- mov DWORD PTR _l_v271582$[ebp], eax
-
-; 15726: l_v271583 = l_v271582;
-
- mov edx, DWORD PTR _l_v271582$[ebp]
- mov DWORD PTR _l_v271583$[ebp], edx
-
-; 15727: goto block3;
-
- jmp SHORT $block3$211599
-$LN9 at pypy_g_Bui@2:
-
-; 15728: }
-
- mov esp, ebp
- pop ebp
- ret 0
- npad 3
-$LN14 at pypy_g_Bui@2:
- DD $LN5 at pypy_g_Bui@2
- DD $LN4 at pypy_g_Bui@2
- DD $LN3 at pypy_g_Bui@2
- DD $LN2 at pypy_g_Bui@2
-_pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root ENDP
+; Function compile flags: /Odtpy
+; COMDAT _pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root
+_TEXT SEGMENT
+tv138 = -116 ; size = 4
+_l_v271568$ = -109 ; size = 1
+_l_v271567$ = -108 ; size = 4
+_l_v271575$ = -104 ; size = 4
+_l_v271551$ = -97 ; size = 1
+_l_v271579$ = -96 ; size = 4
+_l_v271576$ = -89 ; size = 1
+_l_v271572$ = -88 ; size = 4
+_l_v271583$ = -84 ; size = 4
+_l_v271556$ = -80 ; size = 4
+_l_v271559$ = -76 ; size = 4
+_l_v271544$ = -72 ; size = 4
+_l_v271545$ = -68 ; size = 4
+_l_v271580$ = -64 ; size = 4
+_l_v271557$ = -60 ; size = 4
+_l_v271581$ = -56 ; size = 4
+_l_v271553$ = -52 ; size = 4
+_l_v271570$ = -48 ; size = 4
+_l_v271554$ = -42 ; size = 1
+_l_v271565$ = -41 ; size = 1
+_l_v271558$ = -40 ; size = 4
+_l_v271562$ = -33 ; size = 1
+_l_v271561$ = -32 ; size = 4
+_l_v271547$ = -28 ; size = 4
+_l_v271548$ = -24 ; size = 4
+_l_v271573$ = -18 ; size = 1
+_l_v271546$ = -17 ; size = 1
+_l_v271582$ = -16 ; size = 4
+_l_v271550$ = -12 ; size = 4
+_l_v271564$ = -8 ; size = 4
+_l_v271578$ = -4 ; size = 4
+_l_self_596$ = 8 ; size = 4
+_l_scope_w_259$ = 12 ; size = 4
+_pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root PROC ; COMDAT
+
+; 15629: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root(struct pypy_pypy_interpreter_gateway_BuiltinActivation0 *l_self_596, struct pypy_array1 *l_scope_w_259) {
+
+ push ebp
+ mov ebp, esp
+ sub esp, 116 ; 00000074H
+$block0$211591:
+
+; 15630: bool_t l_v271551; bool_t l_v271554; bool_t l_v271562;
+; 15631: bool_t l_v271565; bool_t l_v271568; bool_t l_v271573;
+; 15632: bool_t l_v271576; char l_v271546; long l_v271550; long l_v271553;
+; 15633: long l_v271564; long l_v271567; long l_v271572; long l_v271575;
+; 15634: struct pypy_object0 *l_v271556; struct pypy_object0 *l_v271570;
+; 15635: struct pypy_object0 *l_v271578;
+; 15636: struct pypy_object_vtable0 *l_v271561;
+; 15637: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271544;
+; 15638: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271545;
+; 15639: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271557;
+; 15640: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271579;
+; 15641: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271580;
+; 15642: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271581;
+; 15643: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271582;
+; 15644: struct pypy_pypy_interpreter_baseobjspace_W_Root0 *l_v271583;
+; 15645: struct pypy_pypy_interpreter_gateway_BuiltinActivation_UwS_UCD0 *l_v271548;
+; 15646: struct pypy_pypy_module_unicodedata_interp_ucd_UCD0 *l_v271547;
+; 15647: void* l_v271558; void* l_v271559;
+; 15648:
+; 15649: block0:
+; 15650: l_v271548 = (struct pypy_pypy_interpreter_gateway_BuiltinActivation_UwS_UCD0 *)l_self_596;
+
+ mov eax, DWORD PTR _l_self_596$[ebp]
+ mov DWORD PTR _l_v271548$[ebp], eax
+
+; 15651: l_v271546 = RPyField(l_v271548, bausucdoswrwr_inst_behavior);
+
+ mov ecx, DWORD PTR _l_v271548$[ebp]
+ mov dl, BYTE PTR [ecx+8]
+ mov BYTE PTR _l_v271546$[ebp], dl
+
+; 15652: RPyAssert(1, "unexpectedly negative list getitem index");
+; 15653: l_v271550 = l_scope_w_259->length;
+
+ mov eax, DWORD PTR _l_scope_w_259$[ebp]
+ mov ecx, DWORD PTR [eax+4]
+ mov DWORD PTR _l_v271550$[ebp], ecx
+
+; 15654: OP_INT_LT(0L, l_v271550, l_v271551);
+
+ xor edx, edx
+ cmp DWORD PTR _l_v271550$[ebp], 0
+ setg dl
+ mov BYTE PTR _l_v271551$[ebp], dl
+
+; 15655: RPyAssert(l_v271551, "list getitem index out of bound");
+; 15656: l_v271553 = l_scope_w_259->length;
+
+ mov eax, DWORD PTR _l_scope_w_259$[ebp]
+ mov ecx, DWORD PTR [eax+4]
+ mov DWORD PTR _l_v271553$[ebp], ecx
+
+; 15657: OP_INT_LT(0L, l_v271553, l_v271554);
+
+ xor edx, edx
+ cmp DWORD PTR _l_v271553$[ebp], 0
+ setg dl
+ mov BYTE PTR _l_v271554$[ebp], dl
+
+; 15658: RPyAssert(l_v271554, "fixed getitem out of bounds");
+; 15659: l_v271556 = RPyItem(l_scope_w_259, 0L);
+
+ mov eax, DWORD PTR _l_scope_w_259$[ebp]
+ mov ecx, DWORD PTR [eax+8]
+ mov DWORD PTR _l_v271556$[ebp], ecx
+
+; 15660: l_v271557 = (struct pypy_pypy_interpreter_baseobjspace_W_Root0 *)l_v271556;
+
+ mov edx, DWORD PTR _l_v271556$[ebp]
+ mov DWORD PTR _l_v271557$[ebp], edx
+
+; 15661: l_v271547 = pypy_g_interp_w__UCD(l_v271557, 0);
+
+ push 0
+ mov eax, DWORD PTR _l_v271557$[ebp]
+ push eax
+ call _pypy_g_interp_w__UCD
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | 12(%ebp)}
+ add esp, 8
+ mov DWORD PTR _l_v271547$[ebp], eax
+
+; 15662: l_v271558 = (void*)l_scope_w_259;
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov DWORD PTR _l_v271558$[ebp], ecx
+
+; 15663: l_v271559 = pypy_asm_gcroot(l_v271558);
+
+ mov eax, DWORD PTR ?_constant_always_one_@?1??pypy_asm_gcroot@@9 at 9
+ imul eax, DWORD PTR _l_v271558$[ebp]
+ mov edx, DWORD PTR _l_v271558$[ebp]
+ mov DWORD PTR _l_v271559$[ebp], edx
+
+; 15664: l_scope_w_259 = l_v271559; /* for moving GCs */
+
+ mov eax, DWORD PTR _l_v271559$[ebp]
+ mov DWORD PTR _l_scope_w_259$[ebp], eax
+
+; 15665: l_v271561 = RPyField((&pypy_g_ExcData), ed_exc_type);
+
+ mov ecx, DWORD PTR _pypy_g_ExcData
+ mov DWORD PTR _l_v271561$[ebp], ecx
+
+; 15666: l_v271562 = (l_v271561 == NULL);
+
+ xor edx, edx
+ cmp DWORD PTR _l_v271561$[ebp], 0
+ sete dl
+ mov BYTE PTR _l_v271562$[ebp], dl
+
+; 15667: if (!l_v271562) {
+
+ movzx eax, BYTE PTR _l_v271562$[ebp]
+ test eax, eax
+ jne SHORT $block1$211600
+
+; 15668: l_v271583 = ((struct pypy_pypy_interpreter_baseobjspace_W_Root0 *) NULL);
+
+ mov DWORD PTR _l_v271583$[ebp], 0
+
+; 15669: goto block3;
+
+ jmp $block3$211599
+$block1$211600:
+
+; 15670: }
+; 15671: goto block1;
+; 15672:
+; 15673: block1:
+; 15674: RPyAssert(1, "unexpectedly negative list getitem index");
+; 15675: l_v271564 = l_scope_w_259->length;
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov edx, DWORD PTR [ecx+4]
+ mov DWORD PTR _l_v271564$[ebp], edx
+
+; 15676: OP_INT_LT(1L, l_v271564, l_v271565);
+
+ xor eax, eax
+ cmp DWORD PTR _l_v271564$[ebp], 1
+ setg al
+ mov BYTE PTR _l_v271565$[ebp], al
+
+; 15677: RPyAssert(l_v271565, "list getitem index out of bound");
+; 15678: l_v271567 = l_scope_w_259->length;
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov edx, DWORD PTR [ecx+4]
+ mov DWORD PTR _l_v271567$[ebp], edx
+
+; 15679: OP_INT_LT(1L, l_v271567, l_v271568);
+
+ xor eax, eax
+ cmp DWORD PTR _l_v271567$[ebp], 1
+ setg al
+ mov BYTE PTR _l_v271568$[ebp], al
+
+; 15680: RPyAssert(l_v271568, "fixed getitem out of bounds");
+; 15681: l_v271570 = RPyItem(l_scope_w_259, 1L);
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov edx, DWORD PTR [ecx+12]
+ mov DWORD PTR _l_v271570$[ebp], edx
+
+; 15682: l_v271544 = (struct pypy_pypy_interpreter_baseobjspace_W_Root0 *)l_v271570;
+
+ mov eax, DWORD PTR _l_v271570$[ebp]
+ mov DWORD PTR _l_v271544$[ebp], eax
+
+; 15683: RPyAssert(1, "unexpectedly negative list getitem index");
+; 15684: l_v271572 = l_scope_w_259->length;
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov edx, DWORD PTR [ecx+4]
+ mov DWORD PTR _l_v271572$[ebp], edx
+
+; 15685: OP_INT_LT(2L, l_v271572, l_v271573);
+
+ xor eax, eax
+ cmp DWORD PTR _l_v271572$[ebp], 2
+ setg al
+ mov BYTE PTR _l_v271573$[ebp], al
+
+; 15686: RPyAssert(l_v271573, "list getitem index out of bound");
+; 15687: l_v271575 = l_scope_w_259->length;
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov edx, DWORD PTR [ecx+4]
+ mov DWORD PTR _l_v271575$[ebp], edx
+
+; 15688: OP_INT_LT(2L, l_v271575, l_v271576);
+
+ xor eax, eax
+ cmp DWORD PTR _l_v271575$[ebp], 2
+ setg al
+ mov BYTE PTR _l_v271576$[ebp], al
+
+; 15689: RPyAssert(l_v271576, "fixed getitem out of bounds");
+; 15690: l_v271578 = RPyItem(l_scope_w_259, 2L);
+
+ mov ecx, DWORD PTR _l_scope_w_259$[ebp]
+ mov edx, DWORD PTR [ecx+16]
+ mov DWORD PTR _l_v271578$[ebp], edx
+
+; 15691: l_v271545 = (struct pypy_pypy_interpreter_baseobjspace_W_Root0 *)l_v271578;
+
+ mov eax, DWORD PTR _l_v271578$[ebp]
+ mov DWORD PTR _l_v271545$[ebp], eax
+
+; 15692: switch (l_v271546) {
+
+ movsx ecx, BYTE PTR _l_v271546$[ebp]
+ mov DWORD PTR tv138[ebp], ecx
+ cmp DWORD PTR tv138[ebp], 3
+ ja SHORT $LN1 at pypy_g_Bui@2
+ mov edx, DWORD PTR tv138[ebp]
+ jmp DWORD PTR $LN14 at pypy_g_Bui@2[edx*4]
+$LN5 at pypy_g_Bui@2:
+
+; 15693: case 0:
+; 15694: goto block2;
+
+ jmp SHORT $block2$211608
+$LN4 at pypy_g_Bui@2:
+
+; 15695: case 1:
+; 15696: goto block4;
+
+ jmp SHORT $block4$211610
+$LN3 at pypy_g_Bui@2:
+
+; 15697: case 2:
+; 15698: goto block5;
+
+ jmp SHORT $block5$211612
+$LN2 at pypy_g_Bui@2:
+
+; 15699: case 3:
+; 15700: goto block6;
+
+ jmp $block6$211614
+$LN1 at pypy_g_Bui@2:
+
+; 15701: default:
+; 15702: assert(!"bad switch!!");
+
+ mov eax, OFFSET ??_C at _0N@PGLFNKFI at bad?5switch?$CB?$CB?$AA@
+ test eax, eax
+ je SHORT $block2$211608
+ push 15702 ; 00003d56H
+ push OFFSET ??_C at _1BO@DMBFIACJ@?$AAi?$AAm?$AAp?$AAl?$AAe?$AAm?$AAe?$AAn?$AAt?$AA_?$AA1?$AA1?$AA?4?$AAc?$AA?$AA@
+ push OFFSET ??_C at _1CA@EIJBLFPJ@?$AA?$CB?$AA?$CC?$AAb?$AAa?$AAd?$AA?5?$AAs?$AAw?$AAi?$AAt?$AAc?$AAh?$AA?$CB?$AA?$CB?$AA?$CC?$AA?$AA@
+ call DWORD PTR __imp___wassert
+ add esp, 12 ; 0000000cH
+$block2$211608:
+
+; 15703: }
+; 15704:
+; 15705: block2:
+; 15706: l_v271579 = pypy_g_UCD_digit(l_v271547, l_v271544, l_v271545);
+
+ mov edx, DWORD PTR _l_v271545$[ebp]
+ push edx
+ mov eax, DWORD PTR _l_v271544$[ebp]
+ push eax
+ mov ecx, DWORD PTR _l_v271547$[ebp]
+ push ecx
+ call _pypy_g_UCD_digit
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ add esp, 12 ; 0000000cH
+ mov DWORD PTR _l_v271579$[ebp], eax
+
+; 15707: l_v271583 = l_v271579;
+
+ mov edx, DWORD PTR _l_v271579$[ebp]
+ mov DWORD PTR _l_v271583$[ebp], edx
+$block3$211599:
+
+; 15708: goto block3;
+; 15709:
+; 15710: block3:
+; 15711: RPY_DEBUG_RETURN();
+; 15712: return l_v271583;
+
+ mov eax, DWORD PTR _l_v271583$[ebp]
+ jmp SHORT $LN9 at pypy_g_Bui@2
+$block4$211610:
+
+; 15713:
+; 15714: block4:
+; 15715: l_v271580 = pypy_g_UCD_name(l_v271547, l_v271544, l_v271545);
+
+ mov eax, DWORD PTR _l_v271545$[ebp]
+ push eax
+ mov ecx, DWORD PTR _l_v271544$[ebp]
+ push ecx
+ mov edx, DWORD PTR _l_v271547$[ebp]
+ push edx
+ call _pypy_g_UCD_name
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ add esp, 12 ; 0000000cH
+ mov DWORD PTR _l_v271580$[ebp], eax
+
+; 15716: l_v271583 = l_v271580;
+
+ mov eax, DWORD PTR _l_v271580$[ebp]
+ mov DWORD PTR _l_v271583$[ebp], eax
+
+; 15717: goto block3;
+
+ jmp SHORT $block3$211599
+$block5$211612:
+
+; 15718:
+; 15719: block5:
+; 15720: l_v271581 = pypy_g_UCD_decimal(l_v271547, l_v271544, l_v271545);
+
+ mov ecx, DWORD PTR _l_v271545$[ebp]
+ push ecx
+ mov edx, DWORD PTR _l_v271544$[ebp]
+ push edx
+ mov eax, DWORD PTR _l_v271547$[ebp]
+ push eax
+ call _pypy_g_UCD_decimal
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ add esp, 12 ; 0000000cH
+ mov DWORD PTR _l_v271581$[ebp], eax
+
+; 15721: l_v271583 = l_v271581;
+
+ mov ecx, DWORD PTR _l_v271581$[ebp]
+ mov DWORD PTR _l_v271583$[ebp], ecx
+
+; 15722: goto block3;
+
+ jmp SHORT $block3$211599
+$block6$211614:
+
+; 15723:
+; 15724: block6:
+; 15725: l_v271582 = pypy_g_UCD_numeric(l_v271547, l_v271544, l_v271545);
+
+ mov edx, DWORD PTR _l_v271545$[ebp]
+ push edx
+ mov eax, DWORD PTR _l_v271544$[ebp]
+ push eax
+ mov ecx, DWORD PTR _l_v271547$[ebp]
+ push ecx
+ call _pypy_g_UCD_numeric
+ ;; expected {4(%ebp) | %ebx, %esi, %edi, (%ebp) | }
+ add esp, 12 ; 0000000cH
+ mov DWORD PTR _l_v271582$[ebp], eax
+
+; 15726: l_v271583 = l_v271582;
+
+ mov edx, DWORD PTR _l_v271582$[ebp]
+ mov DWORD PTR _l_v271583$[ebp], edx
+
+; 15727: goto block3;
+
+ jmp SHORT $block3$211599
+$LN9 at pypy_g_Bui@2:
+
+; 15728: }
+
+ mov esp, ebp
+ pop ebp
+ ret 0
+ npad 3
+$LN14 at pypy_g_Bui@2:
+ DD $LN5 at pypy_g_Bui@2
+ DD $LN4 at pypy_g_Bui@2
+ DD $LN3 at pypy_g_Bui@2
+ DD $LN2 at pypy_g_Bui@2
+_pypy_g_BuiltinActivation_UwS_UCD_ObjSpace_W_Root_W_Root ENDP
More information about the Pypy-commit
mailing list