|
![](/i/fill.gif) |
In article <slr### [at] fwi com> , Ron Parker
<ron### [at] povray org> wrote:
>> Oh, I could reproduce it on my Mac! So it will be fixed in the next beta.
>> I had to make the code a bit harder to reverse engineer anyway so simple
>> patches like Ron uses for Windows won't work either...
>
> Good luck. :)
Sharing global data in two (cooperative) threads and a bit of platform
specific C code, plus a RISC processor as target, together with a heavily
optimizing compiler. This is the "easy" version (PowerPC code, sorry!) of
the not-yet-linked code, with all symbols in plain text:
RTOC, SP - integer registers with special names
cr0 - special condition code "register"
bl - branch and link (subroutine call)
b - branch unconditional
li(s) - load immediate (signed), extended to 32-bit
lwz - load word
lfd - load floating-point double
stw - store word, 32-bit
srwi - shift right word immediate
mfcr - move from condition code register
Order of instruction parameters is destination followed by one or more
sources, store instructions use reverse order.
Tip: The function is a big while loop and inside a try-catch block.
Hunk: Kind=HUNK_LOCAL_CODE Align=16 Class=PR
Name=".Mac__ThreadProc"(135) Size=520
00000000: 7C0802A6 mflr r0
00000004: BF01FFE0 stmw r24,-32(SP)
00000008: 83220000 lwz r25,gThetmPtr(RTOC)
0000000C: 83420000 lwz r26,gTimeoutFlag(RTOC)
00000010: 83620000 lwz r27,@doubleBase0(RTOC)
00000014: 83820000 lwz r28,gMacThreadStopFlag(RTOC)
00000018: 83020000 lwz r24,Mac__ReceiveHandler__FP9PO...tai(RTOC)
0000001C: 83A20000 lwz r29,gMacMemoryCache(RTOC)
00000020: 83C20000 lwz r30,@stringBase0(RTOC)
00000024: 90010008 stw r0,8(SP)
00000028: 9421FF80 stwu SP,-128(SP)
0000002C: 7C3F0B78 mr r31,SP
00000030: 48000001 bl .povray_init__FPv
00000034: 60000000 nop
00000038: 3C804D69 lis r4,19817
0000003C: 3CA02A2A lis r5,10794
00000040: 7F03C378 mr r3,r24
00000044: 38847363 addi r4,r4,29539
00000048: 38A52A2A addi r5,r5,10794
0000004C: 48000001 bl .POVMS_InstallReceiver
00000050: 60000000 nop
00000054: 3C804F75 lis r4,20341
00000058: 3CA02A2A lis r5,10794
0000005C: 7F03C378 mr r3,r24
00000060: 38847470 addi r4,r4,29808
00000064: 38A52A2A addi r5,r5,10794
00000068: 48000001 bl .POVMS_InstallReceiver
0000006C: 60000000 nop
00000070: 389E00B0 addi r4,r30,176
00000074: 38600000 li r3,0
00000078: 48000001 bl .Warning__FUiPce
0000007C: 60000000 nop
00000080: 903F0050 stw SP,80(r31)
00000084: 48000020 b *+32 ; $000000A4
00000088: C83B0000 lfd fp1,0(r27)
0000008C: C01A0000 lfs fp0,0(r26)
00000090: FC010000 fcmpu cr0,fp1,fp0
00000094: 7C000026 mfcr r0
00000098: 54001FFE extrwi r0,r0,1,2
0000009C: 68000001 xori r0,r0,$0001
000000A0: 981C0000 stb r0,0(r28)
000000A4: 387F0038 addi r3,r31,56
000000A8: 48000001 bl .time
000000AC: 60000000 nop
000000B0: 387F0038 addi r3,r31,56
000000B4: 48000001 bl .localtime
000000B8: 60000000 nop
000000BC: 90790000 stw r3,0(r25)
000000C0: 3C004330 lis r0,17200
000000C4: 3C80000B lis r4,11
000000C8: C85B0008 lfd fp2,8(r27)
000000CC: 80C30014 lwz r6,20(r3)
000000D0: 38A45D71 addi r5,r4,23921
000000D4: 901F0054 stw r0,84(r31)
000000D8: 54A40FFE srwi r4,r5,31
000000DC: 3806076C addi r0,r6,1900
000000E0: C83B0000 lfd fp1,0(r27)
000000E4: 90030014 stw r0,20(r3)
000000E8: 80D90000 lwz r6,0(r25)
000000EC: 80660010 lwz r3,16(r6)
000000F0: 38030001 addi r0,r3,1
000000F4: 90060010 stw r0,16(r6)
000000F8: 80F90000 lwz r7,0(r25)
000000FC: 80C7000C lwz r6,12(r7)
00000100: 80670014 lwz r3,20(r7)
00000104: 80070010 lwz r0,16(r7)
00000108: 1C630174 mulli r3,r3,372
0000010C: 1C00001F mulli r0,r0,31
00000110: 7C003214 add r0,r0,r6
00000114: 7C030214 add r0,r3,r0
00000118: 7C03FE70 srawi r3,r0,31
0000011C: 7C050010 subfc r0,r5,r0
00000120: 7C032114 adde r0,r3,r4
00000124: 5400063E clrlwi r0,r0,24
00000128: 901F0058 stw r0,88(r31)
0000012C: C81F0054 lfd fp0,84(r31)
00000130: EC001028 fsubs fp0,fp0,fp2
00000134: D01A0000 stfs fp0,0(r26)
00000138: C01A0000 lfs fp0,0(r26)
0000013C: FC010000 fcmpu cr0,fp1,fp0
00000140: 41820014 beq *+20 ; $00000154
00000144: 387E00B0 addi r3,r30,176
00000148: 48000001 bl .PossibleError__FPce
0000014C: 60000000 nop
00000150: 4800003C b *+60 ; $0000018C
00000154: 48000001 bl .povray_cooperate__Fv
00000158: 60000000 nop
0000015C: 48000001 bl .YieldToAnyThread
00000160: 60000000 nop
00000164: 881C0000 lbz r0,0(r28)
00000168: 28000000 cmplwi r0,$0000
0000016C: 4182FF1C beq *-228 ; $00000088
00000170: 4800001C b *+28 ; $0000018C
00000174: 387F003C addi r3,r31,60
00000178: 48000001 bl .__end__catch
0000017C: 60000000 nop
00000180: 80010000 lwz r0,0(SP)
00000184: 803F0050 lwz SP,80(r31)
00000188: 90010000 stw r0,0(SP)
0000018C: 3C604D69 lis r3,19817
00000190: 3C802A2A lis r4,10794
00000194: 38637363 addi r3,r3,29539
00000198: 38842A2A addi r4,r4,10794
0000019C: 48000001 bl .POVMS_RemoveReceiver
000001A0: 60000000 nop
000001A4: 3C604F75 lis r3,20341
000001A8: 3C802A2A lis r4,10794
000001AC: 38637470 addi r3,r3,29808
000001B0: 38842A2A addi r4,r4,10794
000001B4: 48000001 bl .POVMS_RemoveReceiver
000001B8: 60000000 nop
000001BC: 48000001 bl .povray_terminate__Fv
000001C0: 60000000 nop
000001C4: 80820000 lwz r4,gMacCallbackBlock(RTOC)
000001C8: 807D0000 lwz r3,0(r29)
000001CC: 80840000 lwz r4,0(r4)
000001D0: 81840064 lwz r12,100(r4)
000001D4: 48000001 bl .__ptr_glue
000001D8: 60000000 nop
000001DC: 80820000 lwz r4,gPOVRayMacThread(RTOC)
000001E0: 38000000 li r0,0
000001E4: 901D0000 stw r0,0(r29)
000001E8: 38600000 li r3,0
000001EC: 981C0000 stb r0,0(r28)
000001F0: 90040000 stw r0,0(r4)
000001F4: 801F0088 lwz r0,136(r31)
000001F8: 80210000 lwz SP,0(SP)
000001FC: 7C0803A6 mtlr r0
00000200: BB01FFE0 lmw r24,-32(SP)
00000204: 4E800020 blr
____________________________________________________
Thorsten Froehlich, Duisburg, Germany
e-mail: tho### [at] trf de
Visit POV-Ray on the web: http://mac.povray.org
Post a reply to this message
|
![](/i/fill.gif) |