What are the optimizations made between -O1 and -O2 on this target? Are optimizations at this level materially different when comparing ARM to x86 output targets?
I ask because enabling -O2 breaks my code on ARM but runs fine all the way up to -O3 on x86. It's no doubt something I'm doing wrong which -O2 is exposing so I thought I'd ask if anyone can suggest what types of error are likely with building with -O2. Prima facie is looks like the object reference ("this" accessed via register r0) is corrupt when execution enters this TACTOR_UPDATE (via an Inherited call). The disassembly, cpu dump and "this reference" below show this but it's not clear to me why or how. Any suggestions welcome! Thanks, Bruce. (gdb) disass Dump of assembler code for function TACTOR__UPDATE: 0x0006f450 <+0>: push {r4, r5, r6, r7, r8, r9, lr} 0x0006f454 <+4>: sub sp, sp, #4 0x0006f458 <+8>: mov r4, r0 0x0006f45c <+12>: mov r5, r1 0x0006f460 <+16>: mov r6, r2 0x0006f464 <+20>: mov r0, #0 0x0006f468 <+24>: bl 0x3b4a4 <fpc_stackcheck> 0x0006f46c <+28>: cmp r6, #7 0x0006f470 <+32>: bne 0x6f504 <TACTOR__UPDATE+180> 0x0006f474 <+36>: ldr r0, [r4, #68] ; 0x44 0x0006f478 <+40>: cmp r0, #0 0x0006f47c <+44>: beq 0x6f4ec <TACTOR__UPDATE+156> 0x0006f480 <+48>: ldr r0, [r4, #100] ; 0x64 0x0006f484 <+52>: cmp r0, r5 0x0006f488 <+56>: bne 0x6f4ec <TACTOR__UPDATE+156> 0x0006f48c <+60>: ldrb r0, [r4, #86] ; 0x56 0x0006f490 <+64>: cmp r0, #0 0x0006f494 <+68>: beq 0x6f4ec <TACTOR__UPDATE+156> 0x0006f498 <+72>: mov r7, #0 0x0006f49c <+76>: sub r7, r7, #1 0x0006f4a0 <+80>: and r7, r7, #255 ; 0xff 0x0006f4a4 <+84>: add r7, r7, #1 0x0006f4a8 <+88>: and r7, r7, #255 ; 0xff 0x0006f4ac <+92>: and r0, r7, #255 ; 0xff 0x0006f4b0 <+96>: ldr r1, [r4, #68] ; 0x44 0x0006f4b4 <+100>: mov r2, #1 0x0006f4b8 <+104>: tst r1, r2, lsl r0 0x0006f4bc <+108>: beq 0x6f4dc <TACTOR__UPDATE+140> 0x0006f4c0 <+112>: mov r2, r7 0x0006f4c4 <+116>: mov r1, r4 0x0006f4c8 <+120>: mov r0, r4 0x0006f4cc <+124>: mov r3, r4 0x0006f4d0 <+128>: ldr r3, [r3] 0x0006f4d4 <+132>: ldr r3, [r3, #256] ; 0x100 0x0006f4d8 <+136>: blx r3 0x0006f4dc <+140>: cmp r7, #25 0x0006f4e0 <+144>: bcc 0x6f4a4 <TACTOR__UPDATE+84> 0x0006f4e4 <+148>: mov r0, #0 0x0006f4e8 <+152>: str r0, [r4, #68] ; 0x44 0x0006f4ec <+156>: ldr r0, [r4, #104] ; 0x68 0x0006f4f0 <+160>: cmp r0, r5 0x0006f4f4 <+164>: bne 0x6f51c <TACTOR__UPDATE+204> 0x0006f4f8 <+168>: mov r0, #0 0x0006f4fc <+172>: str r0, [r4, #60] ; 0x3c 0x0006f500 <+176>: b 0x6f51c <TACTOR__UPDATE+204> 0x0006f504 <+180>: cmp r6, #2 0x0006f508 <+184>: bne 0x6f51c <TACTOR__UPDATE+204> 0x0006f50c <+188>: mov r1, r5 0x0006f510 <+192>: mov r0, r4 0x0006f514 <+196>: mov r2, #0 0x0006f518 <+200>: bl 0x6faac <TACTOR__SUBSCRIBE> 0x0006f51c <+204>: cmp r6, #6 0x0006f520 <+208>: bne 0x6f570 <TACTOR__UPDATE+288> 0x0006f524 <+212>: mov r0, r4 0x0006f528 <+216>: bl 0x6f764 <TACTOR__GETPARENT> 0x0006f52c <+220>: cmp r5, r0 0x0006f530 <+224>: bne 0x6f570 <TACTOR__UPDATE+288> => 0x0006f534 <+228>: ldrb r0, [r5, #86] ; 0x56 0x0006f538 <+232>: cmp r0, #0 0x0006f53c <+236>: beq 0x6f558 <TACTOR__UPDATE+264> 0x0006f540 <+240>: mov r0, r4 0x0006f544 <+244>: mov r1, r4 0x0006f548 <+248>: ldr r1, [r1] 0x0006f54c <+252>: ldr r1, [r1, #240] ; 0xf0 0x0006f550 <+256>: blx r1 0x0006f554 <+260>: b 0x6f614 <TACTOR__UPDATE+452> 0x0006f558 <+264>: mov r0, r4 0x0006f55c <+268>: mov r1, r4 0x0006f560 <+272>: ldr r1, [r1] 0x0006f564 <+276>: ldr r1, [r1, #244] ; 0xf4 0x0006f568 <+280>: blx r1 0x0006f56c <+284>: b 0x6f614 <TACTOR__UPDATE+452> 0x0006f570 <+288>: mov r0, r4 0x0006f574 <+292>: bl 0x119614 <CLASSES$_$TCOMPONENT_$__$$_GETCOMPONENTCOUNT$$LONGINT> 0x0006f578 <+296>: cmp r0, #0 0x0006f57c <+300>: ble 0x6f614 <TACTOR__UPDATE+452> 0x0006f580 <+304>: mov r0, r4 0x0006f584 <+308>: bl 0x119614 <CLASSES$_$TCOMPONENT_$__$$_GETCOMPONENTCOUNT$$LONGINT> 0x0006f588 <+312>: subs r7, r0, #1 0x0006f58c <+316>: bvc 0x6f594 <TACTOR__UPDATE+324> 0x0006f590 <+320>: bl 0x3b2c8 <fpc_overflow> 0x0006f594 <+324>: mov r8, #0 0x0006f598 <+328>: cmp r7, r8 0x0006f59c <+332>: blt 0x6f614 <TACTOR__UPDATE+452> 0x0006f5a0 <+336>: sub r8, r8, #1 0x0006f5a4 <+340>: add r8, r8, #1 0x0006f5a8 <+344>: mov r1, r8 0x0006f5ac <+348>: mov r0, r4 (gdb) info reg r0 0xe 14 r1 0xb58af980 3045783936 r2 0x0 0 r3 0xb2a70 731760 r4 0xb5ad1e70 3048021616 r5 0xb58af980 3045783936 r6 0xb 11 r7 0x4 4 r8 0x0 0 r9 0xb5ad1e70 3048021616 r10 0x4d0d84 5049732 r11 0xbeffeadc 3204442844 r12 0xbeffea70 3204442736 sp 0xbeffea70 0xbeffea70 lr 0x6f578 456056 pc 0x6f580 0x6f580 <TACTOR__UPDATE+304> cpsr 0x20000010 536870928 (gdb) p this $19 = (TACTOR) 0xe
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal