Waldek Hebisch wrote:
I assume that it fails.
It does.
But the machine code contains 10 comparisons, and it is not clear which one fails.
The last one.
The simplest method is probably to use `stepi' in gdb (or eqivalent metod to step trough machine instructions).
Mixed source/disassembly for _p__M0_main_program in the CW debugger:
000021E0: 7C0802A6 mflr r0 000021E4: BF41FFE8 stmw r26,-24(SP) 000021E8: 90010008 stw r0,8(SP) 000021EC: 9421FFA0 stwu SP,-96(SP) 000021F0: 429F0005 bcl ALWAYS,31,_p__M0_main_program ; 0x000021F4 000021F4: 7FE802A6 mflr r31 begin 000021F8: 38000001 li r0,1 000021FC: 3C5F0003 addis RTOC,r31,3 00002200: 90021BD8 stw r0,7128(RTOC) i:= 1 ; 00002204: 3B400001 li r26,1 00002208: 38000000 li r0,0 0000220C: 3C5F0003 addis RTOC,r31,3 00002210: 38421BD4 addi RTOC,RTOC,7124 00002214: 38420004 addi RTOC,RTOC,4 00002218: 7F801214 add r28,r0,RTOC 0000221C: 7FC2002E lwzx r30,RTOC,r0 00002220: 3BA00000 li r29,0 00002224: 38400001 li RTOC,1 00002228: 2F820001 cmpwi cr7,RTOC,0x0001 0000222C: 41BE0008 beq+ cr7,_p__M0_main_program+0x24 ; 0x00002234 00002230: 48001151 bl _p_RangeCheckError+0x2380 ; 0x00003380 00002234: 3B62FFFF subi r27,RTOC,1 00002238: 576506FE clrlwi r5,r27,27 0000223C: 38600000 li r3,0 00002240: 38800001 li r4,1 00002244: 20A5003F subfic r5,r5,63 00002248: 4802B22D bl __ashldi3+0x2C474 ; 0x0002D474 0000224C: 7C6318F8 not r3,r3 00002250: 7C8420F8 not r4,r4 00002254: 7FA91838 and r9,r29,r3 00002258: 7FCA2038 and r10,r30,r4 0000225C: 7D5E5378 mr r30,r10 00002260: 2B890000 cmplwi cr7,r9,0x0000 00002264: 419D0018 bgt cr7,_p__M0_main_program+0x24 ; 0x0000227C 00002268: 2F890000 cmpwi cr7,r9,0x0000 0000226C: 409E0014 bne cr7,_p__M0_main_program+0x24 ; 0x00002280 00002270: 3800FFFF li r0,-1 00002274: 7F8A0040 cmpl cr7,0,r10,r0 00002278: 409D0008 ble cr7,_p__M0_main_program+0x24 ; 0x00002280 0000227C: 48001105 bl _p_RangeCheckError+0x2380 ; 0x00003380 00002280: 93DC0000 stw r30,0(r28) 00002284: 3C5F0003 addis RTOC,r31,3 00002288: 80421BD8 lwz RTOC,7128(RTOC) 0000228C: 2F820001 cmpwi cr7,RTOC,0x0001 00002290: 41BE0008 beq+ cr7,_p__M0_main_program+0x24 ; 0x00002298 00002294: 480010ED bl _p_RangeCheckError+0x2380 ; 0x00003380 00002298: 3B82FFFF subi r28,RTOC,1 0000229C: 5780E8FA rlwinm r0,r28,29,3,29 000022A0: 3C5F0003 addis RTOC,r31,3 000022A4: 38421BD4 addi RTOC,RTOC,7124 000022A8: 38420004 addi RTOC,RTOC,4 000022AC: 7F801214 add r28,r0,RTOC 000022B0: 7FC2002E lwzx r30,RTOC,r0 000022B4: 3BA00000 li r29,0 000022B8: 7F44D378 mr r4,r26 000022BC: 38600000 li r3,0 000022C0: 576506FE clrlwi r5,r27,27 000022C4: 20A5003F subfic r5,r5,63 000022C8: 4802B1AD bl __ashldi3+0x2C474 ; 0x0002D474 000022CC: 38600000 li r3,0 000022D0: 7FA91B78 or r9,r29,r3 000022D4: 7FCA2378 or r10,r30,r4 000022D8: 7D5E5378 mr r30,r10 000022DC: 2B890000 cmplwi cr7,r9,0x0000 000022E0: 419D0018 bgt cr7,_p__M0_main_program+0x24 ; 0x000022F8 000022E4: 2F890000 cmpwi cr7,r9,0x0000 000022E8: 409E0014 bne cr7,_p__M0_main_program+0x24 ; 0x000022FC 000022EC: 3800FFFF li r0,-1 000022F0: 7F8A0040 cmpl cr7,0,r10,r0 000022F4: 409D0008 ble cr7,_p__M0_main_program+0x24 ; 0x000022FC 000022F8: 48001089 bl _p_RangeCheckError+0x2380 ; 0x00003380 000022FC: 93DC0000 stw r30,0(r28) 00002300: 3C5F0003 addis RTOC,r31,3 00002304: 80421BD8 lwz RTOC,7128(RTOC) 00002308: 2F820001 cmpwi cr7,RTOC,0x0001 0000230C: 41BE0008 beq+ cr7,_p__M0_main_program+0x24 ; 0x00002314 00002310: 48001071 bl _p_RangeCheckError+0x2380 ; 0x00003380 00002314: 3B82FFFF subi r28,RTOC,1 00002318: 5780E8FA rlwinm r0,r28,29,3,29 0000231C: 3C5F0003 addis RTOC,r31,3 00002320: 38421BD4 addi RTOC,RTOC,7124 00002324: 7F801214 add r28,r0,RTOC 00002328: 7FC2002E lwzx r30,RTOC,r0 0000232C: 3BA00000 li r29,0 00002330: 576506FE clrlwi r5,r27,27 00002334: 38600000 li r3,0 00002338: 38800001 li r4,1 0000233C: 20A5003F subfic r5,r5,63 00002340: 4802B135 bl __ashldi3+0x2C474 ; 0x0002D474 00002344: 7C641B78 mr r4,r3 00002348: 38600000 li r3,0 0000234C: 7C6318F8 not r3,r3 00002350: 7C8420F8 not r4,r4 00002354: 7FA91838 and r9,r29,r3 00002358: 7FCA2038 and r10,r30,r4 0000235C: 7D5E5378 mr r30,r10 00002360: 2B890000 cmplwi cr7,r9,0x0000 00002364: 419D0018 bgt cr7,_p__M0_main_program+0x24 ; 0x0000237C 00002368: 2F890000 cmpwi cr7,r9,0x0000 0000236C: 409E0014 bne cr7,_p__M0_main_program+0x24 ; 0x00002380 00002370: 3800FFFF li r0,-1 00002374: 7F8A0040 cmpl cr7,0,r10,r0 00002378: 409D0008 ble cr7,_p__M0_main_program+0x24 ; 0x00002380 0000237C: 48001005 bl _p_RangeCheckError+0x2380 ; 0x00003380 00002380: 93DC0000 stw r30,0(r28) 00002384: 3C5F0003 addis RTOC,r31,3 00002388: 80421BD8 lwz RTOC,7128(RTOC) 0000238C: 2F820001 cmpwi cr7,RTOC,0x0001 00002390: 41BE0008 beq+ cr7,_p__M0_main_program+0x24 ; 0x00002398 00002394: 48000FED bl _p_RangeCheckError+0x2380 ; 0x00003380 00002398: 3B82FFFF subi r28,RTOC,1 0000239C: 5780E8FA rlwinm r0,r28,29,3,29 000023A0: 3C5F0003 addis RTOC,r31,3 000023A4: 38421BD4 addi RTOC,RTOC,7124 000023A8: 7F801214 add r28,r0,RTOC 000023AC: 7FC2002E lwzx r30,RTOC,r0 000023B0: 3BA00000 li r29,0 000023B4: 7F44D378 mr r4,r26 000023B8: 38600000 li r3,0 000023BC: 576506FE clrlwi r5,r27,27 000023C0: 20A5003F subfic r5,r5,63 000023C4: 4802B0B1 bl __ashldi3+0x2C474 ; 0x0002D474 000023C8: 7C69FE70 srawi r9,r3,31 000023CC: 7C6A0670 srawi r10,r3,0 000023D0: 7FA24B78 or RTOC,r29,r9 000023D4: 7FC35378 or r3,r30,r10 000023D8: 7C7E1B78 mr r30,r3 000023DC: 2B820000 cmplwi cr7,RTOC,0x0000 ---> 000023E0: 419D0018 bgt cr7,_p__M0_main_program+0x24 ; 0x000023F8 000023E4: 2F820000 cmpwi cr7,RTOC,0x0000 000023E8: 409E0014 bne cr7,_p__M0_main_program+0x24 ; 0x000023FC 000023EC: 3800FFFF li r0,-1 000023F0: 7F830040 cmpl cr7,0,r3,r0 000023F4: 409D0008 ble cr7,_p__M0_main_program+0x24 ; 0x000023FC ---> 000023F8: 48000F89 bl _p_RangeCheckError+0x2380 ; 0x00003380 000023FC: 93DC0000 stw r30,0(r28) a [ i ]:= true end. 00002400: 38210060 addi SP,SP,96 00002404: 80010008 lwz r0,8(SP) 00002408: 7C0803A6 mtlr r0 0000240C: BB41FFE8 lmw r26,-24(SP) 00002410: 00000238 dc.l 0x00000238 ; Invalid opcode '...8'
It jumps from offset 23E0 (the four CR7 bits are 0 1 0 0) to offset 23F8. Let me know if you need more information.
Regards,
Adriaan van Os