Author: Amaury Forgeot d'Arc <[email protected]>
Branch: 
Changeset: r44890:ffabfe27fd9f
Date: 2011-06-11 23:07 +0200
http://bitbucket.org/pypy/pypy/changeset/ffabfe27fd9f/

Log:    Fix me: trackgcroot.py fails in pypy_g_ll_math_ll_math_frexp, when
        compiled by msvc.

        This assembler snippet is copied from a run of test_asmgcroot.py,
        but the win32 buildbot probably stopped on a similar one.

diff --git a/pypy/translator/c/gcc/test/msvc/track_and_esp.s 
b/pypy/translator/c/gcc/test/msvc/track_and_esp.s
new file mode 100644
--- /dev/null
+++ b/pypy/translator/c/gcc/test/msvc/track_and_esp.s
@@ -0,0 +1,466 @@
+PUBLIC ??_C@_0BN@BIPHFGBC@pypy_g_ll_math_ll_math_frexp?$AA@ ; `string'
+PUBLIC _pypy_g_ll_math_ll_math_frexp
+;      COMDAT ??_C@_0BN@BIPHFGBC@pypy_g_ll_math_ll_math_frexp?$AA@
+CONST  SEGMENT
+??_C@_0BN@BIPHFGBC@pypy_g_ll_math_ll_math_frexp?$AA@ DB 'pypy_g_ll_math_l'
+       DB      'l_math_frexp', 00H                             ; `string'
+; Function compile flags: /Ogtpy
+CONST  ENDS
+;      COMDAT _pypy_g_ll_math_ll_math_frexp
+_TEXT  SEGMENT
+_l_mantissa_0$ = -8                                    ; size = 8
+_l_v21638$ = -8                                                ; size = 8
+_l_x_14$ = 8                                           ; size = 8
+_pypy_g_ll_math_ll_math_frexp PROC                     ; COMDAT
+
+; 58245: struct pypy_tuple2_0 *pypy_g_ll_math_ll_math_frexp(double l_x_14) {
+
+       push    ebp
+       mov     ebp, esp
+       and     esp, -64                                ; ffffffc0H
+
+; 58246:       long *l_exp_p_0; double l_mantissa_0; bool_t l_v21641;
+; 58247:       bool_t l_v21643; bool_t l_v21644; bool_t l_v21646; bool_t 
l_v21647;
+; 58248:       bool_t l_v21652; bool_t l_v21653; bool_t l_v21660; bool_t 
l_v21666;
+; 58249:       bool_t l_v21670; bool_t l_v21674; bool_t l_v21676; double 
l_v21638;
+; 58250:       long l_v21637; long l_v21649; long l_v21651; long l_v21677;
+; 58251:       long l_v21678; struct pypy_exceptions_Exception0 *l_v21687;
+; 58252:       struct pypy_header0 *l_v21654; struct pypy_object0 *l_v21682;
+; 58253:       struct pypy_object0 *l_v21691; struct pypy_object_vtable0 
*l_v21665;
+; 58254:       struct pypy_object_vtable0 *l_v21669;
+; 58255:       struct pypy_object_vtable0 *l_v21675;
+; 58256:       struct pypy_object_vtable0 *l_v21683; struct pypy_tuple2_0 
*l_v21640;
+; 58257:       struct pypy_tuple2_0 *l_v21695; void* l_v21639; void* l_v21648;
+; 58258:       void* l_v21650; void* l_v21656; void* l_v21658; void* l_v21659;
+; 58259:       void* l_v21668; void* l_v21672; void* l_v21679; void* l_v21688;
+; 58260:       void* l_v21696;
+; 58261:       goto block0;
+; 58262: 
+; 58263:     block0:
+; 58264:       l_v21641 = pypy_g_ll_math_ll_math_isnan(l_x_14);
+
+       fld     QWORD PTR _l_x_14$[ebp]
+       sub     esp, 52                                 ; 00000034H
+       push    ebx
+       push    esi
+       push    edi
+       sub     esp, 8
+       fstp    QWORD PTR [esp]
+$block0$88239:
+       call    _pypy_g_ll_math_ll_math_isnan
+
+; 58265:       pypy_asm_gc_nocollect(pypy_g_ll_math_ll_math_isnan);
+; 58266:       l_v21643 = l_v21641;
+; 58267:       if (l_v21643) {
+; 58268:               l_v21637 = 0L;
+; 58269:               l_v21638 = l_x_14;
+
+       fld     QWORD PTR _l_x_14$[ebp]
+       add     esp, 8
+       test    al, al
+
+; 58270:               goto block3;
+
+       jne     SHORT $LN10@pypy_g_ll_@159
+
+; 58271:       }
+; 58272:       goto block1;
+; 58273: 
+; 58274:     block1:
+; 58275:       l_v21644 = pypy_g_ll_math_ll_math_isinf(l_x_14);
+
+       sub     esp, 8
+       fstp    QWORD PTR [esp]
+$block1$88243:
+       call    _pypy_g_ll_math_ll_math_isinf
+       add     esp, 8
+
+; 58276:       pypy_asm_gc_nocollect(pypy_g_ll_math_ll_math_isinf);
+; 58277:       l_v21646 = l_v21644;
+; 58278:       if (l_v21646) {
+
+       test    al, al
+       je      SHORT $block2$88245
+
+; 58279:               l_v21637 = 0L;
+; 58280:               l_v21638 = l_x_14;
+
+       fld     QWORD PTR _l_x_14$[ebp]
+$LN10@pypy_g_ll_@159:
+
+; 58288:               goto block14;
+; 58289:       }
+; 58290:       l_v21637 = 0L;
+
+       xor     edi, edi
+$LN30@pypy_g_ll_@159:
+
+; 58291:       l_v21638 = l_x_14;
+; 58292:       goto block3;
+; 58293: 
+; 58294:     block3:
+; 58295:       l_v21648 = 
(&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC)->ssgc_inst_free;
+
+       mov     esi, DWORD PTR 
_pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+4
+       fstp    QWORD PTR _l_v21638$[esp+64]
+
+; 58296:       OP_RAW_MALLOC_USAGE((0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct 
pypy_tuple2_0), sizeof(struct pypy_forwarding_stub0))), l_v21649);
+; 58297:       l_v21650 = 
(&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC)->ssgc_inst_top_of_space;
+; 58298:       OP_ADR_DELTA(l_v21650, l_v21648, l_v21651);
+
+       mov     eax, DWORD PTR 
_pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+12
+       sub     eax, esi
+
+; 58299:       OP_INT_GT(l_v21649, l_v21651, l_v21652);
+
+       cmp     eax, 24                                 ; 00000018H
+$block3$88242:
+
+; 58300:       if (l_v21652) {
+
+       jge     $block4$88260
+
+; 58334:       l_v21695 = l_v21640;
+; 58335:       goto block8;
+; 58336: 
+; 58337:     block8:
+; 58338:       RPY_DEBUG_RETURN();
+; 58339:       return l_v21695;
+; 58340: 
+; 58341:     block9:
+; 58342:       PYPY_DEBUG_RECORD_TRACEBACK("ll_math_ll_math_frexp");
+; 58343:       l_v21695 = ((struct pypy_tuple2_0 *) NULL);
+; 58344:       goto block8;
+; 58345: 
+; 58346:     block10:
+; 58347:       abort();  /* debug_llinterpcall should be unreachable */
+; 58348:       l_v21665 = (&pypy_g_ExcData)->ed_exc_type;
+; 58349:       l_v21666 = (l_v21665 == NULL);
+; 58350:       if (!l_v21666) {
+; 58351:               goto block11;
+; 58352:       }
+; 58353:       goto block5;
+; 58354: 
+; 58355:     block11:
+; 58356:       PYPY_DEBUG_RECORD_TRACEBACK("ll_math_ll_math_frexp");
+; 58357:       l_v21696 = NULL;
+; 58358:       goto block6;
+; 58359: 
+; 58360:     block12:
+; 58361:       l_v21668 = 
pypy_g_SemiSpaceGC_obtain_free_space((&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC),
 (0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct pypy_tuple2_0), sizeof(struct 
pypy_forwarding_stub0))));
+
+       push    24                                      ; 00000018H
+       push    OFFSET _pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC
+$block12$88259:
+       call    _pypy_g_SemiSpaceGC_obtain_free_space
+
+; 58362:       l_v21669 = (&pypy_g_ExcData)->ed_exc_type;
+; 58363:       l_v21670 = (l_v21669 == NULL);
+
+       xor     ecx, ecx
+       add     esp, 8
+       cmp     DWORD PTR _pypy_g_ExcData, ecx
+
+; 58364:       if (!l_v21670) {
+
+       je      $LN5@pypy_g_ll_@159
+
+; 58368:       goto block4;
+; 58369: 
+; 58370:     block13:
+; 58371:       PYPY_DEBUG_RECORD_TRACEBACK("ll_math_ll_math_frexp");
+
+       mov     eax, DWORD PTR _pypydtcount
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8], OFFSET 
?loc@?N@??pypy_g_ll_math_ll_math_frexp@@9@9
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8+4], ecx
+       inc     eax
+       and     eax, 8191                               ; 00001fffH
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8], OFFSET 
?loc@?8??pypy_g_ll_math_ll_math_frexp@@9@9
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8+4], ecx
+       inc     eax
+       and     eax, 8191                               ; 00001fffH
+       mov     DWORD PTR _pypydtcount, eax
+$block13$88313:
+$block9$88285:
+       xor     eax, eax
+
+; 58423:       goto block8;
+; 58424: }
+
+       pop     edi
+       pop     esi
+       pop     ebx
+       mov     esp, ebp
+       pop     ebp
+       ret     0
+$block2$88245:
+
+; 58281:               goto block3;
+; 58282:       }
+; 58283:       goto block2;
+; 58284: 
+; 58285:     block2:
+; 58286:       OP_FLOAT_IS_TRUE(l_x_14, l_v21647);
+
+       fldz
+       fld     QWORD PTR _l_x_14$[ebp]
+       fucom   ST(1)
+       fnstsw  ax
+       fstp    ST(1)
+       test    ah, 68                                  ; 00000044H
+
+; 58287:       if (l_v21647) {
+
+       jnp     $LN10@pypy_g_ll_@159
+
+; 58372:       l_v21696 = NULL;
+; 58373:       goto block6;
+; 58374: 
+; 58375:     block14:
+; 58376:       l_v21672 = 
pypy_g__ll_malloc_varsize_no_length__Signed_Signed_Sign(1L, (0 + 0), 
sizeof(long));
+
+       push    4
+       fstp    ST(0)
+       push    0
+       push    1
+$block14$88247:
+       call    _pypy_g__ll_malloc_varsize_no_length__Signed_Signed_Sign
+       mov     esi, eax
+
+; 58377:       OP_TRACK_ALLOC_START(l_v21672, /* nothing */);
+
+       push    OFFSET ??_C@_0BN@BIPHFGBC@pypy_g_ll_math_ll_math_frexp?$AA@
+       push    esi
+       call    _pypy_debug_alloc_start
+       add     esp, 20                                 ; 00000014H
+
+; 58378:       l_exp_p_0 = (long *)l_v21672;
+; 58379:       l_v21674 = (l_exp_p_0 != NULL);
+
+       test    esi, esi
+
+; 58380:       if (!l_v21674) {
+
+       jne     SHORT $block15$88324
+
+; 58418:       goto block8;
+; 58419: 
+; 58420:     block18:
+; 58421:       PYPY_DEBUG_RECORD_TRACEBACK("ll_math_ll_math_frexp");
+
+       mov     eax, DWORD PTR _pypydtcount
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8], OFFSET 
?loc@?BB@??pypy_g_ll_math_ll_math_frexp@@9@9
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8+4], esi
+       inc     eax
+       and     eax, 8191                               ; 00001fffH
+       mov     DWORD PTR _pypydtcount, eax
+$block18$88323:
+
+; 58422:       l_v21695 = ((struct pypy_tuple2_0 *) NULL);
+
+       xor     eax, eax
+
+; 58423:       goto block8;
+; 58424: }
+
+       pop     edi
+       pop     esi
+       pop     ebx
+       mov     esp, ebp
+       pop     ebp
+       ret     0
+$block15$88324:
+
+; 58381:               goto block18;
+; 58382:       }
+; 58383:       goto block15;
+; 58384: 
+; 58385:     block15:
+; 58386:       l_mantissa_0 = pypy_g_frexp__Float_arrayPtr_star_2(l_x_14, 
l_exp_p_0);
+
+       fld     QWORD PTR _l_x_14$[ebp]
+       push    esi
+       sub     esp, 8
+       fstp    QWORD PTR [esp]
+       call    _pypy_g_frexp__Float_arrayPtr_star_2
+
+; 58387:       l_v21675 = (&pypy_g_ExcData)->ed_exc_type;
+; 58388:       l_v21676 = (l_v21675 == NULL);
+
+       mov     edi, DWORD PTR _pypy_g_ExcData
+       fstp    QWORD PTR _l_mantissa_0$[esp+76]
+       add     esp, 12                                 ; 0000000cH
+       test    edi, edi
+
+; 58389:       if (!l_v21676) {
+
+       je      SHORT $block16$88328
+
+; 58403: 
+; 58404:     block17:
+; 58405:       l_v21682 = (&pypy_g_ExcData)->ed_exc_value;
+; 58406:       l_v21683 = (&pypy_g_ExcData)->ed_exc_type;
+; 58407:       PYPY_DEBUG_CATCH_EXCEPTION("ll_math_ll_math_frexp", l_v21683, 
l_v21683 == 
(&pypy_g_py__code_assertion_AssertionError_vtable.ae_super.ae_super.se_super.e_super)
 || l_v21683 == 
(&pypy_g_exceptions_NotImplementedError_vtable.nie_super.re_super.se_super.e_super));
+
+       mov     eax, DWORD PTR _pypydtcount
+       mov     ebx, DWORD PTR _pypy_g_ExcData+4
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8], OFFSET 
?loc@?BA@??pypy_g_ll_math_ll_math_frexp@@9@9
+       mov     DWORD PTR _pypy_debug_tracebacks[eax*8+4], edi
+       inc     eax
+       and     eax, 8191                               ; 00001fffH
+$block17$88327:
+       mov     DWORD PTR _pypydtcount, eax
+       cmp     edi, OFFSET _pypy_g_py__code_assertion_AssertionError_vtable
+       je      SHORT $LN1@pypy_g_ll_@159
+       cmp     edi, OFFSET _pypy_g_exceptions_NotImplementedError_vtable
+       jne     SHORT $LN2@pypy_g_ll_@159
+$LN1@pypy_g_ll_@159:
+       call    _pypy_debug_catch_fatal_exception
+$LN2@pypy_g_ll_@159:
+
+; 58408:       (&pypy_g_ExcData)->ed_exc_value = ((struct pypy_object0 *) 
NULL);
+
+       xor     eax, eax
+
+; 58409:       (&pypy_g_ExcData)->ed_exc_type = ((struct pypy_object_vtable0 
*) NULL);
+; 58410:       l_v21687 = (struct pypy_exceptions_Exception0 *)l_v21682;
+; 58411:       l_v21688 = (void*)l_exp_p_0;
+; 58412:       OP_TRACK_ALLOC_STOP(l_v21688, /* nothing */);
+
+       push    esi
+       mov     DWORD PTR _pypy_g_ExcData+4, eax
+       mov     DWORD PTR _pypy_g_ExcData, eax
+       call    _pypy_debug_alloc_stop
+
+; 58413:       OP_RAW_FREE(l_v21688, /* nothing */);
+
+       push    esi
+       call    _PyObject_Free
+
+; 58414:       l_v21691 = (struct pypy_object0 *)l_v21687;
+; 58415:       pypy_g_RPyReRaiseException(l_v21683, l_v21691);
+
+       push    ebx
+       push    edi
+       call    _pypy_g_RPyReRaiseException
+       add     esp, 16                                 ; 00000010H
+
+; 58416:       pypy_asm_gc_nocollect(pypy_g_RPyReRaiseException);
+; 58417:       l_v21695 = ((struct pypy_tuple2_0 *) NULL);
+
+       xor     eax, eax
+
+; 58423:       goto block8;
+; 58424: }
+
+       pop     edi
+       pop     esi
+       pop     ebx
+       mov     esp, ebp
+       pop     ebp
+       ret     0
+$block16$88328:
+
+; 58390:               goto block17;
+; 58391:       }
+; 58392:       goto block16;
+; 58393: 
+; 58394:     block16:
+; 58395:       l_v21677 = RPyBareItem(l_exp_p_0, 0L);
+; 58396:       l_v21678 = (long)(l_v21677);
+
+       mov     edi, DWORD PTR [esi]
+
+; 58397:       l_v21679 = (void*)l_exp_p_0;
+; 58398:       OP_TRACK_ALLOC_STOP(l_v21679, /* nothing */);
+
+       push    esi
+       call    _pypy_debug_alloc_stop
+
+; 58399:       OP_RAW_FREE(l_v21679, /* nothing */);
+
+       push    esi
+       call    _PyObject_Free
+
+; 58400:       l_v21637 = l_v21678;
+; 58401:       l_v21638 = l_mantissa_0;
+
+       fld     QWORD PTR _l_mantissa_0$[esp+72]
+       add     esp, 8
+
+; 58402:       goto block3;
+
+       jmp     $LN30@pypy_g_ll_@159
+$LN5@pypy_g_ll_@159:
+
+; 58365:               goto block13;
+; 58366:       }
+; 58367:       l_v21639 = l_v21668;
+
+       mov     esi, eax
+$block4$88260:
+$block5$88263:
+
+; 58301:               goto block12;
+; 58302:       }
+; 58303:       l_v21639 = l_v21648;
+; 58304:       goto block4;
+; 58305: 
+; 58306:     block4:
+; 58307:       OP_INT_IS_TRUE(RUNNING_ON_LLINTERP, l_v21653);
+; 58308:       if (l_v21653) {
+; 58309:               goto block10;
+; 58310:       }
+; 58311:       goto block5;
+; 58312: 
+; 58313:     block5:
+; 58314:       l_v21654 = (struct pypy_header0 *)l_v21639;
+; 58315:       RPyField(l_v21654, h_tid) = (GROUP_MEMBER_OFFSET(struct 
group_pypy_g_typeinfo_s, member20)+0L);
+
+       test    esi, esi
+       jne     SHORT $LN18@pypy_g_ll_@159
+       call    _RPyAbort
+$LN18@pypy_g_ll_@159:
+
+; 58316:       OP_ADR_ADD(l_v21639, (0 + ROUND_UP_FOR_ALLOCATION(sizeof(struct 
pypy_tuple2_0), sizeof(struct pypy_forwarding_stub0))), l_v21656);
+; 58317:       
(&pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC)->ssgc_inst_free = 
l_v21656;
+; 58318:       OP_ADR_ADD(l_v21639, 0, l_v21658);
+; 58319:       l_v21659 = (void*)l_v21658;
+; 58320:       l_v21696 = l_v21659;
+; 58321:       goto block6;
+; 58322: 
+; 58323:     block6:
+; 58324:       l_v21640 = (struct pypy_tuple2_0 *)l_v21696;
+; 58325:       l_v21660 = (l_v21640 != NULL);
+; 58326:       if (!l_v21660) {
+; 58327:               goto block9;
+; 58328:       }
+; 58329:       goto block7;
+; 58330: 
+; 58331:     block7:
+; 58332:       RPyField(l_v21640, t_item0) = l_v21638;
+
+       fld     QWORD PTR _l_v21638$[esp+64]
+       mov     DWORD PTR [esi], 81                     ; 00000051H
+       lea     ecx, DWORD PTR [esi+24]
+       mov     DWORD PTR 
_pypy_g_pypy_rpython_memory_gc_semispace_SemiSpaceGC+4, ecx
+       fstp    QWORD PTR [esi+8]
+
+; 58333:       RPyField(l_v21640, t_item1) = l_v21637;
+
+       mov     DWORD PTR [esi+16], edi
+
+; 58423:       goto block8;
+; 58424: }
+
+       pop     edi
+       mov     eax, esi
+       pop     esi
+$block6$88281:
+$block8$88289:
+       pop     ebx
+       mov     esp, ebp
+       pop     ebp
+       ret     0
+_pypy_g_ll_math_ll_math_frexp ENDP
+_TEXT  ENDS
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to