diff --git a/src/main/fragment/_deref_pptz1=pwuz2.asm b/src/main/fragment/_deref_pptz1=pwuz2.asm new file mode 100644 index 000000000..183d1718d --- /dev/null +++ b/src/main/fragment/_deref_pptz1=pwuz2.asm @@ -0,0 +1,6 @@ +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y \ No newline at end of file diff --git a/src/main/fragment/pwuz1=_deref_pptz1.asm b/src/main/fragment/pwuz1=_deref_pptz1.asm new file mode 100644 index 000000000..98dd976ea --- /dev/null +++ b/src/main/fragment/pwuz1=_deref_pptz1.asm @@ -0,0 +1,8 @@ +ldy #0 +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} \ No newline at end of file diff --git a/src/main/fragment/pwuz1=_deref_pptz2.asm b/src/main/fragment/pwuz1=_deref_pptz2.asm new file mode 100644 index 000000000..b3c7c84c7 --- /dev/null +++ b/src/main/fragment/pwuz1=_deref_pptz2.asm @@ -0,0 +1,6 @@ +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 \ No newline at end of file diff --git a/src/main/fragment/vwuz1=_deref_pbuz2_rol_1.asm b/src/main/fragment/vwuz1=_deref_pbuz2_rol_1.asm new file mode 100644 index 000000000..9ce5afc41 --- /dev/null +++ b/src/main/fragment/vwuz1=_deref_pbuz2_rol_1.asm @@ -0,0 +1,7 @@ +ldy #0 +lda {z2} +asl +sta {z1} +lda #0 +rol +sta {z1}+1 diff --git a/src/test/kc/screen-show-spiral-buckets.kc b/src/test/kc/screen-show-spiral-buckets.kc index 0d794e874..2e3a5ad76 100644 --- a/src/test/kc/screen-show-spiral-buckets.kc +++ b/src/test/kc/screen-show-spiral-buckets.kc @@ -11,6 +11,8 @@ const byte[1000] SCREEN_DIST; // = malloc(1000); // Screen containing angle to center const byte[1000] SCREEN_ANGLE; // = malloc(1000); // Screen containing angle to center +const byte[1000] SCREEN_MIX; // = malloc(1000); +// Screen containing angle to center const byte* SCREEN_FILL = 0x0400; // Char to fill with @@ -19,7 +21,15 @@ const byte FILL_CHAR = '@'; void main() { init_dist_screen(SCREEN_DIST); init_angle_screen(SCREEN_ANGLE); - init_buckets(); + { + byte* dist = SCREEN_DIST; + byte* angle = SCREEN_ANGLE; + byte* mix = SCREEN_MIX; + for( word i:0..999) + *mix++ = (*dist++)*4 + (*angle++)/2; + } + + init_buckets(SCREEN_MIX); // Test buckets by animating them byte bucket_idx = 0; @@ -31,7 +41,7 @@ void main() { // First clear the current bucket byte bucket_size = BUCKET_SIZES[bucket_idx]; if(bucket_size>0) { - word* bucket = BUCKETS[bucket_idx]; + word* bucket = BUCKETS[(word)bucket_idx]; for( byte i=0;i0) { - word* bucket = BUCKETS[bucket_idx]; + word* bucket = BUCKETS[(word)bucket_idx]; for( byte i=0;iSCREEN_MIX + sta mix+1 + lda #SCREEN_ANGLE + sta angle+1 + lda #SCREEN_DIST + sta dist+1 + b1: + ldy #0 + lda (dist),y + asl + asl + sta _3 + lda (angle),y + lsr + clc + adc _3 + sta (mix),y + inc mix + bne !+ + inc mix+1 + !: + inc dist + bne !+ + inc dist+1 + !: + inc angle + bne !+ + inc angle+1 + !: + inc i + bne !+ + inc i+1 + !: + lda i+1 + cmp #>$3e8 + bne b1 + lda i + cmp #<$3e8 + bne b1 jsr init_buckets lda #0 sta bucket_idx - b2: + b4: lda #$fe cmp RASTER - bne b2 - b3: + bne b4 + b5: lda #$ff cmp RASTER - bne b3 + bne b5 inc BORDERCOL // First clear the current bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size cmp #0 - beq b6 + beq b8 tya - asl - tay - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y + sta _11 + lda #0 + sta _11+1 + asl _19 + rol _19+1 + clc + lda _23 + adc #BUCKETS + sta _23+1 + ldy #0 + lda (bucket),y + pha + iny + lda (bucket),y sta bucket+1 + pla + sta bucket ldx #0 - b7: + b9: txa asl tay @@ -71,30 +144,38 @@ main: { sta (sc),y inx cpx bucket_size - bcc b7 - b6: - inc bucket_idx - lda #NUM_BUCKETS - cmp bucket_idx - bne b8 - lda #0 - sta bucket_idx + bcc b9 b8: + inc bucket_idx // Plot char in the bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size1 cmp #0 - beq b9 + beq b11 tya - asl - tay - lda BUCKETS,y - sta bucket1 - lda BUCKETS+1,y + sta _16 + lda #0 + sta _16+1 + asl _21 + rol _21+1 + clc + lda _24 + adc #BUCKETS + sta _24+1 + ldy #0 + lda (bucket1),y + pha + iny + lda (bucket1),y sta bucket1+1 + pla + sta bucket1 ldx #0 - b10: + b12: txa asl tay @@ -111,34 +192,41 @@ main: { sta (sc1),y inx cpx bucket_size1 - bcc b10 - b9: + bcc b12 + b11: dec BORDERCOL - jmp b2 + jmp b4 } // Initialize buckets containing indices of chars on the screen with specific distances to the center. init_buckets: { - .label _5 = $d - .label _9 = $39 - .label dist = 3 - .label i1 = 5 - .label bucket = $37 - .label dist_3 = 7 - .label i4 = 9 - .label dist_5 = 7 + .label _5 = $17 + .label _9 = $44 + .label _10 = $46 + .label _12 = $42 + .label _13 = $44 + .label dist = $b + .label i1 = $d + .label i2 = $f + .label bucket = $44 + .label dist_3 = $11 + .label i4 = $13 + .label dist_5 = $11 + .label _15 = $17 + .label _16 = $42 + .label _17 = $44 ldx #0 // Init bucket sizes to 0 b1: lda #0 sta BUCKET_SIZES,x inx - cpx #NUM_BUCKETS-1+1 + cpx #0 bne b1 sta i1 sta i1+1 - lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist+1 b2: ldy #0 @@ -159,25 +247,54 @@ init_buckets: { lda i1 cmp #<$3e8 bne b2 - ldx #0 + lda #<0 + sta i2 + sta i2+1 // Allocate the buckets b3: - lda BUCKET_SIZES,x + lda i2 + clc + adc #BUCKET_SIZES + sta _15+1 + ldy #0 + lda (malloc.size),y asl sta malloc.size - lda #0 + tya rol sta malloc.size+1 jsr malloc - txa + lda i2 asl - tay + sta _12 + lda i2+1 + rol + sta _12+1 + clc + lda _16 + adc #BUCKETS + sta _16+1 + ldy #0 lda _5 - sta BUCKETS,y + sta (_16),y + iny lda _5+1 - sta BUCKETS+1,y - inx - cpx #NUM_BUCKETS-1+1 + sta (_16),y + inc i2 + bne !+ + inc i2+1 + !: + lda i2+1 + cmp #>NUM_BUCKETS-1+1 + bne b3 + lda i2 + cmp #SCREEN_DIST + lda #>SCREEN_MIX sta dist_5+1 b5: ldy #0 lda (dist_5),y tax txa - asl - tay - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y + sta _9 + tya + sta _9+1 + asl _13 + rol _13+1 + clc + lda _17 + adc #BUCKETS + sta _17+1 + lda (bucket),y + pha + iny + lda (bucket),y sta bucket+1 + pla + sta bucket lda dist_5 sec - sbc #SCREEN_DIST - sta _9+1 + sbc #>SCREEN_MIX + sta _10+1 lda BUCKET_IDX,x asl tay - lda _9 + lda _10 sta (bucket),y iny - lda _9+1 + lda _10+1 sta (bucket),y inc BUCKET_IDX,x inc dist_3 @@ -238,10 +368,10 @@ init_buckets: { } // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($d) size) +// malloc(word zeropage($17) size) malloc: { - .label mem = $d - .label size = $d + .label mem = $17 + .label size = $17 lda heap_head sec sbc mem @@ -258,16 +388,16 @@ malloc: { // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center init_angle_screen: { - .label _10 = $1a - .label xw = $3b - .label yw = $3d - .label angle_w = $1a - .label ang_w = $3f - .label x = $14 - .label xb = $15 - .label screen_topline = $12 - .label screen_bottomline = $10 - .label y = $f + .label _10 = $24 + .label xw = $48 + .label yw = $4a + .label angle_w = $24 + .label ang_w = $4c + .label x = $1e + .label xb = $1f + .label screen_topline = $1c + .label screen_bottomline = $1a + .label y = $19 lda #SCREEN_ANGLE+$28*$c @@ -349,18 +479,18 @@ init_angle_screen: { // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($3b) x, signed word zeropage($3d) y) +// atan2_16(signed word zeropage($48) x, signed word zeropage($4a) y) atan2_16: { - .label _2 = $16 - .label _7 = $18 - .label yi = $16 - .label xi = $18 - .label angle = $1a - .label xd = $1e - .label yd = $1c - .label return = $1a - .label x = $3b - .label y = $3d + .label _2 = $20 + .label _7 = $22 + .label yi = $20 + .label xi = $22 + .label angle = $24 + .label xd = $28 + .label yd = $26 + .label return = $24 + .label x = $48 + .label y = $4a lda y+1 bmi !b1+ jmp b1 @@ -539,14 +669,14 @@ atan2_16: { // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center init_dist_screen: { - .label yds = $40 - .label xds = $42 - .label ds = $42 - .label x = $25 - .label xb = $26 - .label screen_topline = $21 - .label screen_bottomline = $23 - .label y = $20 + .label yds = $4d + .label xds = $4f + .label ds = $4f + .label x = $2f + .label xb = $30 + .label screen_topline = $2b + .label screen_bottomline = $2d + .label y = $2a jsr init_squares lda #> (byte) 1 + [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 + [12] *((byte*) main::mix#2) ← (byte~) main::$5 + [13] (byte*) main::mix#1 ← ++ (byte*) main::mix#2 + [14] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 + [15] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 + [16] (word) main::i#1 ← ++ (word) main::i#2 + [17] if((word) main::i#1!=(word) $3e8) goto main::@1 to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 +main::@2: scope:[main] from main::@1 + [18] phi() + [19] call init_buckets to:main::@3 -main::@3: scope:[main] from main::@2 main::@3 - [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 +main::@3: scope:[main] from main::@11 main::@2 + [20] (byte) main::bucket_idx#9 ← phi( main::@11/(byte) main::bucket_idx#1 main::@2/(byte) 0 ) to:main::@4 -main::@4: scope:[main] from main::@3 - [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) - [14] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#11) - [15] if((byte) main::bucket_size#0<=(byte) 0) goto main::@6 +main::@4: scope:[main] from main::@3 main::@4 + [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@4 - [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 - [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) - to:main::@7 -main::@7: scope:[main] from main::@5 main::@7 - [18] (byte) main::i#2 ← phi( main::@7/(byte) main::i#1 main::@5/(byte) 0 ) - [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 - [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) - [21] *((byte*) main::sc#0) ← (byte) ' ' - [22] (byte) main::i#1 ← ++ (byte) main::i#2 - [23] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@7 +main::@5: scope:[main] from main::@4 main::@5 + [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 to:main::@6 -main::@6: scope:[main] from main::@4 main::@7 - [24] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#11 - [25] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@14 - to:main::@8 -main::@14: scope:[main] from main::@6 - [26] phi() - to:main::@8 -main::@8: scope:[main] from main::@14 main::@6 - [27] (byte) main::bucket_idx#6 ← phi( main::@6/(byte) 0 main::@14/(byte) main::bucket_idx#1 ) - [28] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) - [29] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@9 - to:main::@11 -main::@11: scope:[main] from main::@8 - [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 - [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) - to:main::@10 -main::@10: scope:[main] from main::@10 main::@11 - [32] (byte) main::i1#2 ← phi( main::@10/(byte) main::i1#1 main::@11/(byte) 0 ) - [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 - [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) - [35] *((byte*) main::sc1#0) ← (byte) '*' - [36] (byte) main::i1#1 ← ++ (byte) main::i1#2 - [37] if((byte) main::i1#1<(byte) main::bucket_size1#0) goto main::@10 +main::@6: scope:[main] from main::@5 + [23] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) + [24] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#9) + [25] if((byte) main::bucket_size#0<=(byte) 0) goto main::@8 + to:main::@7 +main::@7: scope:[main] from main::@6 + [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 + [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 + [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 + [29] (word*) main::bucket#0 ← *((word**~) main::$23) to:main::@9 -main::@9: scope:[main] from main::@10 main::@8 - [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) - to:main::@1 -init_buckets: scope:[init_buckets] from main::@13 - [39] phi() +main::@9: scope:[main] from main::@7 main::@9 + [30] (byte) main::i1#2 ← phi( main::@7/(byte) 0 main::@9/(byte) main::i1#1 ) + [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 + [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) + [33] *((byte*) main::sc#0) ← (byte) ' ' + [34] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [35] if((byte) main::i1#1<(byte) main::bucket_size#0) goto main::@9 + to:main::@8 +main::@8: scope:[main] from main::@6 main::@9 + [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#9 + [37] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#1) + [38] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@11 + to:main::@10 +main::@10: scope:[main] from main::@8 + [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 + [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 + [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 + [42] (word*) main::bucket1#0 ← *((word**~) main::$24) + to:main::@12 +main::@12: scope:[main] from main::@10 main::@12 + [43] (byte) main::i2#2 ← phi( main::@10/(byte) 0 main::@12/(byte) main::i2#1 ) + [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 + [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) + [46] *((byte*) main::sc1#0) ← (byte) '*' + [47] (byte) main::i2#1 ← ++ (byte) main::i2#2 + [48] if((byte) main::i2#1<(byte) main::bucket_size1#0) goto main::@12 + to:main::@11 +main::@11: scope:[main] from main::@12 main::@8 + [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + to:main::@3 +init_buckets: scope:[init_buckets] from main::@2 + [50] phi() to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - [40] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) - [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 - [42] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 - [43] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 + [51] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) + [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 + [53] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 + [54] if((byte) init_buckets::i#1!=(byte) 0) goto init_buckets::@1 to:init_buckets::@2 init_buckets::@2: scope:[init_buckets] from init_buckets::@1 init_buckets::@2 - [44] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 ) - [44] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@2/(byte*) init_buckets::dist#1 ) - [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) - [46] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 - [47] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 - [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 + [55] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 ) + [55] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_MIX#0 init_buckets::@2/(byte*) init_buckets::dist#1 ) + [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) + [57] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 + [58] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 + [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 to:init_buckets::@3 init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@6 - [49] (byte) init_buckets::i2#2 ← phi( init_buckets::@6/(byte) init_buckets::i2#1 init_buckets::@2/(byte) 0 ) - [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 - [51] call malloc + [60] (word) init_buckets::i2#2 ← phi( init_buckets::@6/(word) init_buckets::i2#1 init_buckets::@2/(word) 0 ) + [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 + [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 + [63] call malloc to:init_buckets::@6 init_buckets::@6: scope:[init_buckets] from init_buckets::@3 - [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 - [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 - [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 - [55] (byte) init_buckets::i2#1 ← ++ (byte) init_buckets::i2#2 - [56] if((byte) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 + [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 + [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 + [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 + [68] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 + [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 to:init_buckets::@4 init_buckets::@4: scope:[init_buckets] from init_buckets::@4 init_buckets::@6 - [57] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 ) - [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 - [59] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 - [60] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 + [70] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 ) + [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 + [72] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 + [73] if((byte) init_buckets::i3#1!=(byte) 0) goto init_buckets::@4 to:init_buckets::@5 init_buckets::@5: scope:[init_buckets] from init_buckets::@4 init_buckets::@5 - [61] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 ) - [61] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@5/(byte*) init_buckets::dist#3 ) - [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 - [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) - [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 - [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 - [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 - [68] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) - [69] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 - [70] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 - [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 + [74] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 ) + [74] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_MIX#0 init_buckets::@5/(byte*) init_buckets::dist#3 ) + [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) + [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 + [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 + [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 + [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) + [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 + [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 + [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 + [83] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) + [84] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 + [85] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 + [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 to:init_buckets::@return init_buckets::@return: scope:[init_buckets] from init_buckets::@5 - [72] return + [87] return to:@return malloc: scope:[malloc] from init_buckets::@3 init_squares - [73] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [73] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 ) - [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 - [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 + [88] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [88] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 ) + [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 + [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [76] return + [91] return to:@return -init_angle_screen: scope:[init_angle_screen] from main::@12 - [77] phi() +init_angle_screen: scope:[init_angle_screen] from main::@13 + [92] phi() to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@3 - [78] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 ) - [78] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 ) - [78] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 ) + [93] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 ) + [93] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 ) + [93] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@4 - [79] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) - [79] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) - [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 - [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 - [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 - [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 - [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 - [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [87] call atan2_16 - [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [94] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) + [94] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) + [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 + [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 + [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 + [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 + [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 + [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [102] call atan2_16 + [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 - [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 - [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 - [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 - [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [99] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [100] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 - [101] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 + [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 + [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 + [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 + [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 + [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [114] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [115] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [116] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 to:init_angle_screen::@3 init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@4 - [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 - [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 - [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 - [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 + [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 + [119] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 + [120] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@3 - [106] return + [121] return to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@2 - [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [109] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [124] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [112] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [127] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [113] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [113] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [113] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [113] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [128] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [128] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [128] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [128] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [115] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [130] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [119] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [134] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [122] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [137] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [123] return + [138] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [124] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [139] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [127] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [127] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [127] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [128] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [142] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [142] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [142] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [143] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [129] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [144] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [132] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [132] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [147] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [147] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 - [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) + [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 + [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [138] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [138] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [138] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [139] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [140] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 + [153] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [153] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [153] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [154] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [155] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [147] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [162] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 init_dist_screen: scope:[init_dist_screen] from main - [150] phi() - [151] call init_squares + [165] phi() + [166] call init_squares to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen init_dist_screen::@9 - [152] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 ) - [152] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0 ) - [152] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 ) - [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [154] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 + [167] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 ) + [167] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0 ) + [167] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 ) + [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [169] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - [156] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) - [157] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [158] call sqr - [159] (word) sqr::return#2 ← (word) sqr::return#0 + [171] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) + [172] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [173] call sqr + [174] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@4 - [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@12 - [161] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 ) - [161] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 ) - [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [163] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 + [176] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 ) + [176] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 ) + [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 + [178] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@8 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 init_dist_screen::@7 - [165] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 ) - [166] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [167] call sqr - [168] (word) sqr::return#3 ← (word) sqr::return#0 + [180] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 ) + [181] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [182] call sqr + [183] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@8 - [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [172] call sqrt - [173] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [187] call sqrt + [188] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@11 - [174] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [179] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [180] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 - [181] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 + [189] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [194] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 + [195] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [196] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@12 - [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 - [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 - [184] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [185] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 + [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 + [199] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [200] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 to:init_dist_screen::@return init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@9 - [186] return + [201] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [187] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [202] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@8 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - [188] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [203] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 sqrt: scope:[sqrt] from init_dist_screen::@11 - [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [191] call bsearch16u - [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [206] call bsearch16u + [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [197] return + [212] return to:@return bsearch16u: scope:[bsearch16u] from sqrt - [198] phi() + [213] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [199] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [199] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [200] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 + [214] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) + [214] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) + [215] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [203] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [218] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [204] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [205] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [214] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 - to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [215] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [215] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [216] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 -sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8 - [217] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) - [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) - to:sqr::@return -sqr::@return: scope:[sqr] from sqr + [219] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) [220] return to:@return +bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 + [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 + [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 + [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 + [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 + to:bsearch16u::@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 + to:bsearch16u::@9 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 + [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 + [230] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) + [230] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) + [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 + to:bsearch16u::@3 +sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8 + [232] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) + [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + to:sqr::@return +sqr::@return: scope:[sqr] from sqr + [235] return + to:@return init_squares: scope:[init_squares] from init_dist_screen - [221] phi() - [222] call malloc + [236] phi() + [237] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [225] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [225] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [225] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [229] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [231] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [232] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [240] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [240] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [240] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [244] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [246] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [247] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [233] return + [248] return to:@return diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index b573717ad..e682feca9 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -1,7 +1,6 @@ Resolved forward reference BUCKET_SIZES to (byte[NUM_BUCKETS]) BUCKET_SIZES -Resolved forward reference NUM_BUCKETS to (byte) NUM_BUCKETS +Resolved forward reference BUCKET_SIZES to (byte[NUM_BUCKETS]) BUCKET_SIZES Resolved forward reference BUCKETS to (word*[NUM_BUCKETS]) BUCKETS -Resolved forward reference BUCKET_SIZES to (byte[NUM_BUCKETS]) BUCKET_SIZES Resolved forward reference BUCKETS to (word*[NUM_BUCKETS]) BUCKETS Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 @@ -11,12 +10,12 @@ Fixing pointer addition (word~) sqrt::$1 ← (word*) sqrt::found - (word*) SQUAR Fixing pointer array-indexing *((word*) SQUARES + (byte) sqr::val) Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) -Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (byte) main::bucket_idx) -Fixing pointer array-indexing *((word*) main::bucket + (byte) main::i) -Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (byte) main::bucket_idx) -Fixing pointer array-indexing *((word*) main::bucket1 + (byte) main::i1) -Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (byte) init_buckets::i2) -Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (byte) init_buckets::distance) +Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (word~) main::$11) +Fixing pointer array-indexing *((word*) main::bucket + (byte) main::i1) +Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (word~) main::$16) +Fixing pointer array-indexing *((word*) main::bucket1 + (byte) main::i2) +Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (word) init_buckets::i2) +Fixing pointer array-indexing *((word*[NUM_BUCKETS]) BUCKETS + (word~) init_buckets::$9) Fixing pointer array-indexing *((word*) init_buckets::bucket + *((byte[NUM_BUCKETS]) BUCKET_IDX + (byte) init_buckets::distance)) Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift Identified constant variable (byte*) HEAP_TOP @@ -52,14 +51,14 @@ Culled Empty Block (label) atan2_16::@31 Culled Empty Block (label) atan2_16::@32 Culled Empty Block (label) atan2_16::@14 Culled Empty Block (label) @11 -Culled Empty Block (label) main::@2 -Culled Empty Block (label) main::@18 -Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@19 Culled Empty Block (label) main::@5 -Culled Empty Block (label) main::@11 -Culled Empty Block (label) main::@16 +Culled Empty Block (label) main::@20 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@17 +Culled Empty Block (label) main::@18 Culled Empty Block (label) init_buckets::@10 Culled Empty Block (label) @14 Culled Empty Block (label) init_angle_screen::@4 @@ -177,7 +176,7 @@ bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@2 (word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4 to:bsearch16u::@return @7: scope:[] from @4 - (byte*) heap_head#53 ← phi( @4/(byte*) heap_head#0 ) + (byte*) heap_head#55 ← phi( @4/(byte*) heap_head#0 ) (byte) NUM_SQUARES#0 ← (number) $ff (word*) SQUARES#0 ← (word*) 0 to:@10 @@ -262,7 +261,7 @@ sqrt::@return: scope:[sqrt] from sqrt::@2 to:@return @10: scope:[] from @7 (word*) SQUARES#40 ← phi( @7/(word*) SQUARES#0 ) - (byte*) heap_head#46 ← phi( @7/(byte*) heap_head#53 ) + (byte*) heap_head#48 ← phi( @7/(byte*) heap_head#55 ) (byte) NUM_SQUARES#29 ← phi( @7/(byte) NUM_SQUARES#0 ) (byte) CORDIC_ITERATIONS_16#0 ← (number) $f (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 ← kickasm {{ .for (var i=0; i (number) 0 - (bool~) main::$6 ← ! (bool~) main::$5 - if((bool~) main::$6) goto main::@9 +main::@6: scope:[main] from main::@3 main::@6 + (word*) SQUARES#49 ← phi( main::@3/(word*) SQUARES#22 main::@6/(word*) SQUARES#49 ) + (byte*) heap_head#61 ← phi( main::@3/(byte*) heap_head#30 main::@6/(byte*) heap_head#61 ) + (byte) NUM_SQUARES#39 ← phi( main::@3/(byte) NUM_SQUARES#15 main::@6/(byte) NUM_SQUARES#39 ) + (byte) main::bucket_idx#8 ← phi( main::@3/(byte) main::bucket_idx#9 main::@6/(byte) main::bucket_idx#8 ) + (bool~) main::$7 ← *((byte*) RASTER#0) != (number) $fe + if((bool~) main::$7) goto main::@6 to:main::@8 -main::@9: scope:[main] from main::@10 main::@7 - (word*) SQUARES#42 ← phi( main::@10/(word*) SQUARES#45 main::@7/(word*) SQUARES#46 ) - (byte*) heap_head#48 ← phi( main::@10/(byte*) heap_head#54 main::@7/(byte*) heap_head#55 ) - (byte) NUM_SQUARES#31 ← phi( main::@10/(byte) NUM_SQUARES#34 main::@7/(byte) NUM_SQUARES#35 ) - (byte) main::bucket_idx#4 ← phi( main::@10/(byte) main::bucket_idx#9 main::@7/(byte) main::bucket_idx#3 ) - (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#4 - (bool~) main::$9 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0 - (bool~) main::$10 ← ! (bool~) main::$9 - if((bool~) main::$10) goto main::@13 - to:main::@12 -main::@8: scope:[main] from main::@7 - (word*) SQUARES#48 ← phi( main::@7/(word*) SQUARES#46 ) - (byte*) heap_head#60 ← phi( main::@7/(byte*) heap_head#55 ) - (byte) NUM_SQUARES#38 ← phi( main::@7/(byte) NUM_SQUARES#35 ) - (byte) main::bucket_size#2 ← phi( main::@7/(byte) main::bucket_size#0 ) - (byte) main::bucket_idx#5 ← phi( main::@7/(byte) main::bucket_idx#3 ) - (byte~) main::$15 ← (byte) main::bucket_idx#5 * (const byte) SIZEOF_POINTER - (word*) main::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) - (byte) main::i#0 ← (number) 0 - to:main::@10 -main::@10: scope:[main] from main::@10 main::@8 - (word*) SQUARES#45 ← phi( main::@10/(word*) SQUARES#45 main::@8/(word*) SQUARES#48 ) - (byte*) heap_head#54 ← phi( main::@10/(byte*) heap_head#54 main::@8/(byte*) heap_head#60 ) - (byte) NUM_SQUARES#34 ← phi( main::@10/(byte) NUM_SQUARES#34 main::@8/(byte) NUM_SQUARES#38 ) - (byte) main::bucket_idx#9 ← phi( main::@10/(byte) main::bucket_idx#9 main::@8/(byte) main::bucket_idx#5 ) - (byte) main::bucket_size#1 ← phi( main::@10/(byte) main::bucket_size#1 main::@8/(byte) main::bucket_size#2 ) - (word*) main::bucket#1 ← phi( main::@10/(word*) main::bucket#1 main::@8/(word*) main::bucket#0 ) - (byte) main::i#2 ← phi( main::@10/(byte) main::i#1 main::@8/(byte) main::i#0 ) - (byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_WORD - (byte*~) main::$7 ← (byte*) SCREEN_FILL#0 + *((word*) main::bucket#1 + (byte~) main::$16) - (byte*) main::sc#0 ← (byte*~) main::$7 - *((byte*) main::sc#0) ← (byte) ' ' - (byte) main::i#1 ← ++ (byte) main::i#2 - (bool~) main::$8 ← (byte) main::i#1 < (byte) main::bucket_size#1 - if((bool~) main::$8) goto main::@10 +main::@8: scope:[main] from main::@6 main::@8 + (word*) SQUARES#47 ← phi( main::@6/(word*) SQUARES#49 main::@8/(word*) SQUARES#47 ) + (byte*) heap_head#56 ← phi( main::@6/(byte*) heap_head#61 main::@8/(byte*) heap_head#56 ) + (byte) NUM_SQUARES#36 ← phi( main::@6/(byte) NUM_SQUARES#39 main::@8/(byte) NUM_SQUARES#36 ) + (byte) main::bucket_idx#6 ← phi( main::@6/(byte) main::bucket_idx#8 main::@8/(byte) main::bucket_idx#6 ) + (bool~) main::$8 ← *((byte*) RASTER#0) != (number) $ff + if((bool~) main::$8) goto main::@8 to:main::@9 -main::@13: scope:[main] from main::@12 main::@9 - (word*) SQUARES#35 ← phi( main::@12/(word*) SQUARES#41 main::@9/(word*) SQUARES#42 ) - (byte*) heap_head#40 ← phi( main::@12/(byte*) heap_head#47 main::@9/(byte*) heap_head#48 ) - (byte) NUM_SQUARES#24 ← phi( main::@12/(byte) NUM_SQUARES#30 main::@9/(byte) NUM_SQUARES#31 ) - (byte) main::bucket_idx#6 ← phi( main::@12/(byte) main::bucket_idx#2 main::@9/(byte) main::bucket_idx#1 ) - (byte) main::bucket_size1#0 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) - (bool~) main::$11 ← (byte) main::bucket_size1#0 > (number) 0 - (bool~) main::$12 ← ! (bool~) main::$11 - if((bool~) main::$12) goto main::@14 - to:main::@20 -main::@12: scope:[main] from main::@9 - (word*) SQUARES#41 ← phi( main::@9/(word*) SQUARES#42 ) - (byte*) heap_head#47 ← phi( main::@9/(byte*) heap_head#48 ) - (byte) NUM_SQUARES#30 ← phi( main::@9/(byte) NUM_SQUARES#31 ) - (byte) main::bucket_idx#2 ← (number) 0 - to:main::@13 -main::@14: scope:[main] from main::@13 main::@15 - (byte) main::bucket_idx#12 ← phi( main::@13/(byte) main::bucket_idx#6 main::@15/(byte) main::bucket_idx#13 ) - (word*) SQUARES#26 ← phi( main::@13/(word*) SQUARES#35 main::@15/(word*) SQUARES#36 ) - (byte*) heap_head#35 ← phi( main::@13/(byte*) heap_head#40 main::@15/(byte*) heap_head#41 ) - (byte) NUM_SQUARES#18 ← phi( main::@13/(byte) NUM_SQUARES#24 main::@15/(byte) NUM_SQUARES#25 ) - *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0) - to:main::@1 -main::@20: scope:[main] from main::@13 - (word*) SQUARES#43 ← phi( main::@13/(word*) SQUARES#35 ) - (byte*) heap_head#49 ← phi( main::@13/(byte*) heap_head#40 ) - (byte) NUM_SQUARES#32 ← phi( main::@13/(byte) NUM_SQUARES#24 ) - (byte) main::bucket_size1#2 ← phi( main::@13/(byte) main::bucket_size1#0 ) - (byte) main::bucket_idx#7 ← phi( main::@13/(byte) main::bucket_idx#6 ) - (byte~) main::$17 ← (byte) main::bucket_idx#7 * (const byte) SIZEOF_POINTER - (word*) main::bucket1#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) - (byte) main::i1#0 ← (number) 0 - to:main::@15 -main::@15: scope:[main] from main::@15 main::@20 - (byte) main::bucket_idx#13 ← phi( main::@15/(byte) main::bucket_idx#13 main::@20/(byte) main::bucket_idx#7 ) - (word*) SQUARES#36 ← phi( main::@15/(word*) SQUARES#36 main::@20/(word*) SQUARES#43 ) - (byte*) heap_head#41 ← phi( main::@15/(byte*) heap_head#41 main::@20/(byte*) heap_head#49 ) - (byte) NUM_SQUARES#25 ← phi( main::@15/(byte) NUM_SQUARES#25 main::@20/(byte) NUM_SQUARES#32 ) - (byte) main::bucket_size1#1 ← phi( main::@15/(byte) main::bucket_size1#1 main::@20/(byte) main::bucket_size1#2 ) - (word*) main::bucket1#1 ← phi( main::@15/(word*) main::bucket1#1 main::@20/(word*) main::bucket1#0 ) - (byte) main::i1#2 ← phi( main::@15/(byte) main::i1#1 main::@20/(byte) main::i1#0 ) - (byte~) main::$18 ← (byte) main::i1#2 * (const byte) SIZEOF_WORD - (byte*~) main::$13 ← (byte*) SCREEN_FILL#0 + *((word*) main::bucket1#1 + (byte~) main::$18) - (byte*) main::sc1#0 ← (byte*~) main::$13 - *((byte*) main::sc1#0) ← (byte) '*' - (byte) main::i1#1 ← ++ (byte) main::i1#2 - (bool~) main::$14 ← (byte) main::i1#1 < (byte) main::bucket_size1#1 - if((bool~) main::$14) goto main::@15 +main::@9: scope:[main] from main::@8 + (word*) SQUARES#43 ← phi( main::@8/(word*) SQUARES#47 ) + (byte*) heap_head#50 ← phi( main::@8/(byte*) heap_head#56 ) + (byte) NUM_SQUARES#32 ← phi( main::@8/(byte) NUM_SQUARES#36 ) + (byte) main::bucket_idx#2 ← phi( main::@8/(byte) main::bucket_idx#6 ) + *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) + (byte) main::bucket_size#0 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#2) + (bool~) main::$9 ← (byte) main::bucket_size#0 > (number) 0 + (bool~) main::$10 ← ! (bool~) main::$9 + if((bool~) main::$10) goto main::@11 + to:main::@10 +main::@11: scope:[main] from main::@12 main::@9 + (word*) SQUARES#35 ← phi( main::@12/(word*) SQUARES#42 main::@9/(word*) SQUARES#43 ) + (byte*) heap_head#42 ← phi( main::@12/(byte*) heap_head#49 main::@9/(byte*) heap_head#50 ) + (byte) NUM_SQUARES#24 ← phi( main::@12/(byte) NUM_SQUARES#31 main::@9/(byte) NUM_SQUARES#32 ) + (byte) main::bucket_idx#3 ← phi( main::@12/(byte) main::bucket_idx#7 main::@9/(byte) main::bucket_idx#2 ) + (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#3 + (byte) main::bucket_size1#0 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#1) + (bool~) main::$14 ← (byte) main::bucket_size1#0 > (number) 0 + (bool~) main::$15 ← ! (bool~) main::$14 + if((bool~) main::$15) goto main::@15 to:main::@14 -main::@return: scope:[main] from main::@1 - (word*) SQUARES#13 ← phi( main::@1/(word*) SQUARES#22 ) - (byte*) heap_head#19 ← phi( main::@1/(byte*) heap_head#30 ) - (byte) NUM_SQUARES#10 ← phi( main::@1/(byte) NUM_SQUARES#15 ) +main::@10: scope:[main] from main::@9 + (word*) SQUARES#48 ← phi( main::@9/(word*) SQUARES#43 ) + (byte*) heap_head#57 ← phi( main::@9/(byte*) heap_head#50 ) + (byte) NUM_SQUARES#37 ← phi( main::@9/(byte) NUM_SQUARES#32 ) + (byte) main::bucket_size#2 ← phi( main::@9/(byte) main::bucket_size#0 ) + (byte) main::bucket_idx#4 ← phi( main::@9/(byte) main::bucket_idx#2 ) + (word~) main::$11 ← ((word)) (byte) main::bucket_idx#4 + (word~) main::$19 ← (word~) main::$11 * (const byte) SIZEOF_POINTER + (word*) main::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19) + (byte) main::i1#0 ← (number) 0 + to:main::@12 +main::@12: scope:[main] from main::@10 main::@12 + (word*) SQUARES#42 ← phi( main::@10/(word*) SQUARES#48 main::@12/(word*) SQUARES#42 ) + (byte*) heap_head#49 ← phi( main::@10/(byte*) heap_head#57 main::@12/(byte*) heap_head#49 ) + (byte) NUM_SQUARES#31 ← phi( main::@10/(byte) NUM_SQUARES#37 main::@12/(byte) NUM_SQUARES#31 ) + (byte) main::bucket_idx#7 ← phi( main::@10/(byte) main::bucket_idx#4 main::@12/(byte) main::bucket_idx#7 ) + (byte) main::bucket_size#1 ← phi( main::@10/(byte) main::bucket_size#2 main::@12/(byte) main::bucket_size#1 ) + (word*) main::bucket#1 ← phi( main::@10/(word*) main::bucket#0 main::@12/(word*) main::bucket#1 ) + (byte) main::i1#2 ← phi( main::@10/(byte) main::i1#0 main::@12/(byte) main::i1#1 ) + (byte~) main::$20 ← (byte) main::i1#2 * (const byte) SIZEOF_WORD + (byte*~) main::$12 ← (byte*) SCREEN_FILL#0 + *((word*) main::bucket#1 + (byte~) main::$20) + (byte*) main::sc#0 ← (byte*~) main::$12 + *((byte*) main::sc#0) ← (byte) ' ' + (byte) main::i1#1 ← ++ (byte) main::i1#2 + (bool~) main::$13 ← (byte) main::i1#1 < (byte) main::bucket_size#1 + if((bool~) main::$13) goto main::@12 + to:main::@11 +main::@15: scope:[main] from main::@11 main::@16 + (byte) main::bucket_idx#10 ← phi( main::@11/(byte) main::bucket_idx#1 main::@16/(byte) main::bucket_idx#11 ) + (word*) SQUARES#26 ← phi( main::@11/(word*) SQUARES#35 main::@16/(word*) SQUARES#36 ) + (byte*) heap_head#36 ← phi( main::@11/(byte*) heap_head#42 main::@16/(byte*) heap_head#43 ) + (byte) NUM_SQUARES#18 ← phi( main::@11/(byte) NUM_SQUARES#24 main::@16/(byte) NUM_SQUARES#25 ) + *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0) + to:main::@3 +main::@14: scope:[main] from main::@11 + (word*) SQUARES#44 ← phi( main::@11/(word*) SQUARES#35 ) + (byte*) heap_head#51 ← phi( main::@11/(byte*) heap_head#42 ) + (byte) NUM_SQUARES#33 ← phi( main::@11/(byte) NUM_SQUARES#24 ) + (byte) main::bucket_size1#2 ← phi( main::@11/(byte) main::bucket_size1#0 ) + (byte) main::bucket_idx#5 ← phi( main::@11/(byte) main::bucket_idx#1 ) + (word~) main::$16 ← ((word)) (byte) main::bucket_idx#5 + (word~) main::$21 ← (word~) main::$16 * (const byte) SIZEOF_POINTER + (word*) main::bucket1#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21) + (byte) main::i2#0 ← (number) 0 + to:main::@16 +main::@16: scope:[main] from main::@14 main::@16 + (byte) main::bucket_idx#11 ← phi( main::@14/(byte) main::bucket_idx#5 main::@16/(byte) main::bucket_idx#11 ) + (word*) SQUARES#36 ← phi( main::@14/(word*) SQUARES#44 main::@16/(word*) SQUARES#36 ) + (byte*) heap_head#43 ← phi( main::@14/(byte*) heap_head#51 main::@16/(byte*) heap_head#43 ) + (byte) NUM_SQUARES#25 ← phi( main::@14/(byte) NUM_SQUARES#33 main::@16/(byte) NUM_SQUARES#25 ) + (byte) main::bucket_size1#1 ← phi( main::@14/(byte) main::bucket_size1#2 main::@16/(byte) main::bucket_size1#1 ) + (word*) main::bucket1#1 ← phi( main::@14/(word*) main::bucket1#0 main::@16/(word*) main::bucket1#1 ) + (byte) main::i2#2 ← phi( main::@14/(byte) main::i2#0 main::@16/(byte) main::i2#1 ) + (byte~) main::$22 ← (byte) main::i2#2 * (const byte) SIZEOF_WORD + (byte*~) main::$17 ← (byte*) SCREEN_FILL#0 + *((word*) main::bucket1#1 + (byte~) main::$22) + (byte*) main::sc1#0 ← (byte*~) main::$17 + *((byte*) main::sc1#0) ← (byte) '*' + (byte) main::i2#1 ← ++ (byte) main::i2#2 + (bool~) main::$18 ← (byte) main::i2#1 < (byte) main::bucket_size1#1 + if((bool~) main::$18) goto main::@16 + to:main::@15 +main::@return: scope:[main] from main::@3 + (word*) SQUARES#13 ← phi( main::@3/(word*) SQUARES#22 ) + (byte*) heap_head#19 ← phi( main::@3/(byte*) heap_head#30 ) + (byte) NUM_SQUARES#10 ← phi( main::@3/(byte) NUM_SQUARES#15 ) (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10 (byte*) heap_head#7 ← (byte*) heap_head#19 (word*) SQUARES#4 ← (word*) SQUARES#13 @@ -647,20 +663,22 @@ main::@return: scope:[main] from main::@1 to:@return @13: scope:[] from @12 (word*) SQUARES#33 ← phi( @12/(word*) SQUARES#37 ) - (byte*) heap_head#39 ← phi( @12/(byte*) heap_head#42 ) + (byte*) heap_head#40 ← phi( @12/(byte*) heap_head#44 ) (byte) NUM_SQUARES#22 ← phi( @12/(byte) NUM_SQUARES#26 ) - (byte) NUM_BUCKETS#0 ← (number) $30 + (word) NUM_BUCKETS#0 ← (number) $100 (byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 ← { fill( NUM_BUCKETS#0, 0) } (word*[NUM_BUCKETS#0]) BUCKETS#0 ← { fill( NUM_BUCKETS#0, 0) } (byte[NUM_BUCKETS#0]) BUCKET_IDX#0 ← { fill( NUM_BUCKETS#0, 0) } to:@16 -init_buckets: scope:[init_buckets] from main::@22 - (byte*) heap_head#61 ← phi( main::@22/(byte*) heap_head#29 ) - (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (number) 1 +init_buckets: scope:[init_buckets] from main::@2 + (byte*) heap_head#62 ← phi( main::@2/(byte*) heap_head#29 ) + (byte*) init_buckets::screen#6 ← phi( main::@2/(byte*) init_buckets::screen#0 ) + (number~) init_buckets::$0 ← (word) NUM_BUCKETS#0 - (number) 1 (byte) init_buckets::i#0 ← (byte) 0 to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - (byte*) heap_head#56 ← phi( init_buckets/(byte*) heap_head#61 init_buckets::@1/(byte*) heap_head#56 ) + (byte*) heap_head#58 ← phi( init_buckets/(byte*) heap_head#62 init_buckets::@1/(byte*) heap_head#58 ) + (byte*) init_buckets::screen#4 ← phi( init_buckets/(byte*) init_buckets::screen#6 init_buckets::@1/(byte*) init_buckets::screen#4 ) (byte) init_buckets::i#2 ← phi( init_buckets/(byte) init_buckets::i#0 init_buckets::@1/(byte) init_buckets::i#1 ) *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0 (byte) init_buckets::i#1 ← (byte) init_buckets::i#2 + rangenext(0,init_buckets::$0) @@ -668,12 +686,14 @@ init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 if((bool~) init_buckets::$1) goto init_buckets::@1 to:init_buckets::@2 init_buckets::@2: scope:[init_buckets] from init_buckets::@1 - (byte*) heap_head#50 ← phi( init_buckets::@1/(byte*) heap_head#56 ) - (byte*) init_buckets::dist#0 ← (byte[$3e8]) SCREEN_DIST#0 + (byte*) heap_head#52 ← phi( init_buckets::@1/(byte*) heap_head#58 ) + (byte*) init_buckets::screen#1 ← phi( init_buckets::@1/(byte*) init_buckets::screen#4 ) + (byte*) init_buckets::dist#0 ← (byte*) init_buckets::screen#1 (word) init_buckets::i1#0 ← (word) 0 to:init_buckets::@3 init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 - (byte*) heap_head#43 ← phi( init_buckets::@2/(byte*) heap_head#50 init_buckets::@3/(byte*) heap_head#43 ) + (byte*) init_buckets::screen#11 ← phi( init_buckets::@2/(byte*) init_buckets::screen#1 init_buckets::@3/(byte*) init_buckets::screen#11 ) + (byte*) heap_head#45 ← phi( init_buckets::@2/(byte*) heap_head#52 init_buckets::@3/(byte*) heap_head#45 ) (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) init_buckets::i1#0 init_buckets::@3/(word) init_buckets::i1#1 ) (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#0 init_buckets::@3/(byte*) init_buckets::dist#1 ) *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) @@ -683,37 +703,42 @@ init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 if((bool~) init_buckets::$2) goto init_buckets::@3 to:init_buckets::@4 init_buckets::@4: scope:[init_buckets] from init_buckets::@3 - (byte*) heap_head#36 ← phi( init_buckets::@3/(byte*) heap_head#43 ) - (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (number) 1 - (byte) init_buckets::i2#0 ← (byte) 0 + (byte*) init_buckets::screen#10 ← phi( init_buckets::@3/(byte*) init_buckets::screen#11 ) + (byte*) heap_head#37 ← phi( init_buckets::@3/(byte*) heap_head#45 ) + (number~) init_buckets::$3 ← (word) NUM_BUCKETS#0 - (number) 1 + (word) init_buckets::i2#0 ← (word) 0 to:init_buckets::@5 init_buckets::@5: scope:[init_buckets] from init_buckets::@11 init_buckets::@4 - (byte*) heap_head#25 ← phi( init_buckets::@11/(byte*) heap_head#8 init_buckets::@4/(byte*) heap_head#36 ) - (byte) init_buckets::i2#2 ← phi( init_buckets::@11/(byte) init_buckets::i2#1 init_buckets::@4/(byte) init_buckets::i2#0 ) - (byte~) init_buckets::$4 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) * (const byte) SIZEOF_POINTER + (byte*) init_buckets::screen#9 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 init_buckets::@4/(byte*) init_buckets::screen#10 ) + (byte*) heap_head#25 ← phi( init_buckets::@11/(byte*) heap_head#8 init_buckets::@4/(byte*) heap_head#37 ) + (word) init_buckets::i2#2 ← phi( init_buckets::@11/(word) init_buckets::i2#1 init_buckets::@4/(word) init_buckets::i2#0 ) + (byte~) init_buckets::$4 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER (word) malloc::size#1 ← (byte~) init_buckets::$4 call malloc (void*) malloc::return#3 ← (void*) malloc::return#1 to:init_buckets::@11 init_buckets::@11: scope:[init_buckets] from init_buckets::@5 - (byte) init_buckets::i2#3 ← phi( init_buckets::@5/(byte) init_buckets::i2#2 ) + (byte*) init_buckets::screen#8 ← phi( init_buckets::@5/(byte*) init_buckets::screen#9 ) + (word) init_buckets::i2#3 ← phi( init_buckets::@5/(word) init_buckets::i2#2 ) (byte*) heap_head#20 ← phi( init_buckets::@5/(byte*) heap_head#2 ) (void*) malloc::return#6 ← phi( init_buckets::@5/(void*) malloc::return#3 ) (void*~) init_buckets::$5 ← (void*) malloc::return#6 (byte*) heap_head#8 ← (byte*) heap_head#20 - (byte~) init_buckets::$11 ← (byte) init_buckets::i2#3 * (const byte) SIZEOF_POINTER - *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← ((word*)) (void*~) init_buckets::$5 - (byte) init_buckets::i2#1 ← (byte) init_buckets::i2#3 + rangenext(0,init_buckets::$3) - (bool~) init_buckets::$6 ← (byte) init_buckets::i2#1 != rangelast(0,init_buckets::$3) + (word~) init_buckets::$12 ← (word) init_buckets::i2#3 * (const byte) SIZEOF_POINTER + *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← ((word*)) (void*~) init_buckets::$5 + (word) init_buckets::i2#1 ← (word) init_buckets::i2#3 + rangenext(0,init_buckets::$3) + (bool~) init_buckets::$6 ← (word) init_buckets::i2#1 != rangelast(0,init_buckets::$3) if((bool~) init_buckets::$6) goto init_buckets::@5 to:init_buckets::@6 init_buckets::@6: scope:[init_buckets] from init_buckets::@11 - (byte*) heap_head#51 ← phi( init_buckets::@11/(byte*) heap_head#8 ) - (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (number) 1 + (byte*) heap_head#53 ← phi( init_buckets::@11/(byte*) heap_head#8 ) + (byte*) init_buckets::screen#7 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 ) + (number~) init_buckets::$7 ← (word) NUM_BUCKETS#0 - (number) 1 (byte) init_buckets::i3#0 ← (byte) 0 to:init_buckets::@7 init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 - (byte*) heap_head#44 ← phi( init_buckets::@6/(byte*) heap_head#51 init_buckets::@7/(byte*) heap_head#44 ) + (byte*) heap_head#46 ← phi( init_buckets::@6/(byte*) heap_head#53 init_buckets::@7/(byte*) heap_head#46 ) + (byte*) init_buckets::screen#5 ← phi( init_buckets::@6/(byte*) init_buckets::screen#7 init_buckets::@7/(byte*) init_buckets::screen#5 ) (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) init_buckets::i3#0 init_buckets::@7/(byte) init_buckets::i3#1 ) *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0 (byte) init_buckets::i3#1 ← (byte) init_buckets::i3#2 + rangenext(0,init_buckets::$7) @@ -721,25 +746,28 @@ init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 if((bool~) init_buckets::$8) goto init_buckets::@7 to:init_buckets::@8 init_buckets::@8: scope:[init_buckets] from init_buckets::@7 - (byte*) heap_head#37 ← phi( init_buckets::@7/(byte*) heap_head#44 ) - (byte*) init_buckets::dist#2 ← (byte[$3e8]) SCREEN_DIST#0 + (byte*) heap_head#38 ← phi( init_buckets::@7/(byte*) heap_head#46 ) + (byte*) init_buckets::screen#2 ← phi( init_buckets::@7/(byte*) init_buckets::screen#5 ) + (byte*) init_buckets::dist#2 ← (byte*) init_buckets::screen#2 (word) init_buckets::i4#0 ← (word) 0 to:init_buckets::@9 init_buckets::@9: scope:[init_buckets] from init_buckets::@8 init_buckets::@9 - (byte*) heap_head#31 ← phi( init_buckets::@8/(byte*) heap_head#37 init_buckets::@9/(byte*) heap_head#31 ) + (byte*) heap_head#31 ← phi( init_buckets::@8/(byte*) heap_head#38 init_buckets::@9/(byte*) heap_head#31 ) (word) init_buckets::i4#2 ← phi( init_buckets::@8/(word) init_buckets::i4#0 init_buckets::@9/(word) init_buckets::i4#1 ) + (byte*) init_buckets::screen#3 ← phi( init_buckets::@8/(byte*) init_buckets::screen#2 init_buckets::@9/(byte*) init_buckets::screen#3 ) (byte*) init_buckets::dist#5 ← phi( init_buckets::@8/(byte*) init_buckets::dist#2 init_buckets::@9/(byte*) init_buckets::dist#3 ) (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 * (const byte) SIZEOF_POINTER - (word*) init_buckets::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) - (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (byte[$3e8]) SCREEN_DIST#0 - (byte~) init_buckets::$13 ← *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD - *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 + (word~) init_buckets::$9 ← ((word)) (byte) init_buckets::distance#0 + (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER + (word*) init_buckets::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13) + (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#3 + (byte~) init_buckets::$14 ← *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD + *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 (word) init_buckets::i4#1 ← (word) init_buckets::i4#2 + rangenext(0,$3e7) - (bool~) init_buckets::$10 ← (word) init_buckets::i4#1 != rangelast(0,$3e7) - if((bool~) init_buckets::$10) goto init_buckets::@9 + (bool~) init_buckets::$11 ← (word) init_buckets::i4#1 != rangelast(0,$3e7) + if((bool~) init_buckets::$11) goto init_buckets::@9 to:init_buckets::@return init_buckets::@return: scope:[init_buckets] from init_buckets::@9 (byte*) heap_head#21 ← phi( init_buckets::@9/(byte*) heap_head#31 ) @@ -876,7 +904,7 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#12 init_dist_screen::@3/(byte) init_dist_screen::y#13 ) (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 ) (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 ) - (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#41 init_dist_screen::@3/(byte) NUM_SQUARES#42 ) + (byte) NUM_SQUARES#40 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#41 init_dist_screen::@3/(byte) NUM_SQUARES#42 ) (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#28 init_dist_screen::@3/(word*) SQUARES#29 ) (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(number~) init_dist_screen::$7 init_dist_screen::@3/(number~) init_dist_screen::$5 ) (byte) init_dist_screen::yd#0 ← (number~) init_dist_screen::$8 @@ -889,8 +917,8 @@ init_dist_screen::@16: scope:[init_dist_screen] from init_dist_screen::@4 (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#11 ) (byte*) init_dist_screen::screen_bottomline#9 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#10 ) (byte*) init_dist_screen::screen_topline#9 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_topline#10 ) - (byte) NUM_SQUARES#36 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#39 ) - (word*) SQUARES#44 ← phi( init_dist_screen::@4/(word*) SQUARES#18 ) + (byte) NUM_SQUARES#38 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#40 ) + (word*) SQUARES#45 ← phi( init_dist_screen::@4/(word*) SQUARES#18 ) (word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 ) (word~) init_dist_screen::$9 ← (word) sqr::return#5 (word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9 @@ -898,14 +926,14 @@ init_dist_screen::@16: scope:[init_dist_screen] from init_dist_screen::@4 (byte) init_dist_screen::xb#0 ← (number) $27 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@16 init_dist_screen::@18 - (byte*) heap_head#62 ← phi( init_dist_screen::@16/(byte*) heap_head#64 init_dist_screen::@18/(byte*) heap_head#38 ) + (byte*) heap_head#63 ← phi( init_dist_screen::@16/(byte*) heap_head#64 init_dist_screen::@18/(byte*) heap_head#39 ) (byte) init_dist_screen::y#9 ← phi( init_dist_screen::@16/(byte) init_dist_screen::y#10 init_dist_screen::@18/(byte) init_dist_screen::y#4 ) (byte) init_dist_screen::xb#7 ← phi( init_dist_screen::@16/(byte) init_dist_screen::xb#0 init_dist_screen::@18/(byte) init_dist_screen::xb#1 ) (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@16/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@18/(byte*) init_dist_screen::screen_bottomline#2 ) (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@16/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@18/(byte*) init_dist_screen::screen_topline#2 ) - (byte) NUM_SQUARES#33 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#36 init_dist_screen::@18/(byte) NUM_SQUARES#21 ) + (byte) NUM_SQUARES#34 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#38 init_dist_screen::@18/(byte) NUM_SQUARES#21 ) (word) init_dist_screen::yds#5 ← phi( init_dist_screen::@16/(word) init_dist_screen::yds#0 init_dist_screen::@18/(word) init_dist_screen::yds#6 ) - (word*) SQUARES#39 ← phi( init_dist_screen::@16/(word*) SQUARES#44 init_dist_screen::@18/(word*) SQUARES#32 ) + (word*) SQUARES#39 ← phi( init_dist_screen::@16/(word*) SQUARES#45 init_dist_screen::@18/(word*) SQUARES#32 ) (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@16/(byte) init_dist_screen::x#0 init_dist_screen::@18/(byte) init_dist_screen::x#1 ) (number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (number) 2 (byte) init_dist_screen::x2#0 ← (number~) init_dist_screen::$10 @@ -913,13 +941,13 @@ init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@16 init_ if((bool~) init_dist_screen::$11) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - (byte*) heap_head#57 ← phi( init_dist_screen::@5/(byte*) heap_head#62 ) + (byte*) heap_head#59 ← phi( init_dist_screen::@5/(byte*) heap_head#63 ) (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 ) (byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 ) (byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 ) (byte) init_dist_screen::x#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 ) (byte*) init_dist_screen::screen_topline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#8 ) - (byte) NUM_SQUARES#27 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#33 ) + (byte) NUM_SQUARES#27 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#34 ) (word) init_dist_screen::yds#3 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#5 ) (word*) SQUARES#30 ← phi( init_dist_screen::@5/(word*) SQUARES#39 ) (byte) init_dist_screen::x2#1 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x2#0 ) @@ -927,13 +955,13 @@ init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 (number~) init_dist_screen::$15 ← (number~) init_dist_screen::$14 to:init_dist_screen::@8 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - (byte*) heap_head#58 ← phi( init_dist_screen::@5/(byte*) heap_head#62 ) + (byte*) heap_head#60 ← phi( init_dist_screen::@5/(byte*) heap_head#63 ) (byte) init_dist_screen::y#8 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 ) (byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 ) (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 ) (byte) init_dist_screen::x#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 ) (byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#8 ) - (byte) NUM_SQUARES#28 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#33 ) + (byte) NUM_SQUARES#28 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#34 ) (word) init_dist_screen::yds#4 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#5 ) (word*) SQUARES#31 ← phi( init_dist_screen::@5/(word*) SQUARES#39 ) (byte) init_dist_screen::x2#2 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x2#0 ) @@ -941,7 +969,7 @@ init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 (number~) init_dist_screen::$13 ← (number~) init_dist_screen::$12 to:init_dist_screen::@8 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 init_dist_screen::@7 - (byte*) heap_head#52 ← phi( init_dist_screen::@6/(byte*) heap_head#57 init_dist_screen::@7/(byte*) heap_head#58 ) + (byte*) heap_head#54 ← phi( init_dist_screen::@6/(byte*) heap_head#59 init_dist_screen::@7/(byte*) heap_head#60 ) (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#7 init_dist_screen::@7/(byte) init_dist_screen::y#8 ) (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#5 init_dist_screen::@7/(byte) init_dist_screen::xb#6 ) (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#7 ) @@ -957,7 +985,7 @@ init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 init_d (word) sqr::return#3 ← (word) sqr::return#1 to:init_dist_screen::@17 init_dist_screen::@17: scope:[init_dist_screen] from init_dist_screen::@8 - (byte*) heap_head#45 ← phi( init_dist_screen::@8/(byte*) heap_head#52 ) + (byte*) heap_head#47 ← phi( init_dist_screen::@8/(byte*) heap_head#54 ) (byte) init_dist_screen::y#5 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#6 ) (byte) init_dist_screen::xb#3 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#4 ) (byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#5 ) @@ -978,7 +1006,7 @@ init_dist_screen::@17: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@18: scope:[init_dist_screen] from init_dist_screen::@17 (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@17/(word) init_dist_screen::yds#1 ) (word*) SQUARES#32 ← phi( init_dist_screen::@17/(word*) SQUARES#20 ) - (byte*) heap_head#38 ← phi( init_dist_screen::@17/(byte*) heap_head#45 ) + (byte*) heap_head#39 ← phi( init_dist_screen::@17/(byte*) heap_head#47 ) (byte) NUM_SQUARES#21 ← phi( init_dist_screen::@17/(byte) NUM_SQUARES#13 ) (byte) init_dist_screen::y#4 ← phi( init_dist_screen::@17/(byte) init_dist_screen::y#5 ) (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@17/(byte) init_dist_screen::xb#3 ) @@ -999,7 +1027,7 @@ init_dist_screen::@18: scope:[init_dist_screen] from init_dist_screen::@17 to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@18 (word*) SQUARES#24 ← phi( init_dist_screen::@18/(word*) SQUARES#32 ) - (byte*) heap_head#33 ← phi( init_dist_screen::@18/(byte*) heap_head#38 ) + (byte*) heap_head#33 ← phi( init_dist_screen::@18/(byte*) heap_head#39 ) (byte) NUM_SQUARES#16 ← phi( init_dist_screen::@18/(byte) NUM_SQUARES#21 ) (byte) init_dist_screen::y#3 ← phi( init_dist_screen::@18/(byte) init_dist_screen::y#4 ) (byte*) init_dist_screen::screen_bottomline#3 ← phi( init_dist_screen::@18/(byte*) init_dist_screen::screen_bottomline#2 ) @@ -1021,7 +1049,7 @@ init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@11 to:@return @16: scope:[] from @13 (word*) SQUARES#25 ← phi( @13/(word*) SQUARES#33 ) - (byte*) heap_head#34 ← phi( @13/(byte*) heap_head#39 ) + (byte*) heap_head#34 ← phi( @13/(byte*) heap_head#40 ) (byte) NUM_SQUARES#17 ← phi( @13/(byte) NUM_SQUARES#22 ) call main to:@17 @@ -1059,8 +1087,8 @@ SYMBOL TABLE SSA (byte) CORDIC_ITERATIONS_16#0 (byte*) HEAP_TOP (byte*) HEAP_TOP#0 -(byte) NUM_BUCKETS -(byte) NUM_BUCKETS#0 +(word) NUM_BUCKETS +(word) NUM_BUCKETS#0 (byte) NUM_SQUARES (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#1 @@ -1115,6 +1143,8 @@ SYMBOL TABLE SSA (byte[$3e8]) SCREEN_DIST#0 (byte*) SCREEN_FILL (byte*) SCREEN_FILL#0 +(byte[$3e8]) SCREEN_MIX +(byte[$3e8]) SCREEN_MIX#0 (const byte) SIZEOF_POINTER = (byte) 2 (const byte) SIZEOF_WORD = (byte) 2 (word*) SQUARES @@ -1570,13 +1600,14 @@ SYMBOL TABLE SSA (byte) init_angle_screen::y#5 (signed word) init_angle_screen::yw (signed word) init_angle_screen::yw#0 -(void()) init_buckets() +(void()) init_buckets((byte*) init_buckets::screen) (number~) init_buckets::$0 (bool~) init_buckets::$1 -(bool~) init_buckets::$10 -(byte~) init_buckets::$11 -(byte~) init_buckets::$12 -(byte~) init_buckets::$13 +(word~) init_buckets::$10 +(bool~) init_buckets::$11 +(word~) init_buckets::$12 +(word~) init_buckets::$13 +(byte~) init_buckets::$14 (bool~) init_buckets::$2 (number~) init_buckets::$3 (byte~) init_buckets::$4 @@ -1615,11 +1646,11 @@ SYMBOL TABLE SSA (word) init_buckets::i1#0 (word) init_buckets::i1#1 (word) init_buckets::i1#2 -(byte) init_buckets::i2 -(byte) init_buckets::i2#0 -(byte) init_buckets::i2#1 -(byte) init_buckets::i2#2 -(byte) init_buckets::i2#3 +(word) init_buckets::i2 +(word) init_buckets::i2#0 +(word) init_buckets::i2#1 +(word) init_buckets::i2#2 +(word) init_buckets::i2#3 (byte) init_buckets::i3 (byte) init_buckets::i3#0 (byte) init_buckets::i3#1 @@ -1628,6 +1659,19 @@ SYMBOL TABLE SSA (word) init_buckets::i4#0 (word) init_buckets::i4#1 (word) init_buckets::i4#2 +(byte*) init_buckets::screen +(byte*) init_buckets::screen#0 +(byte*) init_buckets::screen#1 +(byte*) init_buckets::screen#10 +(byte*) init_buckets::screen#11 +(byte*) init_buckets::screen#2 +(byte*) init_buckets::screen#3 +(byte*) init_buckets::screen#4 +(byte*) init_buckets::screen#5 +(byte*) init_buckets::screen#6 +(byte*) init_buckets::screen#7 +(byte*) init_buckets::screen#8 +(byte*) init_buckets::screen#9 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte*~) init_dist_screen::$1 (number~) init_dist_screen::$10 @@ -1781,37 +1825,45 @@ SYMBOL TABLE SSA (word*) init_squares::squares#2 (void()) main() (bool~) main::$10 -(bool~) main::$11 -(bool~) main::$12 -(byte*~) main::$13 +(word~) main::$11 +(byte*~) main::$12 +(bool~) main::$13 (bool~) main::$14 -(byte~) main::$15 -(byte~) main::$16 -(byte~) main::$17 -(byte~) main::$18 -(bool~) main::$3 -(bool~) main::$4 -(bool~) main::$5 +(bool~) main::$15 +(word~) main::$16 +(byte*~) main::$17 +(bool~) main::$18 +(word~) main::$19 +(byte~) main::$20 +(word~) main::$21 +(byte~) main::$22 +(number~) main::$3 +(number~) main::$4 +(number~) main::$5 (bool~) main::$6 -(byte*~) main::$7 +(bool~) main::$7 (bool~) main::$8 (bool~) main::$9 (label) main::@1 (label) main::@10 +(label) main::@11 (label) main::@12 -(label) main::@13 (label) main::@14 (label) main::@15 -(label) main::@20 +(label) main::@16 +(label) main::@2 (label) main::@21 (label) main::@22 (label) main::@23 -(label) main::@4 +(label) main::@3 (label) main::@6 -(label) main::@7 (label) main::@8 (label) main::@9 (label) main::@return +(byte*) main::angle +(byte*) main::angle#0 +(byte*) main::angle#1 +(byte*) main::angle#2 (word*) main::bucket (word*) main::bucket#0 (word*) main::bucket#1 @@ -1823,8 +1875,6 @@ SYMBOL TABLE SSA (byte) main::bucket_idx#1 (byte) main::bucket_idx#10 (byte) main::bucket_idx#11 -(byte) main::bucket_idx#12 -(byte) main::bucket_idx#13 (byte) main::bucket_idx#2 (byte) main::bucket_idx#3 (byte) main::bucket_idx#4 @@ -1841,14 +1891,26 @@ SYMBOL TABLE SSA (byte) main::bucket_size1#0 (byte) main::bucket_size1#1 (byte) main::bucket_size1#2 -(byte) main::i -(byte) main::i#0 -(byte) main::i#1 -(byte) main::i#2 +(byte*) main::dist +(byte*) main::dist#0 +(byte*) main::dist#1 +(byte*) main::dist#2 +(word) main::i +(word) main::i#0 +(word) main::i#1 +(word) main::i#2 (byte) main::i1 (byte) main::i1#0 (byte) main::i1#1 (byte) main::i1#2 +(byte) main::i2 +(byte) main::i2#0 +(byte) main::i2#1 +(byte) main::i2#2 +(byte*) main::mix +(byte*) main::mix#0 +(byte*) main::mix#1 +(byte*) main::mix#2 (byte*) main::sc (byte*) main::sc#0 (byte*) main::sc1 @@ -1946,22 +2008,26 @@ Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (s Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0 Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9 Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9 +Adding number conversion cast (unumber) 4 in (number~) main::$3 ← *((byte*) main::dist#2) * (number) 4 +Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← *((byte*) main::dist#2) * (unumber)(number) 4 +Adding number conversion cast (unumber) 2 in (number~) main::$4 ← *((byte*) main::angle#2) / (number) 2 +Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← *((byte*) main::angle#2) / (unumber)(number) 2 +Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (unumber~) main::$3 + (unumber~) main::$4 Adding number conversion cast (unumber) 0 in (byte) main::bucket_idx#0 ← (number) 0 -Adding number conversion cast (unumber) $fe in (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $fe -Adding number conversion cast (unumber) $ff in (bool~) main::$4 ← *((byte*) RASTER#0) != (number) $ff -Adding number conversion cast (unumber) 0 in (bool~) main::$5 ← (byte) main::bucket_size#0 > (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (bool~) main::$11 ← (byte) main::bucket_size1#0 > (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::bucket_idx#2 ← (number) 0 +Adding number conversion cast (unumber) $fe in (bool~) main::$7 ← *((byte*) RASTER#0) != (number) $fe +Adding number conversion cast (unumber) $ff in (bool~) main::$8 ← *((byte*) RASTER#0) != (number) $ff +Adding number conversion cast (unumber) 0 in (bool~) main::$9 ← (byte) main::bucket_size#0 > (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← (byte) main::bucket_size1#0 > (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 -Adding number conversion cast (unumber) $30 in (byte) NUM_BUCKETS#0 ← (number) $30 -Adding number conversion cast (unumber) 1 in (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (number) 1 -Adding number conversion cast (unumber) init_buckets::$0 in (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1 +Adding number conversion cast (unumber) 0 in (byte) main::i2#0 ← (number) 0 +Adding number conversion cast (unumber) $100 in (word) NUM_BUCKETS#0 ← (number) $100 +Adding number conversion cast (unumber) 1 in (number~) init_buckets::$0 ← (word) NUM_BUCKETS#0 - (number) 1 +Adding number conversion cast (unumber) init_buckets::$0 in (number~) init_buckets::$0 ← (word) NUM_BUCKETS#0 - (unumber)(number) 1 Adding number conversion cast (unumber) 0 in *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0 -Adding number conversion cast (unumber) 1 in (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (number) 1 -Adding number conversion cast (unumber) init_buckets::$3 in (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 1 in (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (number) 1 -Adding number conversion cast (unumber) init_buckets::$7 in (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1 +Adding number conversion cast (unumber) 1 in (number~) init_buckets::$3 ← (word) NUM_BUCKETS#0 - (number) 1 +Adding number conversion cast (unumber) init_buckets::$3 in (number~) init_buckets::$3 ← (word) NUM_BUCKETS#0 - (unumber)(number) 1 +Adding number conversion cast (unumber) 1 in (number~) init_buckets::$7 ← (word) NUM_BUCKETS#0 - (number) 1 +Adding number conversion cast (unumber) init_buckets::$7 in (number~) init_buckets::$7 ← (word) NUM_BUCKETS#0 - (unumber)(number) 1 Adding number conversion cast (unumber) 0 in *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c @@ -1998,7 +2064,7 @@ Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_hea (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#12 init_dist_screen::@3/(byte) init_dist_screen::y#13 ) (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 ) (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 ) - (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#41 init_dist_screen::@3/(byte) NUM_SQUARES#42 ) + (byte) NUM_SQUARES#40 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#41 init_dist_screen::@3/(byte) NUM_SQUARES#42 ) (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#28 init_dist_screen::@3/(word*) SQUARES#29 ) (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 ) Adding number conversion cast (unumber) 0 in (byte) init_dist_screen::x#0 ← (number) 0 @@ -2012,7 +2078,7 @@ Adding number conversion cast (unumber) init_dist_screen::$15 in (number~) init_ Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$12 ← (number) $27 - (byte) init_dist_screen::x2#2 Adding number conversion cast (unumber) init_dist_screen::$12 in (number~) init_dist_screen::$12 ← (unumber)(number) $27 - (byte) init_dist_screen::x2#2 Adding number conversion cast (unumber) init_dist_screen::$13 in (number~) init_dist_screen::$13 ← (unumber~) init_dist_screen::$12 -Adding number conversion cast (unumber) init_dist_screen::$16 in (byte*) heap_head#52 ← phi( init_dist_screen::@6/(byte*) heap_head#57 init_dist_screen::@7/(byte*) heap_head#58 ) +Adding number conversion cast (unumber) init_dist_screen::$16 in (byte*) heap_head#54 ← phi( init_dist_screen::@6/(byte*) heap_head#59 init_dist_screen::@7/(byte*) heap_head#60 ) (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#7 init_dist_screen::@7/(byte) init_dist_screen::y#8 ) (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#5 init_dist_screen::@7/(byte) init_dist_screen::xb#6 ) (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#7 ) @@ -2040,13 +2106,15 @@ Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (byte*) SCREEN_FILL#0 ← (byte*)(number) $400 Inlining cast (byte) main::bucket_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::bucket_idx#2 ← (unumber)(number) 0 +Inlining cast (word~) main::$11 ← (word)(byte) main::bucket_idx#4 Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 -Inlining cast (byte) NUM_BUCKETS#0 ← (unumber)(number) $30 +Inlining cast (word~) main::$16 ← (word)(byte) main::bucket_idx#5 +Inlining cast (byte) main::i2#0 ← (unumber)(number) 0 +Inlining cast (word) NUM_BUCKETS#0 ← (unumber)(number) $100 Inlining cast *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (unumber)(number) 0 -Inlining cast *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 +Inlining cast *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5 Inlining cast *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (unumber)(number) 0 +Inlining cast (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$5 ← (signed word)(word~) init_angle_screen::$4 @@ -2089,6 +2157,8 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 4 +Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast $fe Simplifying constant integer cast $ff @@ -2096,8 +2166,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $30 +Simplifying constant integer cast $100 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -2161,6 +2230,8 @@ Finalized signed number type (signed byte) 1 Finalized signed number type (signed byte) 1 Finalized signed number type (signed byte) 0 Finalized unsigned number type (word) $8000 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $ff @@ -2168,8 +2239,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $30 +Finalized unsigned number type (word) $100 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -2208,9 +2278,12 @@ Inferred type updated to byte in (unumber~) init_squares::$3 ← (byte) init_squ Inferred type updated to byte in (unumber~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 Inferred type updated to byte in (unumber~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (byte) 1 Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9 -Inferred type updated to byte in (unumber~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (byte) 1 -Inferred type updated to byte in (unumber~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (byte) 1 -Inferred type updated to byte in (unumber~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (byte) 1 +Inferred type updated to byte in (unumber~) main::$3 ← *((byte*) main::dist#2) * (byte) 4 +Inferred type updated to byte in (unumber~) main::$4 ← *((byte*) main::angle#2) / (byte) 2 +Inferred type updated to byte in (unumber~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 +Inferred type updated to word in (unumber~) init_buckets::$0 ← (word) NUM_BUCKETS#0 - (byte) 1 +Inferred type updated to word in (unumber~) init_buckets::$3 ← (word) NUM_BUCKETS#0 - (byte) 1 +Inferred type updated to word in (unumber~) init_buckets::$7 ← (word) NUM_BUCKETS#0 - (byte) 1 Inferred type updated to byte in (unumber~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2 Inferred type updated to byte in (unumber~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 Inferred type updated to byte in (unumber~) init_angle_screen::$6 ← (byte) init_angle_screen::y#2 * (byte) 2 @@ -2236,11 +2309,10 @@ Inversing boolean not [135] (bool~) atan2_16::$18 ← (signed word) atan2_16::yi Inversing boolean not [144] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [143] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 Inversing boolean not [155] (bool~) atan2_16::$20 ← (byte) 0 == (byte) atan2_16::shift#4 from [154] (bool~) atan2_16::$25 ← (byte) 0 != (byte) atan2_16::shift#4 Inversing boolean not [179] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [178] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 -Inversing boolean not [222] (bool~) main::$6 ← (byte) main::bucket_size#0 <= (byte) 0 from [221] (bool~) main::$5 ← (byte) main::bucket_size#0 > (byte) 0 -Inversing boolean not [227] (bool~) main::$10 ← (byte) main::bucket_idx#1 != (byte) NUM_BUCKETS#0 from [226] (bool~) main::$9 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0 -Inversing boolean not [244] (bool~) main::$12 ← (byte) main::bucket_size1#0 <= (byte) 0 from [243] (bool~) main::$11 ← (byte) main::bucket_size1#0 > (byte) 0 +Inversing boolean not [240] (bool~) main::$10 ← (byte) main::bucket_size#0 <= (byte) 0 from [239] (bool~) main::$9 ← (byte) main::bucket_size#0 > (byte) 0 +Inversing boolean not [246] (bool~) main::$15 ← (byte) main::bucket_size1#0 <= (byte) 0 from [245] (bool~) main::$14 ← (byte) main::bucket_size1#0 > (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification -Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#53 (byte*) heap_head#46 (byte*) heap_head#42 (byte*) heap_head#39 (byte*) heap_head#34 +Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#55 (byte*) heap_head#48 (byte*) heap_head#44 (byte*) heap_head#40 (byte*) heap_head#34 Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 Alias (void*) malloc::return#0 = (void*) malloc::return#4 (void*) malloc::return#1 Alias (byte*) heap_head#1 = (byte*) heap_head#14 (byte*) heap_head#2 @@ -2303,35 +2375,39 @@ Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12 Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 -Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#19 -Alias (byte*) heap_head#17 = (byte*) heap_head#5 (byte*) heap_head#29 -Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#34 (word*) SQUARES#27 +Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#35 +Alias (byte*) heap_head#17 = (byte*) heap_head#5 (byte*) heap_head#41 +Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#46 +Alias (byte*) heap_head#29 = (byte*) heap_head#35 +Alias (byte) NUM_SQUARES#19 = (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#30 +Alias (word*) SQUARES#27 = (word*) SQUARES#34 (word*) SQUARES#41 Alias (byte*) heap_head#18 = (byte*) heap_head#6 -Alias (byte) main::bucket_idx#3 = (byte) main::bucket_idx#8 (byte) main::bucket_idx#5 -Alias (byte) NUM_SQUARES#35 = (byte) NUM_SQUARES#37 (byte) NUM_SQUARES#38 -Alias (byte*) heap_head#55 = (byte*) heap_head#59 (byte*) heap_head#60 -Alias (word*) SQUARES#46 = (word*) SQUARES#47 (word*) SQUARES#48 +Alias (byte) main::bucket_idx#2 = (byte) main::bucket_idx#6 (byte) main::bucket_idx#4 +Alias (byte) NUM_SQUARES#32 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#37 +Alias (byte*) heap_head#50 = (byte*) heap_head#56 (byte*) heap_head#57 +Alias (word*) SQUARES#43 = (word*) SQUARES#47 (word*) SQUARES#48 Alias (byte) main::bucket_size#0 = (byte) main::bucket_size#2 -Alias (byte*) main::sc#0 = (byte*~) main::$7 -Alias (byte) NUM_SQUARES#30 = (byte) NUM_SQUARES#31 -Alias (byte*) heap_head#47 = (byte*) heap_head#48 -Alias (word*) SQUARES#41 = (word*) SQUARES#42 -Alias (byte) main::bucket_idx#6 = (byte) main::bucket_idx#7 +Alias (byte*) main::sc#0 = (byte*~) main::$12 +Alias (byte) main::bucket_idx#1 = (byte) main::bucket_idx#5 Alias (byte) main::bucket_size1#0 = (byte) main::bucket_size1#2 -Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#32 -Alias (byte*) heap_head#40 = (byte*) heap_head#49 -Alias (word*) SQUARES#35 = (word*) SQUARES#43 -Alias (byte*) main::sc1#0 = (byte*~) main::$13 +Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#33 +Alias (byte*) heap_head#42 = (byte*) heap_head#51 +Alias (word*) SQUARES#35 = (word*) SQUARES#44 +Alias (byte*) main::sc1#0 = (byte*~) main::$17 Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#2 Alias (byte*) heap_head#19 = (byte*) heap_head#30 (byte*) heap_head#7 Alias (word*) SQUARES#13 = (word*) SQUARES#22 (word*) SQUARES#4 -Alias (byte*) heap_head#50 = (byte*) heap_head#56 -Alias (byte*) heap_head#36 = (byte*) heap_head#43 +Alias (byte*) init_buckets::screen#1 = (byte*) init_buckets::screen#4 (byte*) init_buckets::dist#0 +Alias (byte*) heap_head#52 = (byte*) heap_head#58 +Alias (byte*) heap_head#37 = (byte*) heap_head#45 +Alias (byte*) init_buckets::screen#10 = (byte*) init_buckets::screen#11 Alias (word) malloc::size#1 = (byte~) init_buckets::$4 Alias (void*) malloc::return#3 = (void*) malloc::return#6 -Alias (byte) init_buckets::i2#2 = (byte) init_buckets::i2#3 -Alias (byte*) heap_head#20 = (byte*) heap_head#8 (byte*) heap_head#51 -Alias (byte*) heap_head#37 = (byte*) heap_head#44 +Alias (word) init_buckets::i2#2 = (word) init_buckets::i2#3 +Alias (byte*) init_buckets::screen#7 = (byte*) init_buckets::screen#8 (byte*) init_buckets::screen#9 +Alias (byte*) heap_head#20 = (byte*) heap_head#8 (byte*) heap_head#53 +Alias (byte*) init_buckets::screen#2 = (byte*) init_buckets::screen#5 (byte*) init_buckets::dist#2 +Alias (byte*) heap_head#38 = (byte*) heap_head#46 Alias (byte*) heap_head#21 = (byte*) heap_head#31 (byte*) heap_head#9 Alias (byte*) init_angle_screen::screen_topline#0 = (byte*~) init_angle_screen::$0 Alias (byte*) init_angle_screen::screen_bottomline#0 = (byte*~) init_angle_screen::$1 @@ -2363,8 +2439,8 @@ Alias (byte~) init_dist_screen::$7 = (byte~) init_dist_screen::$6 Alias (byte~) init_dist_screen::$5 = (byte~) init_dist_screen::$4 Alias (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$8 Alias (word) sqr::return#2 = (word) sqr::return#5 -Alias (word*) SQUARES#18 = (word*) SQUARES#44 -Alias (byte) NUM_SQUARES#36 = (byte) NUM_SQUARES#39 +Alias (word*) SQUARES#18 = (word*) SQUARES#45 +Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#40 Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#9 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#9 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#11 @@ -2373,13 +2449,13 @@ Alias (word) init_dist_screen::yds#0 = (word~) init_dist_screen::$9 Alias (byte) init_dist_screen::x2#0 = (byte~) init_dist_screen::$10 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 Alias (word*) SQUARES#30 = (word*) SQUARES#39 (word*) SQUARES#31 Alias (word) init_dist_screen::yds#3 = (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#4 -Alias (byte) NUM_SQUARES#27 = (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#28 +Alias (byte) NUM_SQUARES#27 = (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#28 Alias (byte*) init_dist_screen::screen_topline#6 = (byte*) init_dist_screen::screen_topline#8 (byte*) init_dist_screen::screen_topline#7 Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#6 (byte) init_dist_screen::x#7 Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 (byte*) init_dist_screen::screen_bottomline#7 Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#6 Alias (byte) init_dist_screen::y#7 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#8 -Alias (byte*) heap_head#57 = (byte*) heap_head#62 (byte*) heap_head#58 +Alias (byte*) heap_head#59 = (byte*) heap_head#63 (byte*) heap_head#60 Alias (byte~) init_dist_screen::$15 = (byte~) init_dist_screen::$14 Alias (byte~) init_dist_screen::$13 = (byte~) init_dist_screen::$12 Alias (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 @@ -2392,7 +2468,7 @@ Alias (byte) init_dist_screen::x#3 = (byte) init_dist_screen::x#4 (byte) init_di Alias (byte*) init_dist_screen::screen_bottomline#2 = (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#3 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#3 (byte) init_dist_screen::xb#4 Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#5 (byte) init_dist_screen::y#6 (byte) init_dist_screen::y#4 -Alias (byte*) heap_head#11 = (byte*) heap_head#45 (byte*) heap_head#52 (byte*) heap_head#38 (byte*) heap_head#33 (byte*) heap_head#23 +Alias (byte*) heap_head#11 = (byte*) heap_head#47 (byte*) heap_head#54 (byte*) heap_head#39 (byte*) heap_head#33 (byte*) heap_head#23 Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$17 Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$18 Alias (byte) sqrt::return#2 = (byte) sqrt::return#4 @@ -2412,11 +2488,8 @@ Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#16 Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) atan2_16::x#8 Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 -Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#30 -Alias (byte*) heap_head#40 = (byte*) heap_head#47 -Alias (word*) SQUARES#35 = (word*) SQUARES#41 Alias (word*) SQUARES#18 = (word*) SQUARES#28 -Alias (byte) NUM_SQUARES#36 = (byte) NUM_SQUARES#41 +Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#41 Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#11 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#11 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#12 @@ -2429,7 +2502,7 @@ Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#3 Alias (byte*) init_dist_screen::screen_bottomline#2 = (byte*) init_dist_screen::screen_bottomline#6 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 Alias (byte) init_dist_screen::y#3 = (byte) init_dist_screen::y#7 -Alias (byte*) heap_head#11 = (byte*) heap_head#57 +Alias (byte*) heap_head#11 = (byte*) heap_head#59 Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) bsearch16u::key#1 Self Phi Eliminated (byte*) heap_head#16 @@ -2440,29 +2513,37 @@ Self Phi Eliminated (byte) atan2_16::i#10 Self Phi Eliminated (word) atan2_16::angle#14 Self Phi Eliminated (signed word) atan2_16::x#11 Self Phi Eliminated (signed word) atan2_16::y#10 -Self Phi Eliminated (byte) main::bucket_idx#10 -Self Phi Eliminated (byte) NUM_SQUARES#40 -Self Phi Eliminated (byte*) heap_head#63 +Self Phi Eliminated (byte*) heap_head#29 +Self Phi Eliminated (byte) NUM_SQUARES#19 +Self Phi Eliminated (word*) SQUARES#27 +Self Phi Eliminated (byte) main::bucket_idx#8 +Self Phi Eliminated (byte) NUM_SQUARES#39 +Self Phi Eliminated (byte*) heap_head#61 Self Phi Eliminated (word*) SQUARES#49 -Self Phi Eliminated (byte) main::bucket_idx#3 -Self Phi Eliminated (byte) NUM_SQUARES#35 -Self Phi Eliminated (byte*) heap_head#55 -Self Phi Eliminated (word*) SQUARES#46 +Self Phi Eliminated (byte) main::bucket_idx#2 +Self Phi Eliminated (byte) NUM_SQUARES#32 +Self Phi Eliminated (byte*) heap_head#50 +Self Phi Eliminated (word*) SQUARES#43 Self Phi Eliminated (word*) main::bucket#1 Self Phi Eliminated (byte) main::bucket_size#1 -Self Phi Eliminated (byte) main::bucket_idx#9 -Self Phi Eliminated (byte) NUM_SQUARES#34 -Self Phi Eliminated (byte*) heap_head#54 -Self Phi Eliminated (word*) SQUARES#45 +Self Phi Eliminated (byte) main::bucket_idx#7 +Self Phi Eliminated (byte) NUM_SQUARES#31 +Self Phi Eliminated (byte*) heap_head#49 +Self Phi Eliminated (word*) SQUARES#42 Self Phi Eliminated (word*) main::bucket1#1 Self Phi Eliminated (byte) main::bucket_size1#1 Self Phi Eliminated (byte) NUM_SQUARES#25 -Self Phi Eliminated (byte*) heap_head#41 +Self Phi Eliminated (byte*) heap_head#43 Self Phi Eliminated (word*) SQUARES#36 -Self Phi Eliminated (byte) main::bucket_idx#13 -Self Phi Eliminated (byte*) heap_head#50 -Self Phi Eliminated (byte*) heap_head#36 +Self Phi Eliminated (byte) main::bucket_idx#11 +Self Phi Eliminated (byte*) init_buckets::screen#1 +Self Phi Eliminated (byte*) heap_head#52 Self Phi Eliminated (byte*) heap_head#37 +Self Phi Eliminated (byte*) init_buckets::screen#10 +Self Phi Eliminated (byte*) init_buckets::screen#7 +Self Phi Eliminated (byte*) init_buckets::screen#2 +Self Phi Eliminated (byte*) heap_head#38 +Self Phi Eliminated (byte*) init_buckets::screen#3 Self Phi Eliminated (byte*) heap_head#21 Self Phi Eliminated (byte) init_angle_screen::y#2 Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 @@ -2501,33 +2582,42 @@ Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0 Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11 Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#11 Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15 +Identical Phi Values (byte*) heap_head#29 (byte*) heap_head#17 +Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#1 +Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#12 Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#21 -Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#11 -Identical Phi Values (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#10 -Identical Phi Values (byte*) heap_head#63 (byte*) heap_head#19 +Identical Phi Values (byte) main::bucket_idx#8 (byte) main::bucket_idx#9 +Identical Phi Values (byte) NUM_SQUARES#39 (byte) NUM_SQUARES#10 +Identical Phi Values (byte*) heap_head#61 (byte*) heap_head#19 Identical Phi Values (word*) SQUARES#49 (word*) SQUARES#13 -Identical Phi Values (byte) main::bucket_idx#3 (byte) main::bucket_idx#10 -Identical Phi Values (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#40 -Identical Phi Values (byte*) heap_head#55 (byte*) heap_head#63 -Identical Phi Values (word*) SQUARES#46 (word*) SQUARES#49 +Identical Phi Values (byte) main::bucket_idx#2 (byte) main::bucket_idx#8 +Identical Phi Values (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#39 +Identical Phi Values (byte*) heap_head#50 (byte*) heap_head#61 +Identical Phi Values (word*) SQUARES#43 (word*) SQUARES#49 Identical Phi Values (word*) main::bucket#1 (word*) main::bucket#0 Identical Phi Values (byte) main::bucket_size#1 (byte) main::bucket_size#0 -Identical Phi Values (byte) main::bucket_idx#9 (byte) main::bucket_idx#3 -Identical Phi Values (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#35 -Identical Phi Values (byte*) heap_head#54 (byte*) heap_head#55 -Identical Phi Values (word*) SQUARES#45 (word*) SQUARES#46 +Identical Phi Values (byte) main::bucket_idx#7 (byte) main::bucket_idx#2 +Identical Phi Values (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#32 +Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#50 +Identical Phi Values (word*) SQUARES#42 (word*) SQUARES#43 Identical Phi Values (word*) main::bucket1#1 (word*) main::bucket1#0 Identical Phi Values (byte) main::bucket_size1#1 (byte) main::bucket_size1#0 Identical Phi Values (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#24 -Identical Phi Values (byte*) heap_head#41 (byte*) heap_head#40 +Identical Phi Values (byte*) heap_head#43 (byte*) heap_head#42 Identical Phi Values (word*) SQUARES#36 (word*) SQUARES#35 -Identical Phi Values (byte) main::bucket_idx#13 (byte) main::bucket_idx#6 -Identical Phi Values (byte*) heap_head#61 (byte*) heap_head#17 -Identical Phi Values (byte*) heap_head#50 (byte*) heap_head#61 -Identical Phi Values (byte*) heap_head#36 (byte*) heap_head#50 +Identical Phi Values (byte) main::bucket_idx#11 (byte) main::bucket_idx#1 +Identical Phi Values (byte*) init_buckets::screen#6 (byte*) init_buckets::screen#0 +Identical Phi Values (byte*) heap_head#62 (byte*) heap_head#29 +Identical Phi Values (byte*) init_buckets::screen#1 (byte*) init_buckets::screen#6 +Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#62 +Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#52 +Identical Phi Values (byte*) init_buckets::screen#10 (byte*) init_buckets::screen#1 +Identical Phi Values (byte*) init_buckets::screen#7 (byte*) init_buckets::screen#10 Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1 -Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#20 -Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#37 +Identical Phi Values (byte*) init_buckets::screen#2 (byte*) init_buckets::screen#7 +Identical Phi Values (byte*) heap_head#38 (byte*) heap_head#20 +Identical Phi Values (byte*) init_buckets::screen#3 (byte*) init_buckets::screen#2 +Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#38 Identical Phi Values (byte*) init_angle_screen::screen#1 (byte*) init_angle_screen::screen#0 Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#4 Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#5 @@ -2539,7 +2629,7 @@ Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#16 Identical Phi Values (word*) SQUARES#14 (word*) SQUARES#17 Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#18 Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0 -Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#36 +Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#38 Identical Phi Values (byte*) init_dist_screen::screen_topline#2 (byte*) init_dist_screen::screen_topline#10 Identical Phi Values (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#10 Identical Phi Values (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#10 @@ -2551,14 +2641,14 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18 Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 -Identical Phi Values (byte) main::bucket_idx#4 (byte) main::bucket_idx#11 +Identical Phi Values (byte) main::bucket_idx#3 (byte) main::bucket_idx#9 Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#10 -Identical Phi Values (byte*) heap_head#40 (byte*) heap_head#19 +Identical Phi Values (byte*) heap_head#42 (byte*) heap_head#19 Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#13 Identical Phi Values (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#24 -Identical Phi Values (byte*) heap_head#35 (byte*) heap_head#40 +Identical Phi Values (byte*) heap_head#36 (byte*) heap_head#42 Identical Phi Values (word*) SQUARES#26 (word*) SQUARES#35 -Identical Phi Values (byte) main::bucket_idx#12 (byte) main::bucket_idx#6 +Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bsearch16u::$5 [16] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7 Simple Condition (bool~) bsearch16u::$12 [28] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9 @@ -2574,24 +2664,24 @@ Simple Condition (bool~) atan2_16::$20 [156] if((byte) 0==(byte) atan2_16::shift Simple Condition (bool~) atan2_16::$21 [159] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [176] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 Simple Condition (bool~) atan2_16::$14 [180] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 -Simple Condition (bool~) main::$3 [214] if(*((byte*) RASTER#0)!=(byte) $fe) goto main::@4 -Simple Condition (bool~) main::$4 [217] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@6 -Simple Condition (bool~) main::$6 [223] if((byte) main::bucket_size#0<=(byte) 0) goto main::@9 -Simple Condition (bool~) main::$10 [228] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@13 -Simple Condition (bool~) main::$8 [240] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@10 -Simple Condition (bool~) main::$12 [245] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@14 -Simple Condition (bool~) main::$14 [261] if((byte) main::i1#1<(byte) main::bucket_size1#0) goto main::@15 -Simple Condition (bool~) init_buckets::$1 [279] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 -Simple Condition (bool~) init_buckets::$2 [288] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 -Simple Condition (bool~) init_buckets::$6 [304] if((byte) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 -Simple Condition (bool~) init_buckets::$8 [312] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 -Simple Condition (bool~) init_buckets::$10 [327] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 -Simple Condition (bool~) init_angle_screen::$15 [372] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 -Simple Condition (bool~) init_angle_screen::$16 [378] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 -Simple Condition (bool~) init_dist_screen::$3 [394] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -Simple Condition (bool~) init_dist_screen::$11 [415] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -Simple Condition (bool~) init_dist_screen::$20 [445] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 -Simple Condition (bool~) init_dist_screen::$21 [451] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 +Simple Condition (bool~) main::$6 [221] if((word) main::i#1!=rangelast(0,$3e7)) goto main::@1 +Simple Condition (bool~) main::$7 [232] if(*((byte*) RASTER#0)!=(byte) $fe) goto main::@6 +Simple Condition (bool~) main::$8 [235] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@8 +Simple Condition (bool~) main::$10 [241] if((byte) main::bucket_size#0<=(byte) 0) goto main::@11 +Simple Condition (bool~) main::$15 [247] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@15 +Simple Condition (bool~) main::$13 [260] if((byte) main::i1#1<(byte) main::bucket_size#0) goto main::@12 +Simple Condition (bool~) main::$18 [275] if((byte) main::i2#1<(byte) main::bucket_size1#0) goto main::@16 +Simple Condition (bool~) init_buckets::$1 [293] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 +Simple Condition (bool~) init_buckets::$2 [302] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 +Simple Condition (bool~) init_buckets::$6 [318] if((word) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 +Simple Condition (bool~) init_buckets::$8 [326] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 +Simple Condition (bool~) init_buckets::$11 [342] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 +Simple Condition (bool~) init_angle_screen::$15 [387] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 +Simple Condition (bool~) init_angle_screen::$16 [393] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 +Simple Condition (bool~) init_dist_screen::$3 [409] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 +Simple Condition (bool~) init_dist_screen::$11 [430] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 +Simple Condition (bool~) init_dist_screen::$20 [460] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 +Simple Condition (bool~) init_dist_screen::$21 [466] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [176] if((byte) atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement @@ -2599,6 +2689,7 @@ Constant right-side identified [44] (byte~) bsearch16u::$17 ← (byte) 1 * (cons Constant right-side identified [51] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD Constant right-side identified [193] (byte[$3e8]) SCREEN_DIST#0 ← { fill( $3e8, 0) } Constant right-side identified [194] (byte[$3e8]) SCREEN_ANGLE#0 ← { fill( $3e8, 0) } +Constant right-side identified [195] (byte[$3e8]) SCREEN_MIX#0 ← { fill( $3e8, 0) } Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) RASTER#0 = (byte*) 53266 Constant (const byte*) BORDERCOL#0 = (byte*) 53280 @@ -2617,15 +2708,16 @@ Constant (const word) atan2_16::angle#0 = 0 Constant (const byte) atan2_16::i#0 = 0 Constant (const byte[$3e8]) SCREEN_DIST#0 = { fill( $3e8, 0) } Constant (const byte[$3e8]) SCREEN_ANGLE#0 = { fill( $3e8, 0) } +Constant (const byte[$3e8]) SCREEN_MIX#0 = { fill( $3e8, 0) } Constant (const byte*) SCREEN_FILL#0 = (byte*) 1024 +Constant (const word) main::i#0 = 0 Constant (const byte) main::bucket_idx#0 = 0 -Constant (const byte) main::i#0 = 0 -Constant (const byte) main::bucket_idx#2 = 0 Constant (const byte) main::i1#0 = 0 -Constant (const byte) NUM_BUCKETS#0 = $30 +Constant (const byte) main::i2#0 = 0 +Constant (const word) NUM_BUCKETS#0 = $100 Constant (const byte) init_buckets::i#0 = 0 Constant (const word) init_buckets::i1#0 = 0 -Constant (const byte) init_buckets::i2#0 = 0 +Constant (const word) init_buckets::i2#0 = 0 Constant (const byte) init_buckets::i3#0 = 0 Constant (const word) init_buckets::i4#0 = 0 Constant (const byte) init_angle_screen::y#0 = 0 @@ -2638,25 +2730,35 @@ Constant (const byte) init_dist_screen::xb#0 = $27 Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) init_dist_screen::screen#0 = SCREEN_DIST#0 Constant (const byte*) init_angle_screen::screen#0 = SCREEN_ANGLE#0 -Constant (const byte*) init_buckets::dist#0 = SCREEN_DIST#0 -Constant (const byte*) init_buckets::dist#2 = SCREEN_DIST#0 +Constant (const byte*) main::dist#0 = SCREEN_DIST#0 +Constant (const byte*) main::angle#0 = SCREEN_ANGLE#0 +Constant (const byte*) main::mix#0 = SCREEN_MIX#0 +Constant (const byte*) init_buckets::screen#0 = SCREEN_MIX#0 Successful SSA optimization Pass2ConstantIdentification -Constant value identified { fill( NUM_BUCKETS#0, 0) } in [269] (byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 ← { fill( NUM_BUCKETS#0, 0) } -Constant value identified { fill( NUM_BUCKETS#0, 0) } in [270] (word*[NUM_BUCKETS#0]) BUCKETS#0 ← { fill( NUM_BUCKETS#0, 0) } -Constant value identified { fill( NUM_BUCKETS#0, 0) } in [271] (byte[NUM_BUCKETS#0]) BUCKET_IDX#0 ← { fill( NUM_BUCKETS#0, 0) } +Constant value identified { fill( NUM_BUCKETS#0, 0) } in [283] (byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 ← { fill( NUM_BUCKETS#0, 0) } +Constant value identified { fill( NUM_BUCKETS#0, 0) } in [284] (word*[NUM_BUCKETS#0]) BUCKETS#0 ← { fill( NUM_BUCKETS#0, 0) } +Constant value identified { fill( NUM_BUCKETS#0, 0) } in [285] (byte[NUM_BUCKETS#0]) BUCKET_IDX#0 ← { fill( NUM_BUCKETS#0, 0) } Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [211] if(true) goto main::@4 +if() condition always true - replacing block destination [229] if(true) goto main::@6 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [286] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++ -Resolved ranged comparison value [288] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8 -Resolved ranged next value [325] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++ -Resolved ranged comparison value [327] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8 -Resolved ranged next value [376] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++ -Resolved ranged comparison value [378] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d -Resolved ranged next value [449] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ -Resolved ranged comparison value [451] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d -Rewriting conditional comparison [372] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 -Rewriting conditional comparison [445] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 +Resolved ranged next value [219] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [221] if(main::i#1!=rangelast(0,$3e7)) goto main::@1 to (number) $3e8 +Resolved ranged next value [300] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++ +Resolved ranged comparison value [302] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8 +Resolved ranged next value [340] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++ +Resolved ranged comparison value [342] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8 +Resolved ranged next value [391] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++ +Resolved ranged comparison value [393] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d +Resolved ranged next value [464] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ +Resolved ranged comparison value [466] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d +Rewriting conditional comparison [387] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 +Rewriting conditional comparison [460] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 +De-inlining pointer[w] to *(pointer+w) [251] (word*) main::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19) +De-inlining pointer[w] to *(pointer+w) [266] (word*) main::bucket1#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21) +De-inlining pointer[w] to *(pointer+w) [307] (word) malloc::size#1 ← *((byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER +De-inlining pointer[w] to *(pointer+w) [315] *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5 +De-inlining pointer[w] to *(pointer+w) [334] (word*) init_buckets::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13) +Successful SSA optimization Pass2DeInlineWordDerefIdx Eliminating unused variable - keeping the phi block (byte) NUM_SQUARES#10 Eliminating unused variable - keeping the phi block (byte*) heap_head#19 Eliminating unused variable - keeping the phi block (word*) SQUARES#13 @@ -2665,6 +2767,7 @@ Eliminating unused constant (const word*) SQUARES#0 Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks +Adding number conversion cast (unumber) $3e8 in if((word) main::i#1!=(number) $3e8) goto main::@1 Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i1#1!=(number) $3e8) goto init_buckets::@3 Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i4#1!=(number) $3e8) goto init_buckets::@9 Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#1<(byte) $13+(number) 1) goto init_angle_screen::@2 @@ -2676,6 +2779,7 @@ Adding number conversion cast (unumber) $d in if((byte) init_dist_screen::y#1!=( Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 +Simplifying constant integer cast $3e8 Simplifying constant integer cast (byte~) init_angle_screen::$3 Simplifying constant integer cast (byte~) init_angle_screen::$6 Simplifying constant integer cast (byte) $13+(unumber)(number) 1 @@ -2687,6 +2791,7 @@ Simplifying constant integer cast $d Successful SSA optimization PassNCastSimplification Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8 +Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 @@ -2695,13 +2800,13 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Self Phi Eliminated (signed word) atan2_16::x#17 Self Phi Eliminated (signed word) atan2_16::y#19 Self Phi Eliminated (word*) SQUARES#18 -Self Phi Eliminated (byte) NUM_SQUARES#36 +Self Phi Eliminated (byte) NUM_SQUARES#38 Self Phi Eliminated (byte*) heap_head#64 Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0 Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0 Identical Phi Values (word*) SQUARES#18 (word*) SQUARES#1 -Identical Phi Values (byte) NUM_SQUARES#36 (const byte) NUM_SQUARES#3 +Identical Phi Values (byte) NUM_SQUARES#38 (const byte) NUM_SQUARES#3 Identical Phi Values (byte*) heap_head#64 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#1 @@ -2709,12 +2814,12 @@ Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD Constant right-side identified [30] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1 Constant right-side identified [60] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1 -Constant right-side identified [127] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [137] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [147] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [164] (byte*) init_angle_screen::screen_topline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -Constant right-side identified [165] (byte*) init_angle_screen::screen_bottomline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -Constant right-side identified [198] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 +Constant right-side identified [139] (word~) init_buckets::$0 ← (const word) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [149] (word~) init_buckets::$3 ← (const word) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [161] (word~) init_buckets::$7 ← (const word) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [180] (byte*) init_angle_screen::screen_topline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c +Constant right-side identified [181] (byte*) init_angle_screen::screen_bottomline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c +Constant right-side identified [214] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1 @@ -2723,9 +2828,9 @@ Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 = { fill( NUM_BUCKETS#0, 0) } Constant (const word*[NUM_BUCKETS#0]) BUCKETS#0 = { fill( NUM_BUCKETS#0, 0) } Constant (const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 = { fill( NUM_BUCKETS#0, 0) } -Constant (const byte) init_buckets::$0 = NUM_BUCKETS#0-1 -Constant (const byte) init_buckets::$3 = NUM_BUCKETS#0-1 -Constant (const byte) init_buckets::$7 = NUM_BUCKETS#0-1 +Constant (const word) init_buckets::$0 = NUM_BUCKETS#0-1 +Constant (const word) init_buckets::$3 = NUM_BUCKETS#0-1 +Constant (const word) init_buckets::$7 = NUM_BUCKETS#0-1 Constant (const byte*) init_angle_screen::screen_topline#0 = init_angle_screen::screen#0+(word)$28*$c Constant (const byte*) init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0+(word)$28*$c Constant (const byte*) init_dist_screen::screen_bottomline#0 = init_dist_screen::screen#0+(word)$28*$18 @@ -2734,50 +2839,49 @@ Resolved ranged next value [37] init_squares::i#1 ← ++ init_squares::i#2 to ++ Resolved ranged comparison value [38] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1 Resolved ranged next value [85] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [86] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1 -Resolved ranged next value [130] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ -Resolved ranged comparison value [131] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1 -Resolved ranged next value [145] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ -Resolved ranged comparison value [146] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1 -Resolved ranged next value [150] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ -Resolved ranged comparison value [151] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1 +Resolved ranged next value [142] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ +Resolved ranged comparison value [143] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (number) 0 +Resolved ranged next value [159] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ +Resolved ranged comparison value [160] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const word) init_buckets::$3+(number) 1 +Resolved ranged next value [164] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ +Resolved ranged comparison value [165] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (number) 0 +Eliminating unused constant (const word) init_buckets::$0 +Eliminating unused constant (const word) init_buckets::$7 +Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1 Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17 -Adding number conversion cast (unumber) init_buckets::$0+1 in if((byte) init_buckets::i#1!=(const byte) init_buckets::$0+(number) 1) goto init_buckets::@1 -Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i#1!=(unumber)(const byte) init_buckets::$0+(number) 1) goto init_buckets::@1 -Adding number conversion cast (unumber) init_buckets::$3+1 in if((byte) init_buckets::i2#1!=(const byte) init_buckets::$3+(number) 1) goto init_buckets::@5 -Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i2#1!=(unumber)(const byte) init_buckets::$3+(number) 1) goto init_buckets::@5 -Adding number conversion cast (unumber) init_buckets::$7+1 in if((byte) init_buckets::i3#1!=(const byte) init_buckets::$7+(number) 1) goto init_buckets::@7 -Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i3#1!=(unumber)(const byte) init_buckets::$7+(number) 1) goto init_buckets::@7 +Adding number conversion cast (unumber) 0 in if((byte) init_buckets::i#1!=(number) 0) goto init_buckets::@1 +Adding number conversion cast (unumber) init_buckets::$3+1 in if((word) init_buckets::i2#1!=(const word) init_buckets::$3+(number) 1) goto init_buckets::@5 +Adding number conversion cast (unumber) 1 in if((word) init_buckets::i2#1!=(unumber)(const word) init_buckets::$3+(number) 1) goto init_buckets::@5 +Adding number conversion cast (unumber) 0 in if((byte) init_buckets::i3#1!=(number) 0) goto init_buckets::@7 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast (const byte) init_squares::$2+(unumber)(number) 1 Simplifying constant integer cast 1 Simplifying constant integer cast (const byte) atan2_16::$16+(unumber)(number) 1 Simplifying constant integer cast 1 -Simplifying constant integer cast (const byte) init_buckets::$0+(unumber)(number) 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast (const byte) init_buckets::$3+(unumber)(number) 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast (const byte) init_buckets::$7+(unumber)(number) 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast (const word) init_buckets::$3+(unumber)(number) 1 Simplifying constant integer cast 1 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [10] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0 Inlining Noop Cast [11] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0) Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [25] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 -Inlining Noop Cast [132] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [145] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [27] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1 -Inlining Noop Cast [159] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0 -Inlining Noop Cast [162] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$7 keeping init_angle_screen::yw#0 +Inlining Noop Cast [175] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0 +Inlining Noop Cast [178] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$7 keeping init_angle_screen::yw#0 Successful SSA optimization Pass2NopCastInlining Rewriting multiplication to use shift [8] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [32] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2 @@ -2786,18 +2890,20 @@ Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$3 / (co Rewriting division to use shift [60] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [74] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [78] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [100] (byte~) main::$15 ← (byte) main::bucket_idx#11 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [103] (byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [112] (byte~) main::$17 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [115] (byte~) main::$18 ← (byte) main::i1#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [130] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [134] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [144] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [147] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [156] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2 -Rewriting multiplication to use shift [160] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2 -Rewriting multiplication to use shift [187] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 -Rewriting multiplication to use shift [197] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [92] (byte~) main::$3 ← *((byte*) main::dist#2) * (byte) 4 +Rewriting division to use shift [93] (byte~) main::$4 ← *((byte*) main::angle#2) / (byte) 2 +Rewriting multiplication to use shift [112] (word~) main::$19 ← (word~) main::$11 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [116] (byte~) main::$20 ← (byte) main::i1#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [123] (word~) main::$21 ← (word~) main::$16 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [127] (byte~) main::$22 ← (byte) main::i2#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [143] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [147] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [159] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [163] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [172] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [176] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2 +Rewriting multiplication to use shift [203] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 +Rewriting multiplication to use shift [213] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) malloc::size#0 Inlining constant with var siblings (const byte) bsearch16u::num#2 @@ -2805,17 +2911,18 @@ Inlining constant with var siblings (const word) init_squares::sqr#0 Inlining constant with var siblings (const byte) init_squares::i#0 Inlining constant with var siblings (const word) atan2_16::angle#0 Inlining constant with var siblings (const byte) atan2_16::i#0 +Inlining constant with var siblings (const word) main::i#0 Inlining constant with var siblings (const byte) main::bucket_idx#0 -Inlining constant with var siblings (const byte) main::i#0 -Inlining constant with var siblings (const byte) main::bucket_idx#2 Inlining constant with var siblings (const byte) main::i1#0 +Inlining constant with var siblings (const byte) main::i2#0 +Inlining constant with var siblings (const byte*) main::dist#0 +Inlining constant with var siblings (const byte*) main::angle#0 +Inlining constant with var siblings (const byte*) main::mix#0 Inlining constant with var siblings (const byte) init_buckets::i#0 Inlining constant with var siblings (const word) init_buckets::i1#0 -Inlining constant with var siblings (const byte) init_buckets::i2#0 +Inlining constant with var siblings (const word) init_buckets::i2#0 Inlining constant with var siblings (const byte) init_buckets::i3#0 Inlining constant with var siblings (const word) init_buckets::i4#0 -Inlining constant with var siblings (const byte*) init_buckets::dist#0 -Inlining constant with var siblings (const byte*) init_buckets::dist#2 Inlining constant with var siblings (const byte) init_angle_screen::y#0 Inlining constant with var siblings (const byte) init_angle_screen::x#0 Inlining constant with var siblings (const byte) init_angle_screen::xb#0 @@ -2837,24 +2944,24 @@ Constant inlined init_dist_screen::y#0 = (byte) 0 Constant inlined init_dist_screen::xb#0 = (byte) $27 Constant inlined init_dist_screen::x#0 = (byte) 0 Constant inlined init_angle_screen::screen#0 = (const byte[$3e8]) SCREEN_ANGLE#0 -Constant inlined main::i#0 = (byte) 0 +Constant inlined main::i#0 = (word) 0 Constant inlined main::i1#0 = (byte) 0 -Constant inlined main::bucket_idx#2 = (byte) 0 +Constant inlined main::i2#0 = (byte) 0 Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1 Constant inlined init_buckets::i3#0 = (byte) 0 -Constant inlined init_buckets::i2#0 = (byte) 0 +Constant inlined init_buckets::i2#0 = (word) 0 Constant inlined init_buckets::i4#0 = (word) 0 -Constant inlined init_buckets::$0 = (const byte) NUM_BUCKETS#0-(byte) 1 +Constant inlined init_buckets::screen#0 = (const byte[$3e8]) SCREEN_MIX#0 Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3 Constant inlined init_angle_screen::xb#0 = (byte) $27 Constant inlined atan2_16::i#0 = (byte) 0 -Constant inlined init_buckets::$7 = (const byte) NUM_BUCKETS#0-(byte) 1 +Constant inlined main::mix#0 = (const byte[$3e8]) SCREEN_MIX#0 +Constant inlined main::angle#0 = (const byte[$3e8]) SCREEN_ANGLE#0 Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD +Constant inlined main::dist#0 = (const byte[$3e8]) SCREEN_DIST#0 Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD -Constant inlined init_buckets::$3 = (const byte) NUM_BUCKETS#0-(byte) 1 +Constant inlined init_buckets::$3 = (const word) NUM_BUCKETS#0-(byte) 1 Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD -Constant inlined init_buckets::dist#0 = (const byte[$3e8]) SCREEN_DIST#0 -Constant inlined init_buckets::dist#2 = (const byte[$3e8]) SCREEN_DIST#0 Constant inlined init_dist_screen::screen#0 = (const byte[$3e8]) SCREEN_DIST#0 Constant inlined init_angle_screen::screen_topline#0 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c Constant inlined init_dist_screen::screen_bottomline#0 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 @@ -2871,9 +2978,9 @@ Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2 Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25) Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7) Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8) -Added new block during phi lifting main::@24(between main::@10 and main::@10) -Added new block during phi lifting main::@25(between main::@9 and main::@13) -Added new block during phi lifting main::@26(between main::@15 and main::@15) +Added new block during phi lifting main::@24(between main::@1 and main::@1) +Added new block during phi lifting main::@25(between main::@12 and main::@12) +Added new block during phi lifting main::@26(between main::@16 and main::@16) Added new block during phi lifting init_buckets::@12(between init_buckets::@1 and init_buckets::@1) Added new block during phi lifting init_buckets::@13(between init_buckets::@3 and init_buckets::@3) Added new block during phi lifting init_buckets::@14(between init_buckets::@11 and init_buckets::@5) @@ -2895,8 +3002,8 @@ Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@21 Adding NOP phi() at start of main::@22 +Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@23 -Adding NOP phi() at start of main::@12 Adding NOP phi() at start of init_buckets Adding NOP phi() at start of init_buckets::@2 Adding NOP phi() at start of init_buckets::@4 @@ -2908,101 +3015,105 @@ Adding NOP phi() at start of init_dist_screen::@15 Adding NOP phi() at start of init_squares CALL GRAPH Calls in [] to main:7 -Calls in [main] to init_dist_screen:11 init_angle_screen:13 init_buckets:15 -Calls in [init_buckets] to malloc:66 -Calls in [init_angle_screen] to atan2_16:111 -Calls in [init_dist_screen] to init_squares:207 sqr:217 sqr:228 sqrt:233 -Calls in [sqrt] to bsearch16u:259 -Calls in [init_squares] to malloc:299 +Calls in [main] to init_dist_screen:11 init_angle_screen:13 init_buckets:26 +Calls in [init_buckets] to malloc:82 +Calls in [init_angle_screen] to atan2_16:130 +Calls in [init_dist_screen] to init_squares:226 sqr:236 sqr:247 sqrt:252 +Calls in [sqrt] to bsearch16u:278 +Calls in [init_squares] to malloc:318 -Created 52 initial phi equivalence classes -Coalesced [46] main::bucket_idx#14 ← main::bucket_idx#6 -Coalesced [47] main::i1#3 ← main::i1#1 -Coalesced [48] main::bucket_idx#15 ← main::bucket_idx#1 -Coalesced [49] main::i#3 ← main::i#1 -Coalesced [64] heap_head#69 ← heap_head#1 -Coalesced [65] malloc::size#3 ← malloc::size#1 -Coalesced [90] init_buckets::dist#7 ← init_buckets::dist#3 -Coalesced [91] init_buckets::i4#3 ← init_buckets::i4#1 -Coalesced [92] init_buckets::i3#3 ← init_buckets::i3#1 -Coalesced [93] init_buckets::i2#4 ← init_buckets::i2#1 -Coalesced [94] init_buckets::dist#6 ← init_buckets::dist#1 -Coalesced [95] init_buckets::i1#3 ← init_buckets::i1#1 -Coalesced [96] init_buckets::i#3 ← init_buckets::i#1 -Not coalescing [99] heap_head#1 ← malloc::mem#0 -Coalesced [131] init_angle_screen::y#6 ← init_angle_screen::y#1 -Coalesced [132] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#1 -Coalesced [133] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#1 -Coalesced [134] init_angle_screen::x#4 ← init_angle_screen::x#1 -Coalesced [135] init_angle_screen::xb#4 ← init_angle_screen::xb#1 -Coalesced [138] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [142] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [144] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [145] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [148] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [153] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [157] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [160] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [161] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [162] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [163] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [164] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [170] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [171] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [178] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [179] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [180] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [184] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [185] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [186] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [187] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [188] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [193] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [194] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [195] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [196] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [197] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [201] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [202] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [203] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [204] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [205] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [213] init_dist_screen::yd#2 ← init_dist_screen::$5 -Coalesced [216] sqr::val#3 ← sqr::val#0 -Coalesced [224] init_dist_screen::xd#2 ← init_dist_screen::$13 -Coalesced [227] sqr::val#4 ← sqr::val#1 -Coalesced [248] init_dist_screen::y#14 ← init_dist_screen::y#1 -Coalesced [249] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1 -Coalesced [250] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1 -Coalesced [251] init_dist_screen::x#8 ← init_dist_screen::x#1 -Coalesced [252] init_dist_screen::xb#8 ← init_dist_screen::xb#1 -Coalesced [254] init_dist_screen::xd#1 ← init_dist_screen::$15 -Coalesced [256] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [266] bsearch16u::items#10 ← bsearch16u::items#1 -Coalesced [271] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [273] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [276] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [282] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [286] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [287] bsearch16u::items#12 ← bsearch16u::items#0 -Coalesced [290] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [291] bsearch16u::items#11 ← bsearch16u::items#8 -Coalesced [292] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [293] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced [302] init_squares::squares#4 ← init_squares::squares#0 -Coalesced [312] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [313] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [314] init_squares::i#3 ← init_squares::i#1 -Coalesced down to 42 phi equivalence classes +Created 55 initial phi equivalence classes +Coalesced [58] main::bucket_idx#12 ← main::bucket_idx#1 +Coalesced [59] main::i2#3 ← main::i2#1 +Coalesced [60] main::i1#3 ← main::i1#1 +Coalesced [61] main::dist#3 ← main::dist#1 +Coalesced [62] main::angle#3 ← main::angle#1 +Coalesced [63] main::mix#3 ← main::mix#1 +Coalesced [64] main::i#3 ← main::i#1 +Coalesced [80] heap_head#69 ← heap_head#1 +Coalesced [81] malloc::size#3 ← malloc::size#1 +Coalesced [109] init_buckets::dist#7 ← init_buckets::dist#3 +Coalesced [110] init_buckets::i4#3 ← init_buckets::i4#1 +Coalesced [111] init_buckets::i3#3 ← init_buckets::i3#1 +Coalesced [112] init_buckets::i2#4 ← init_buckets::i2#1 +Coalesced [113] init_buckets::dist#6 ← init_buckets::dist#1 +Coalesced [114] init_buckets::i1#3 ← init_buckets::i1#1 +Coalesced [115] init_buckets::i#3 ← init_buckets::i#1 +Not coalescing [118] heap_head#1 ← malloc::mem#0 +Coalesced [150] init_angle_screen::y#6 ← init_angle_screen::y#1 +Coalesced [151] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#1 +Coalesced [152] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#1 +Coalesced [153] init_angle_screen::x#4 ← init_angle_screen::x#1 +Coalesced [154] init_angle_screen::xb#4 ← init_angle_screen::xb#1 +Coalesced [157] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [161] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [163] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [164] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [167] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [172] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [176] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [179] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [180] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [181] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [182] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [183] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [189] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [190] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [197] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [198] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [199] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [203] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [204] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [205] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [206] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [207] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [212] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [213] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [214] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [215] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [216] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [220] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [221] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [222] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [223] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [224] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [232] init_dist_screen::yd#2 ← init_dist_screen::$5 +Coalesced [235] sqr::val#3 ← sqr::val#0 +Coalesced [243] init_dist_screen::xd#2 ← init_dist_screen::$13 +Coalesced [246] sqr::val#4 ← sqr::val#1 +Coalesced [267] init_dist_screen::y#14 ← init_dist_screen::y#1 +Coalesced [268] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1 +Coalesced [269] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1 +Coalesced [270] init_dist_screen::x#8 ← init_dist_screen::x#1 +Coalesced [271] init_dist_screen::xb#8 ← init_dist_screen::xb#1 +Coalesced [273] init_dist_screen::xd#1 ← init_dist_screen::$15 +Coalesced [275] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [285] bsearch16u::items#10 ← bsearch16u::items#1 +Coalesced [290] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [292] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [295] bsearch16u::return#8 ← bsearch16u::items#2 +Not coalescing [301] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [305] bsearch16u::num#10 ← bsearch16u::num#1 +Coalesced [306] bsearch16u::items#12 ← bsearch16u::items#0 +Coalesced [309] bsearch16u::num#9 ← bsearch16u::num#0 +Coalesced [310] bsearch16u::items#11 ← bsearch16u::items#8 +Coalesced [311] bsearch16u::num#11 ← bsearch16u::num#3 +Coalesced (already) [312] bsearch16u::items#13 ← bsearch16u::items#2 +Coalesced [321] init_squares::squares#4 ← init_squares::squares#0 +Coalesced [331] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [332] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [333] init_squares::i#3 ← init_squares::i#1 +Coalesced down to 46 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @7 Culled Empty Block (label) @10 Culled Empty Block (label) @12 Culled Empty Block (label) @13 Culled Empty Block (label) @17 +Culled Empty Block (label) main::@22 Culled Empty Block (label) main::@23 -Culled Empty Block (label) main::@12 Culled Empty Block (label) main::@26 +Culled Empty Block (label) main::@25 Culled Empty Block (label) main::@24 Culled Empty Block (label) init_buckets::@2 Culled Empty Block (label) init_buckets::@4 @@ -3052,19 +3163,16 @@ Renumbering block atan2_16::@26 to atan2_16::@18 Renumbering block atan2_16::@27 to atan2_16::@19 Renumbering block atan2_16::@30 to atan2_16::@20 Renumbering block atan2_16::@33 to atan2_16::@21 -Renumbering block main::@4 to main::@2 -Renumbering block main::@6 to main::@3 -Renumbering block main::@7 to main::@4 +Renumbering block main::@6 to main::@4 Renumbering block main::@8 to main::@5 Renumbering block main::@9 to main::@6 Renumbering block main::@10 to main::@7 -Renumbering block main::@13 to main::@8 -Renumbering block main::@14 to main::@9 -Renumbering block main::@15 to main::@10 -Renumbering block main::@20 to main::@11 -Renumbering block main::@21 to main::@12 -Renumbering block main::@22 to main::@13 -Renumbering block main::@25 to main::@14 +Renumbering block main::@11 to main::@8 +Renumbering block main::@12 to main::@9 +Renumbering block main::@14 to main::@10 +Renumbering block main::@15 to main::@11 +Renumbering block main::@16 to main::@12 +Renumbering block main::@21 to main::@13 Renumbering block init_buckets::@3 to init_buckets::@2 Renumbering block init_buckets::@5 to init_buckets::@3 Renumbering block init_buckets::@7 to init_buckets::@4 @@ -3079,9 +3187,8 @@ Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of main::@12 Adding NOP phi() at start of main::@13 -Adding NOP phi() at start of main::@14 +Adding NOP phi() at start of main::@2 Adding NOP phi() at start of init_buckets Adding NOP phi() at start of init_angle_screen Adding NOP phi() at start of init_dist_screen @@ -3101,429 +3208,445 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() [5] call init_dist_screen - to:main::@12 -main::@12: scope:[main] from main + to:main::@13 +main::@13: scope:[main] from main [6] phi() [7] call init_angle_screen - to:main::@13 -main::@13: scope:[main] from main::@12 - [8] phi() - [9] call init_buckets to:main::@1 -main::@1: scope:[main] from main::@13 main::@9 - [10] (byte) main::bucket_idx#11 ← phi( main::@9/(byte) main::bucket_idx#6 main::@13/(byte) 0 ) +main::@1: scope:[main] from main::@1 main::@13 + [8] (word) main::i#2 ← phi( main::@1/(word) main::i#1 main::@13/(word) 0 ) + [8] (byte*) main::mix#2 ← phi( main::@1/(byte*) main::mix#1 main::@13/(const byte[$3e8]) SCREEN_MIX#0 ) + [8] (byte*) main::angle#2 ← phi( main::@1/(byte*) main::angle#1 main::@13/(const byte[$3e8]) SCREEN_ANGLE#0 ) + [8] (byte*) main::dist#2 ← phi( main::@1/(byte*) main::dist#1 main::@13/(const byte[$3e8]) SCREEN_DIST#0 ) + [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 + [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 + [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 + [12] *((byte*) main::mix#2) ← (byte~) main::$5 + [13] (byte*) main::mix#1 ← ++ (byte*) main::mix#2 + [14] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 + [15] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 + [16] (word) main::i#1 ← ++ (word) main::i#2 + [17] if((word) main::i#1!=(word) $3e8) goto main::@1 to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 +main::@2: scope:[main] from main::@1 + [18] phi() + [19] call init_buckets to:main::@3 -main::@3: scope:[main] from main::@2 main::@3 - [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 +main::@3: scope:[main] from main::@11 main::@2 + [20] (byte) main::bucket_idx#9 ← phi( main::@11/(byte) main::bucket_idx#1 main::@2/(byte) 0 ) to:main::@4 -main::@4: scope:[main] from main::@3 - [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) - [14] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#11) - [15] if((byte) main::bucket_size#0<=(byte) 0) goto main::@6 +main::@4: scope:[main] from main::@3 main::@4 + [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 to:main::@5 -main::@5: scope:[main] from main::@4 - [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 - [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) - to:main::@7 -main::@7: scope:[main] from main::@5 main::@7 - [18] (byte) main::i#2 ← phi( main::@7/(byte) main::i#1 main::@5/(byte) 0 ) - [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 - [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) - [21] *((byte*) main::sc#0) ← (byte) ' ' - [22] (byte) main::i#1 ← ++ (byte) main::i#2 - [23] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@7 +main::@5: scope:[main] from main::@4 main::@5 + [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 to:main::@6 -main::@6: scope:[main] from main::@4 main::@7 - [24] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#11 - [25] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@14 - to:main::@8 -main::@14: scope:[main] from main::@6 - [26] phi() - to:main::@8 -main::@8: scope:[main] from main::@14 main::@6 - [27] (byte) main::bucket_idx#6 ← phi( main::@6/(byte) 0 main::@14/(byte) main::bucket_idx#1 ) - [28] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) - [29] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@9 - to:main::@11 -main::@11: scope:[main] from main::@8 - [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 - [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) - to:main::@10 -main::@10: scope:[main] from main::@10 main::@11 - [32] (byte) main::i1#2 ← phi( main::@10/(byte) main::i1#1 main::@11/(byte) 0 ) - [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 - [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) - [35] *((byte*) main::sc1#0) ← (byte) '*' - [36] (byte) main::i1#1 ← ++ (byte) main::i1#2 - [37] if((byte) main::i1#1<(byte) main::bucket_size1#0) goto main::@10 +main::@6: scope:[main] from main::@5 + [23] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) + [24] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#9) + [25] if((byte) main::bucket_size#0<=(byte) 0) goto main::@8 + to:main::@7 +main::@7: scope:[main] from main::@6 + [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 + [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 + [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 + [29] (word*) main::bucket#0 ← *((word**~) main::$23) to:main::@9 -main::@9: scope:[main] from main::@10 main::@8 - [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) - to:main::@1 -init_buckets: scope:[init_buckets] from main::@13 - [39] phi() +main::@9: scope:[main] from main::@7 main::@9 + [30] (byte) main::i1#2 ← phi( main::@7/(byte) 0 main::@9/(byte) main::i1#1 ) + [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 + [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) + [33] *((byte*) main::sc#0) ← (byte) ' ' + [34] (byte) main::i1#1 ← ++ (byte) main::i1#2 + [35] if((byte) main::i1#1<(byte) main::bucket_size#0) goto main::@9 + to:main::@8 +main::@8: scope:[main] from main::@6 main::@9 + [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#9 + [37] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#1) + [38] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@11 + to:main::@10 +main::@10: scope:[main] from main::@8 + [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 + [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 + [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 + [42] (word*) main::bucket1#0 ← *((word**~) main::$24) + to:main::@12 +main::@12: scope:[main] from main::@10 main::@12 + [43] (byte) main::i2#2 ← phi( main::@10/(byte) 0 main::@12/(byte) main::i2#1 ) + [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 + [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) + [46] *((byte*) main::sc1#0) ← (byte) '*' + [47] (byte) main::i2#1 ← ++ (byte) main::i2#2 + [48] if((byte) main::i2#1<(byte) main::bucket_size1#0) goto main::@12 + to:main::@11 +main::@11: scope:[main] from main::@12 main::@8 + [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + to:main::@3 +init_buckets: scope:[init_buckets] from main::@2 + [50] phi() to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - [40] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) - [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 - [42] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 - [43] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 + [51] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) + [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 + [53] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 + [54] if((byte) init_buckets::i#1!=(byte) 0) goto init_buckets::@1 to:init_buckets::@2 init_buckets::@2: scope:[init_buckets] from init_buckets::@1 init_buckets::@2 - [44] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 ) - [44] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@2/(byte*) init_buckets::dist#1 ) - [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) - [46] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 - [47] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 - [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 + [55] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 ) + [55] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_MIX#0 init_buckets::@2/(byte*) init_buckets::dist#1 ) + [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) + [57] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 + [58] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 + [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 to:init_buckets::@3 init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@6 - [49] (byte) init_buckets::i2#2 ← phi( init_buckets::@6/(byte) init_buckets::i2#1 init_buckets::@2/(byte) 0 ) - [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 - [51] call malloc + [60] (word) init_buckets::i2#2 ← phi( init_buckets::@6/(word) init_buckets::i2#1 init_buckets::@2/(word) 0 ) + [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 + [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 + [63] call malloc to:init_buckets::@6 init_buckets::@6: scope:[init_buckets] from init_buckets::@3 - [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 - [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 - [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 - [55] (byte) init_buckets::i2#1 ← ++ (byte) init_buckets::i2#2 - [56] if((byte) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 + [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 + [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 + [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 + [68] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 + [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 to:init_buckets::@4 init_buckets::@4: scope:[init_buckets] from init_buckets::@4 init_buckets::@6 - [57] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 ) - [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 - [59] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 - [60] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 + [70] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 ) + [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 + [72] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 + [73] if((byte) init_buckets::i3#1!=(byte) 0) goto init_buckets::@4 to:init_buckets::@5 init_buckets::@5: scope:[init_buckets] from init_buckets::@4 init_buckets::@5 - [61] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 ) - [61] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@5/(byte*) init_buckets::dist#3 ) - [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 - [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) - [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 - [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 - [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 - [68] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) - [69] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 - [70] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 - [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 + [74] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 ) + [74] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_MIX#0 init_buckets::@5/(byte*) init_buckets::dist#3 ) + [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) + [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 + [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 + [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 + [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) + [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 + [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 + [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 + [83] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) + [84] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 + [85] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 + [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 to:init_buckets::@return init_buckets::@return: scope:[init_buckets] from init_buckets::@5 - [72] return + [87] return to:@return malloc: scope:[malloc] from init_buckets::@3 init_squares - [73] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [73] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 ) - [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 - [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 + [88] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [88] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 ) + [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 + [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [76] return + [91] return to:@return -init_angle_screen: scope:[init_angle_screen] from main::@12 - [77] phi() +init_angle_screen: scope:[init_angle_screen] from main::@13 + [92] phi() to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@3 - [78] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 ) - [78] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 ) - [78] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 ) + [93] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 ) + [93] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 ) + [93] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@4 - [79] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) - [79] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) - [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 - [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 - [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 - [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 - [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 - [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [87] call atan2_16 - [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [94] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) + [94] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) + [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 + [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 + [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 + [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 + [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 + [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [102] call atan2_16 + [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 - [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 - [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 - [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 - [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [99] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [100] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 - [101] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 + [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 + [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 + [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 + [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 + [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [114] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [115] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [116] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 to:init_angle_screen::@3 init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@4 - [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 - [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 - [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 - [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 + [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 + [119] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 + [120] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@3 - [106] return + [121] return to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@2 - [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [109] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [124] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [112] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [127] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [113] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [113] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [113] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [113] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [128] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [128] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [128] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [128] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [115] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [130] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [119] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [134] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [122] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [137] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [123] return + [138] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [124] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [139] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [127] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [127] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [127] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [128] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [142] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [142] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [142] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [143] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [129] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [144] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [132] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [132] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [147] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [147] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 - [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) + [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 + [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [138] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [138] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [138] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [139] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [140] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 + [153] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [153] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [153] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [154] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [155] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) + [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [147] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [162] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 init_dist_screen: scope:[init_dist_screen] from main - [150] phi() - [151] call init_squares + [165] phi() + [166] call init_squares to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen init_dist_screen::@9 - [152] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 ) - [152] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0 ) - [152] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 ) - [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [154] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 + [167] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 ) + [167] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen/(const byte[$3e8]) SCREEN_DIST#0 ) + [167] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 ) + [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [169] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - [156] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) - [157] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [158] call sqr - [159] (word) sqr::return#2 ← (word) sqr::return#0 + [171] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) + [172] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [173] call sqr + [174] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@4 - [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@12 - [161] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 ) - [161] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 ) - [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [163] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 + [176] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 ) + [176] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 ) + [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 + [178] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@8 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 init_dist_screen::@7 - [165] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 ) - [166] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [167] call sqr - [168] (word) sqr::return#3 ← (word) sqr::return#0 + [180] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 ) + [181] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [182] call sqr + [183] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@8 - [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [172] call sqrt - [173] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [187] call sqrt + [188] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@11 - [174] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [179] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [180] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 - [181] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 + [189] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [194] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 + [195] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [196] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@12 - [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 - [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 - [184] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [185] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 + [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 + [199] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [200] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 to:init_dist_screen::@return init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@9 - [186] return + [201] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [187] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [202] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@8 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - [188] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [203] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 sqrt: scope:[sqrt] from init_dist_screen::@11 - [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [191] call bsearch16u - [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [206] call bsearch16u + [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [197] return + [212] return to:@return bsearch16u: scope:[bsearch16u] from sqrt - [198] phi() + [213] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [199] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [199] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [200] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 + [214] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) + [214] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) + [215] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [203] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [218] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [204] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [205] return - to:@return -bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 - to:bsearch16u::@8 -bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 - to:bsearch16u::@return -bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 - to:bsearch16u::@9 -bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [214] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 - to:bsearch16u::@7 -bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [215] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [215] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [216] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 - to:bsearch16u::@3 -sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8 - [217] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) - [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) - to:sqr::@return -sqr::@return: scope:[sqr] from sqr + [219] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) [220] return to:@return +bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 + [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 + [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 + [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + to:bsearch16u::@8 +bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 + [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 + to:bsearch16u::@return +bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 + [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 + to:bsearch16u::@9 +bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 + [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + to:bsearch16u::@7 +bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 + [230] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) + [230] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) + [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 + to:bsearch16u::@3 +sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8 + [232] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) + [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + to:sqr::@return +sqr::@return: scope:[sqr] from sqr + [235] return + to:@return init_squares: scope:[init_squares] from init_dist_screen - [221] phi() - [222] call malloc + [236] phi() + [237] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [225] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [225] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [225] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [229] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [231] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [232] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [240] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [240] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [240] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [244] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [246] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [247] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [233] return + [248] return to:@return @@ -3535,12 +3658,13 @@ VARIABLE REGISTER WEIGHTS (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16 (byte) CORDIC_ITERATIONS_16 (byte*) HEAP_TOP -(byte) NUM_BUCKETS +(word) NUM_BUCKETS (byte) NUM_SQUARES (byte*) RASTER (byte[$3e8]) SCREEN_ANGLE (byte[$3e8]) SCREEN_DIST (byte*) SCREEN_FILL +(byte[$3e8]) SCREEN_MIX (word*) SQUARES (void*) SQUARES#1 0.03278688524590164 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) @@ -3624,7 +3748,7 @@ VARIABLE REGISTER WEIGHTS (word*) bsearch16u::return#3 4.0 (word*~) bsearch16u::return#6 4.0 (byte*) heap_head -(byte*) heap_head#1 0.17567567567567569 +(byte*) heap_head#1 0.1511627906976744 (byte*) heap_head#13 13.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$10 202.0 @@ -3658,36 +3782,41 @@ VARIABLE REGISTER WEIGHTS (byte) init_angle_screen::y#4 4.730769230769231 (signed word) init_angle_screen::yw (word) init_angle_screen::yw#0 50.5 -(void()) init_buckets() -(byte~) init_buckets::$11 22.0 -(byte~) init_buckets::$12 22.0 -(byte~) init_buckets::$13 22.0 -(void*~) init_buckets::$5 5.5 -(word~) init_buckets::$9 11.0 +(void()) init_buckets((byte*) init_buckets::screen) +(word~) init_buckets::$10 11.0 +(word~) init_buckets::$12 22.0 +(word~) init_buckets::$13 22.0 +(byte~) init_buckets::$14 22.0 +(byte*~) init_buckets::$15 22.0 +(word**~) init_buckets::$16 22.0 +(word**~) init_buckets::$17 22.0 +(void*~) init_buckets::$5 3.6666666666666665 +(word~) init_buckets::$9 22.0 (word*) init_buckets::bucket (word*) init_buckets::bucket#0 7.333333333333333 (byte*) init_buckets::dist (byte*) init_buckets::dist#1 7.333333333333333 (byte*) init_buckets::dist#3 7.333333333333333 (byte*) init_buckets::dist#4 22.0 -(byte*) init_buckets::dist#5 5.5 +(byte*) init_buckets::dist#5 4.4 (byte) init_buckets::distance -(byte) init_buckets::distance#0 9.166666666666666 +(byte) init_buckets::distance#0 5.5 (byte) init_buckets::i (byte) init_buckets::i#1 16.5 (byte) init_buckets::i#2 16.5 (word) init_buckets::i1 (word) init_buckets::i1#1 16.5 (word) init_buckets::i1#2 7.333333333333333 -(byte) init_buckets::i2 -(byte) init_buckets::i2#1 16.5 -(byte) init_buckets::i2#2 7.333333333333333 +(word) init_buckets::i2 +(word) init_buckets::i2#1 16.5 +(word) init_buckets::i2#2 5.5 (byte) init_buckets::i3 (byte) init_buckets::i3#1 16.5 (byte) init_buckets::i3#2 16.5 (word) init_buckets::i4 (word) init_buckets::i4#1 16.5 -(word) init_buckets::i4#2 2.4444444444444446 +(word) init_buckets::i4#2 2.0 +(byte*) init_buckets::screen (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$13 202.0 (byte~) init_dist_screen::$15 202.0 @@ -3739,28 +3868,46 @@ VARIABLE REGISTER WEIGHTS (word*) init_squares::squares#1 3.6666666666666665 (word*) init_squares::squares#2 17.5 (void()) main() -(byte~) main::$15 22.0 -(byte~) main::$16 202.0 -(byte~) main::$17 22.0 -(byte~) main::$18 202.0 +(word~) main::$11 22.0 +(word~) main::$16 22.0 +(word~) main::$19 22.0 +(byte~) main::$20 202.0 +(word~) main::$21 22.0 +(byte~) main::$22 202.0 +(word**~) main::$23 22.0 +(word**~) main::$24 22.0 +(byte~) main::$3 11.0 +(byte~) main::$4 22.0 +(byte~) main::$5 22.0 +(byte*) main::angle +(byte*) main::angle#1 7.333333333333333 +(byte*) main::angle#2 4.714285714285714 (word*) main::bucket (word*) main::bucket#0 16.0 (word*) main::bucket1 (word*) main::bucket1#0 16.0 (byte) main::bucket_idx -(byte) main::bucket_idx#1 11.0 -(byte) main::bucket_idx#11 3.142857142857143 -(byte) main::bucket_idx#6 3.6666666666666665 +(byte) main::bucket_idx#1 2.357142857142857 +(byte) main::bucket_idx#9 2.0625 (byte) main::bucket_size -(byte) main::bucket_size#0 12.3 +(byte) main::bucket_size#0 10.25 (byte) main::bucket_size1 -(byte) main::bucket_size1#0 12.3 -(byte) main::i -(byte) main::i#1 151.5 -(byte) main::i#2 75.75 +(byte) main::bucket_size1#0 10.25 +(byte*) main::dist +(byte*) main::dist#1 5.5 +(byte*) main::dist#2 5.5 +(word) main::i +(word) main::i#1 16.5 +(word) main::i#2 2.75 (byte) main::i1 (byte) main::i1#1 151.5 (byte) main::i1#2 75.75 +(byte) main::i2 +(byte) main::i2#1 151.5 +(byte) main::i2#2 75.75 +(byte*) main::mix +(byte*) main::mix#1 4.4 +(byte*) main::mix#2 6.6000000000000005 (byte*) main::sc (byte*) main::sc#0 202.0 (byte*) main::sc1 @@ -3795,9 +3942,13 @@ VARIABLE REGISTER WEIGHTS (word) sqrt::val#0 103.0 Initial phi equivalence classes -[ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] +[ main::dist#2 main::dist#1 ] +[ main::angle#2 main::angle#1 ] +[ main::mix#2 main::mix#1 ] [ main::i#2 main::i#1 ] +[ main::bucket_idx#9 main::bucket_idx#1 ] [ main::i1#2 main::i1#1 ] +[ main::i2#2 main::i2#1 ] [ init_buckets::i#2 init_buckets::i#1 ] [ init_buckets::dist#4 init_buckets::dist#1 ] [ init_buckets::i1#2 init_buckets::i1#1 ] @@ -3833,23 +3984,34 @@ Initial phi equivalence classes [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] [ init_squares::i#2 init_squares::i#1 ] +Added variable main::$3 to zero page equivalence class [ main::$3 ] +Added variable main::$4 to zero page equivalence class [ main::$4 ] +Added variable main::$5 to zero page equivalence class [ main::$5 ] Added variable main::bucket_size#0 to zero page equivalence class [ main::bucket_size#0 ] -Added variable main::$15 to zero page equivalence class [ main::$15 ] +Added variable main::$11 to zero page equivalence class [ main::$11 ] +Added variable main::$19 to zero page equivalence class [ main::$19 ] +Added variable main::$23 to zero page equivalence class [ main::$23 ] Added variable main::bucket#0 to zero page equivalence class [ main::bucket#0 ] -Added variable main::$16 to zero page equivalence class [ main::$16 ] +Added variable main::$20 to zero page equivalence class [ main::$20 ] Added variable main::sc#0 to zero page equivalence class [ main::sc#0 ] Added variable main::bucket_size1#0 to zero page equivalence class [ main::bucket_size1#0 ] -Added variable main::$17 to zero page equivalence class [ main::$17 ] +Added variable main::$16 to zero page equivalence class [ main::$16 ] +Added variable main::$21 to zero page equivalence class [ main::$21 ] +Added variable main::$24 to zero page equivalence class [ main::$24 ] Added variable main::bucket1#0 to zero page equivalence class [ main::bucket1#0 ] -Added variable main::$18 to zero page equivalence class [ main::$18 ] +Added variable main::$22 to zero page equivalence class [ main::$22 ] Added variable main::sc1#0 to zero page equivalence class [ main::sc1#0 ] +Added variable init_buckets::$15 to zero page equivalence class [ init_buckets::$15 ] Added variable init_buckets::$5 to zero page equivalence class [ init_buckets::$5 ] -Added variable init_buckets::$11 to zero page equivalence class [ init_buckets::$11 ] -Added variable init_buckets::distance#0 to zero page equivalence class [ init_buckets::distance#0 ] Added variable init_buckets::$12 to zero page equivalence class [ init_buckets::$12 ] -Added variable init_buckets::bucket#0 to zero page equivalence class [ init_buckets::bucket#0 ] +Added variable init_buckets::$16 to zero page equivalence class [ init_buckets::$16 ] +Added variable init_buckets::distance#0 to zero page equivalence class [ init_buckets::distance#0 ] Added variable init_buckets::$9 to zero page equivalence class [ init_buckets::$9 ] Added variable init_buckets::$13 to zero page equivalence class [ init_buckets::$13 ] +Added variable init_buckets::$17 to zero page equivalence class [ init_buckets::$17 ] +Added variable init_buckets::bucket#0 to zero page equivalence class [ init_buckets::bucket#0 ] +Added variable init_buckets::$10 to zero page equivalence class [ init_buckets::$10 ] +Added variable init_buckets::$14 to zero page equivalence class [ init_buckets::$14 ] Added variable malloc::mem#0 to zero page equivalence class [ malloc::mem#0 ] Added variable init_angle_screen::$2 to zero page equivalence class [ init_angle_screen::$2 ] Added variable init_angle_screen::$3 to zero page equivalence class [ init_angle_screen::$3 ] @@ -3893,9 +4055,13 @@ Added variable SQUARES#1 to zero page equivalence class [ SQUARES#1 ] Added variable init_squares::$3 to zero page equivalence class [ init_squares::$3 ] Added variable init_squares::$4 to zero page equivalence class [ init_squares::$4 ] Complete equivalence classes -[ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] +[ main::dist#2 main::dist#1 ] +[ main::angle#2 main::angle#1 ] +[ main::mix#2 main::mix#1 ] [ main::i#2 main::i#1 ] +[ main::bucket_idx#9 main::bucket_idx#1 ] [ main::i1#2 main::i1#1 ] +[ main::i2#2 main::i2#1 ] [ init_buckets::i#2 init_buckets::i#1 ] [ init_buckets::dist#4 init_buckets::dist#1 ] [ init_buckets::i1#2 init_buckets::i1#1 ] @@ -3931,23 +4097,34 @@ Complete equivalence classes [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] [ init_squares::i#2 init_squares::i#1 ] +[ main::$3 ] +[ main::$4 ] +[ main::$5 ] [ main::bucket_size#0 ] -[ main::$15 ] +[ main::$11 ] +[ main::$19 ] +[ main::$23 ] [ main::bucket#0 ] -[ main::$16 ] +[ main::$20 ] [ main::sc#0 ] [ main::bucket_size1#0 ] -[ main::$17 ] +[ main::$16 ] +[ main::$21 ] +[ main::$24 ] [ main::bucket1#0 ] -[ main::$18 ] +[ main::$22 ] [ main::sc1#0 ] +[ init_buckets::$15 ] [ init_buckets::$5 ] -[ init_buckets::$11 ] -[ init_buckets::distance#0 ] [ init_buckets::$12 ] -[ init_buckets::bucket#0 ] +[ init_buckets::$16 ] +[ init_buckets::distance#0 ] [ init_buckets::$9 ] [ init_buckets::$13 ] +[ init_buckets::$17 ] +[ init_buckets::bucket#0 ] +[ init_buckets::$10 ] +[ init_buckets::$14 ] [ malloc::mem#0 ] [ init_angle_screen::$2 ] [ init_angle_screen::$3 ] @@ -3990,103 +4167,118 @@ Complete equivalence classes [ SQUARES#1 ] [ init_squares::$3 ] [ init_squares::$4 ] -Allocated zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -Allocated zp ZP_BYTE:3 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:4 [ main::i1#2 main::i1#1 ] -Allocated zp ZP_BYTE:5 [ init_buckets::i#2 init_buckets::i#1 ] -Allocated zp ZP_WORD:6 [ init_buckets::dist#4 init_buckets::dist#1 ] -Allocated zp ZP_WORD:8 [ init_buckets::i1#2 init_buckets::i1#1 ] -Allocated zp ZP_BYTE:10 [ init_buckets::i2#2 init_buckets::i2#1 ] -Allocated zp ZP_BYTE:11 [ init_buckets::i3#2 init_buckets::i3#1 ] -Allocated zp ZP_WORD:12 [ init_buckets::dist#5 init_buckets::dist#3 ] -Allocated zp ZP_WORD:14 [ init_buckets::i4#2 init_buckets::i4#1 ] -Allocated zp ZP_WORD:16 [ heap_head#13 heap_head#1 ] -Allocated zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 ] -Allocated zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Allocated zp ZP_WORD:21 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_WORD:23 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -Allocated zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Allocated zp ZP_WORD:27 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] -Allocated zp ZP_WORD:29 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -Allocated zp ZP_BYTE:31 [ atan2_16::i#2 atan2_16::i#1 ] -Allocated zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] -Allocated zp ZP_WORD:34 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] -Allocated zp ZP_BYTE:36 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Allocated zp ZP_WORD:37 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -Allocated zp ZP_WORD:39 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Allocated zp ZP_WORD:42 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -Allocated zp ZP_WORD:44 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] -Allocated zp ZP_BYTE:46 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Allocated zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Allocated zp ZP_BYTE:49 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] -Allocated zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] -Allocated zp ZP_BYTE:52 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Allocated zp ZP_BYTE:53 [ sqr::val#2 sqr::val#0 sqr::val#1 ] -Allocated zp ZP_WORD:54 [ init_squares::sqr#2 init_squares::sqr#1 ] -Allocated zp ZP_WORD:56 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] -Allocated zp ZP_BYTE:58 [ init_squares::i#2 init_squares::i#1 ] -Allocated zp ZP_BYTE:59 [ main::bucket_size#0 ] -Allocated zp ZP_BYTE:60 [ main::$15 ] -Allocated zp ZP_WORD:61 [ main::bucket#0 ] -Allocated zp ZP_BYTE:63 [ main::$16 ] -Allocated zp ZP_WORD:64 [ main::sc#0 ] -Allocated zp ZP_BYTE:66 [ main::bucket_size1#0 ] -Allocated zp ZP_BYTE:67 [ main::$17 ] -Allocated zp ZP_WORD:68 [ main::bucket1#0 ] -Allocated zp ZP_BYTE:70 [ main::$18 ] -Allocated zp ZP_WORD:71 [ main::sc1#0 ] -Allocated zp ZP_WORD:73 [ init_buckets::$5 ] -Allocated zp ZP_BYTE:75 [ init_buckets::$11 ] -Allocated zp ZP_BYTE:76 [ init_buckets::distance#0 ] -Allocated zp ZP_BYTE:77 [ init_buckets::$12 ] -Allocated zp ZP_WORD:78 [ init_buckets::bucket#0 ] -Allocated zp ZP_WORD:80 [ init_buckets::$9 ] -Allocated zp ZP_BYTE:82 [ init_buckets::$13 ] -Allocated zp ZP_WORD:83 [ malloc::mem#0 ] -Allocated zp ZP_BYTE:85 [ init_angle_screen::$2 ] -Allocated zp ZP_BYTE:86 [ init_angle_screen::$3 ] -Allocated zp ZP_WORD:87 [ init_angle_screen::xw#0 ] -Allocated zp ZP_BYTE:89 [ init_angle_screen::$6 ] -Allocated zp ZP_WORD:90 [ init_angle_screen::yw#0 ] -Allocated zp ZP_WORD:92 [ atan2_16::x#0 ] -Allocated zp ZP_WORD:94 [ atan2_16::y#0 ] -Allocated zp ZP_WORD:96 [ atan2_16::return#2 ] -Allocated zp ZP_WORD:98 [ init_angle_screen::angle_w#0 ] -Allocated zp ZP_WORD:100 [ init_angle_screen::$10 ] -Allocated zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] -Allocated zp ZP_BYTE:103 [ init_angle_screen::$12 ] -Allocated zp ZP_BYTE:104 [ init_angle_screen::$13 ] -Allocated zp ZP_BYTE:105 [ init_angle_screen::$14 ] -Allocated zp ZP_BYTE:106 [ atan2_16::$24 ] -Allocated zp ZP_BYTE:107 [ atan2_16::$23 ] -Allocated zp ZP_BYTE:108 [ init_dist_screen::y2#0 ] -Allocated zp ZP_WORD:109 [ sqr::return#2 ] -Allocated zp ZP_WORD:111 [ init_dist_screen::yds#0 ] -Allocated zp ZP_BYTE:113 [ init_dist_screen::x2#0 ] -Allocated zp ZP_WORD:114 [ sqr::return#3 ] -Allocated zp ZP_WORD:116 [ init_dist_screen::xds#0 ] -Allocated zp ZP_WORD:118 [ init_dist_screen::ds#0 ] -Allocated zp ZP_WORD:120 [ sqrt::val#0 ] -Allocated zp ZP_BYTE:122 [ sqrt::return#2 ] -Allocated zp ZP_BYTE:123 [ init_dist_screen::d#0 ] -Allocated zp ZP_WORD:124 [ bsearch16u::key#0 ] -Allocated zp ZP_WORD:126 [ bsearch16u::return#3 ] -Allocated zp ZP_WORD:128 [ sqrt::found#0 ] -Allocated zp ZP_WORD:130 [ sqrt::$3 ] -Allocated zp ZP_WORD:132 [ sqrt::$1 ] -Allocated zp ZP_BYTE:134 [ sqrt::return#0 ] -Allocated zp ZP_BYTE:135 [ bsearch16u::$6 ] -Allocated zp ZP_BYTE:136 [ bsearch16u::$16 ] -Allocated zp ZP_WORD:137 [ bsearch16u::pivot#0 ] -Allocated zp ZP_WORD:139 [ bsearch16u::result#0 ] -Allocated zp ZP_BYTE:141 [ sqr::$0 ] -Allocated zp ZP_WORD:142 [ sqr::return#0 ] -Allocated zp ZP_WORD:144 [ SQUARES#1 ] -Allocated zp ZP_BYTE:146 [ init_squares::$3 ] -Allocated zp ZP_BYTE:147 [ init_squares::$4 ] +Allocated zp ZP_WORD:2 [ main::dist#2 main::dist#1 ] +Allocated zp ZP_WORD:4 [ main::angle#2 main::angle#1 ] +Allocated zp ZP_WORD:6 [ main::mix#2 main::mix#1 ] +Allocated zp ZP_WORD:8 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Allocated zp ZP_BYTE:11 [ main::i1#2 main::i1#1 ] +Allocated zp ZP_BYTE:12 [ main::i2#2 main::i2#1 ] +Allocated zp ZP_BYTE:13 [ init_buckets::i#2 init_buckets::i#1 ] +Allocated zp ZP_WORD:14 [ init_buckets::dist#4 init_buckets::dist#1 ] +Allocated zp ZP_WORD:16 [ init_buckets::i1#2 init_buckets::i1#1 ] +Allocated zp ZP_WORD:18 [ init_buckets::i2#2 init_buckets::i2#1 ] +Allocated zp ZP_BYTE:20 [ init_buckets::i3#2 init_buckets::i3#1 ] +Allocated zp ZP_WORD:21 [ init_buckets::dist#5 init_buckets::dist#3 ] +Allocated zp ZP_WORD:23 [ init_buckets::i4#2 init_buckets::i4#1 ] +Allocated zp ZP_WORD:25 [ heap_head#13 heap_head#1 ] +Allocated zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 ] +Allocated zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Allocated zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] +Allocated zp ZP_WORD:32 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Allocated zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Allocated zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated zp ZP_WORD:36 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +Allocated zp ZP_WORD:38 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated zp ZP_BYTE:40 [ atan2_16::i#2 atan2_16::i#1 ] +Allocated zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] +Allocated zp ZP_WORD:43 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] +Allocated zp ZP_BYTE:45 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] +Allocated zp ZP_WORD:46 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +Allocated zp ZP_WORD:48 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +Allocated zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Allocated zp ZP_WORD:51 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] +Allocated zp ZP_WORD:53 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +Allocated zp ZP_BYTE:55 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Allocated zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Allocated zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Allocated zp ZP_BYTE:58 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] +Allocated zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] +Allocated zp ZP_BYTE:61 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +Allocated zp ZP_BYTE:62 [ sqr::val#2 sqr::val#0 sqr::val#1 ] +Allocated zp ZP_WORD:63 [ init_squares::sqr#2 init_squares::sqr#1 ] +Allocated zp ZP_WORD:65 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +Allocated zp ZP_BYTE:67 [ init_squares::i#2 init_squares::i#1 ] +Allocated zp ZP_BYTE:68 [ main::$3 ] +Allocated zp ZP_BYTE:69 [ main::$4 ] +Allocated zp ZP_BYTE:70 [ main::$5 ] +Allocated zp ZP_BYTE:71 [ main::bucket_size#0 ] +Allocated zp ZP_WORD:72 [ main::$11 ] +Allocated zp ZP_WORD:74 [ main::$19 ] +Allocated zp ZP_WORD:76 [ main::$23 ] +Allocated zp ZP_WORD:78 [ main::bucket#0 ] +Allocated zp ZP_BYTE:80 [ main::$20 ] +Allocated zp ZP_WORD:81 [ main::sc#0 ] +Allocated zp ZP_BYTE:83 [ main::bucket_size1#0 ] +Allocated zp ZP_WORD:84 [ main::$16 ] +Allocated zp ZP_WORD:86 [ main::$21 ] +Allocated zp ZP_WORD:88 [ main::$24 ] +Allocated zp ZP_WORD:90 [ main::bucket1#0 ] +Allocated zp ZP_BYTE:92 [ main::$22 ] +Allocated zp ZP_WORD:93 [ main::sc1#0 ] +Allocated zp ZP_WORD:95 [ init_buckets::$15 ] +Allocated zp ZP_WORD:97 [ init_buckets::$5 ] +Allocated zp ZP_WORD:99 [ init_buckets::$12 ] +Allocated zp ZP_WORD:101 [ init_buckets::$16 ] +Allocated zp ZP_BYTE:103 [ init_buckets::distance#0 ] +Allocated zp ZP_WORD:104 [ init_buckets::$9 ] +Allocated zp ZP_WORD:106 [ init_buckets::$13 ] +Allocated zp ZP_WORD:108 [ init_buckets::$17 ] +Allocated zp ZP_WORD:110 [ init_buckets::bucket#0 ] +Allocated zp ZP_WORD:112 [ init_buckets::$10 ] +Allocated zp ZP_BYTE:114 [ init_buckets::$14 ] +Allocated zp ZP_WORD:115 [ malloc::mem#0 ] +Allocated zp ZP_BYTE:117 [ init_angle_screen::$2 ] +Allocated zp ZP_BYTE:118 [ init_angle_screen::$3 ] +Allocated zp ZP_WORD:119 [ init_angle_screen::xw#0 ] +Allocated zp ZP_BYTE:121 [ init_angle_screen::$6 ] +Allocated zp ZP_WORD:122 [ init_angle_screen::yw#0 ] +Allocated zp ZP_WORD:124 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:126 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:128 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:130 [ init_angle_screen::angle_w#0 ] +Allocated zp ZP_WORD:132 [ init_angle_screen::$10 ] +Allocated zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] +Allocated zp ZP_BYTE:135 [ init_angle_screen::$12 ] +Allocated zp ZP_BYTE:136 [ init_angle_screen::$13 ] +Allocated zp ZP_BYTE:137 [ init_angle_screen::$14 ] +Allocated zp ZP_BYTE:138 [ atan2_16::$24 ] +Allocated zp ZP_BYTE:139 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:140 [ init_dist_screen::y2#0 ] +Allocated zp ZP_WORD:141 [ sqr::return#2 ] +Allocated zp ZP_WORD:143 [ init_dist_screen::yds#0 ] +Allocated zp ZP_BYTE:145 [ init_dist_screen::x2#0 ] +Allocated zp ZP_WORD:146 [ sqr::return#3 ] +Allocated zp ZP_WORD:148 [ init_dist_screen::xds#0 ] +Allocated zp ZP_WORD:150 [ init_dist_screen::ds#0 ] +Allocated zp ZP_WORD:152 [ sqrt::val#0 ] +Allocated zp ZP_BYTE:154 [ sqrt::return#2 ] +Allocated zp ZP_BYTE:155 [ init_dist_screen::d#0 ] +Allocated zp ZP_WORD:156 [ bsearch16u::key#0 ] +Allocated zp ZP_WORD:158 [ bsearch16u::return#3 ] +Allocated zp ZP_WORD:160 [ sqrt::found#0 ] +Allocated zp ZP_WORD:162 [ sqrt::$3 ] +Allocated zp ZP_WORD:164 [ sqrt::$1 ] +Allocated zp ZP_BYTE:166 [ sqrt::return#0 ] +Allocated zp ZP_BYTE:167 [ bsearch16u::$6 ] +Allocated zp ZP_BYTE:168 [ bsearch16u::$16 ] +Allocated zp ZP_WORD:169 [ bsearch16u::pivot#0 ] +Allocated zp ZP_WORD:171 [ bsearch16u::result#0 ] +Allocated zp ZP_BYTE:173 [ sqr::$0 ] +Allocated zp ZP_WORD:174 [ sqr::return#0 ] +Allocated zp ZP_WORD:176 [ SQUARES#1 ] +Allocated zp ZP_BYTE:178 [ init_squares::$3 ] +Allocated zp ZP_BYTE:179 [ init_squares::$4 ] INITIAL ASM // File Comments @@ -4108,10 +4300,10 @@ INITIAL ASM // Screen containing angle to center .label SCREEN_FILL = $400 // The number of buckets in our bucket sort - .const NUM_BUCKETS = $30 + .const NUM_BUCKETS = $100 .const NUM_SQUARES = $30 - .label heap_head = $10 - .label SQUARES = $90 + .label heap_head = $19 + .label SQUARES = $b0 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4130,108 +4322,215 @@ bend_from_b1: bend: // main main: { - .label _15 = $3c - .label _16 = $3f - .label _17 = $43 - .label _18 = $46 - .label bucket_size = $3b - .label bucket_idx = 2 - .label bucket = $3d - .label sc = $40 - .label i = 3 - .label bucket_size1 = $42 - .label bucket1 = $44 - .label sc1 = $47 - .label i1 = 4 + .label _3 = $44 + .label _4 = $45 + .label _5 = $46 + .label _11 = $48 + .label _16 = $54 + .label _19 = $4a + .label _20 = $50 + .label _21 = $56 + .label _22 = $5c + .label mix = 6 + .label dist = 2 + .label angle = 4 + .label i = 8 + .label bucket_size = $47 + .label bucket_idx = $a + .label bucket_size1 = $53 + .label bucket = $4e + .label sc = $51 + .label i1 = $b + .label bucket1 = $5a + .label sc1 = $5d + .label i2 = $c + .label _23 = $4c + .label _24 = $58 // [5] call init_dist_screen - // [150] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [165] phi from main to init_dist_screen [phi:main->init_dist_screen] init_dist_screen_from_main: jsr init_dist_screen - // [6] phi from main to main::@12 [phi:main->main::@12] - b12_from_main: - jmp b12 - // main::@12 - b12: - // [7] call init_angle_screen - // [77] phi from main::@12 to init_angle_screen [phi:main::@12->init_angle_screen] - init_angle_screen_from_b12: - jsr init_angle_screen - // [8] phi from main::@12 to main::@13 [phi:main::@12->main::@13] - b13_from_b12: + // [6] phi from main to main::@13 [phi:main->main::@13] + b13_from_main: jmp b13 // main::@13 b13: - // [9] call init_buckets - // [39] phi from main::@13 to init_buckets [phi:main::@13->init_buckets] - init_buckets_from_b13: - jsr init_buckets - // [10] phi from main::@13 to main::@1 [phi:main::@13->main::@1] + // [7] call init_angle_screen + // [92] phi from main::@13 to init_angle_screen [phi:main::@13->init_angle_screen] + init_angle_screen_from_b13: + jsr init_angle_screen + // [8] phi from main::@13 to main::@1 [phi:main::@13->main::@1] b1_from_b13: - // [10] phi (byte) main::bucket_idx#11 = (byte) 0 [phi:main::@13->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta bucket_idx + // [8] phi (word) main::i#2 = (word) 0 [phi:main::@13->main::@1#0] -- vwuz1=vwuc1 + lda #<0 + sta i + lda #>0 + sta i+1 + // [8] phi (byte*) main::mix#2 = (const byte[$3e8]) SCREEN_MIX#0 [phi:main::@13->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_MIX + sta mix+1 + // [8] phi (byte*) main::angle#2 = (const byte[$3e8]) SCREEN_ANGLE#0 [phi:main::@13->main::@1#2] -- pbuz1=pbuc1 + lda #SCREEN_ANGLE + sta angle+1 + // [8] phi (byte*) main::dist#2 = (const byte[$3e8]) SCREEN_DIST#0 [phi:main::@13->main::@1#3] -- pbuz1=pbuc1 + lda #SCREEN_DIST + sta dist+1 + jmp b1 + // [8] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + // [8] phi (word) main::i#2 = (word) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // [8] phi (byte*) main::mix#2 = (byte*) main::mix#1 [phi:main::@1->main::@1#1] -- register_copy + // [8] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@1->main::@1#2] -- register_copy + // [8] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@1->main::@1#3] -- register_copy jmp b1 // main::@1 b1: + // [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 -- vbuz1=_deref_pbuz2_rol_2 + ldy #0 + lda (dist),y + asl + asl + sta _3 + // [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 -- vbuz1=_deref_pbuz2_ror_1 + ldy #0 + lda (angle),y + lsr + sta _4 + // [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 -- vbuz1=vbuz2_plus_vbuz3 + lda _3 + clc + adc _4 + sta _5 + // [12] *((byte*) main::mix#2) ← (byte~) main::$5 -- _deref_pbuz1=vbuz2 + lda _5 + ldy #0 + sta (mix),y + // [13] (byte*) main::mix#1 ← ++ (byte*) main::mix#2 -- pbuz1=_inc_pbuz1 + inc mix + bne !+ + inc mix+1 + !: + // [14] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1 + inc dist + bne !+ + inc dist+1 + !: + // [15] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1 + inc angle + bne !+ + inc angle+1 + !: + // [16] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + // [17] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1 + lda i+1 + cmp #>$3e8 + bne b1_from_b1 + lda i + cmp #<$3e8 + bne b1_from_b1 + // [18] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: jmp b2 // main::@2 b2: - // [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$fe - cmp RASTER - bne b2 + // [19] call init_buckets + // [50] phi from main::@2 to init_buckets [phi:main::@2->init_buckets] + init_buckets_from_b2: + jsr init_buckets + // [20] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + // [20] phi (byte) main::bucket_idx#9 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta bucket_idx jmp b3 // main::@3 b3: - // [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$ff - cmp RASTER - bne b3 jmp b4 // main::@4 b4: - // [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 + lda #$fe + cmp RASTER + bne b4 + jmp b5 + // main::@5 + b5: + // [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1 + lda #$ff + cmp RASTER + bne b5 + jmp b6 + // main::@6 + b6: + // [23] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // [14] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#11) -- vbuz1=pbuc1_derefidx_vbuz2 + // [24] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 // First clear the current bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size - // [15] if((byte) main::bucket_size#0<=(byte) 0) goto main::@6 -- vbuz1_le_0_then_la1 + // [25] if((byte) main::bucket_size#0<=(byte) 0) goto main::@8 -- vbuz1_le_0_then_la1 lda bucket_size cmp #0 - beq b6 - jmp b5 - // main::@5 - b5: - // [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda bucket_idx - asl - sta _15 - // [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) -- pwuz1=pptc1_derefidx_vbuz2 - ldy _15 - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y - sta bucket+1 - // [18] phi from main::@5 to main::@7 [phi:main::@5->main::@7] - b7_from_b5: - // [18] phi (byte) main::i#2 = (byte) 0 [phi:main::@5->main::@7#0] -- vbuz1=vbuc1 - lda #0 - sta i - jmp b7 - // [18] phi from main::@7 to main::@7 [phi:main::@7->main::@7] - b7_from_b7: - // [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@7#0] -- register_copy + beq b8 jmp b7 // main::@7 b7: - // [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda i + // [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 -- vwuz1=_word_vbuz2 + lda bucket_idx + sta _11 + lda #0 + sta _11+1 + // [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda _11 asl - sta _16 - // [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuz3 - ldy _16 + sta _19 + lda _11+1 + rol + sta _19+1 + // [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 -- pptz1=pptc1_plus_vwuz2 + lda _19 + clc + adc #BUCKETS + sta _23+1 + // [29] (word*) main::bucket#0 ← *((word**~) main::$23) -- pwuz1=_deref_pptz2 + ldy #0 + lda (_23),y + sta bucket + iny + lda (_23),y + sta bucket+1 + // [30] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + b9_from_b7: + // [30] phi (byte) main::i1#2 = (byte) 0 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 + lda #0 + sta i1 + jmp b9 + // [30] phi from main::@9 to main::@9 [phi:main::@9->main::@9] + b9_from_b9: + // [30] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@9->main::@9#0] -- register_copy + jmp b9 + // main::@9 + b9: + // [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda i1 + asl + sta _20 + // [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuz3 + ldy _20 clc lda #SCREEN_FILL adc (bucket),y sta sc+1 - // [21] *((byte*) main::sc#0) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [33] *((byte*) main::sc#0) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 - inc i - // [23] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@7 -- vbuz1_lt_vbuz2_then_la1 - lda i + // [34] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 + inc i1 + // [35] if((byte) main::i1#1<(byte) main::bucket_size#0) goto main::@9 -- vbuz1_lt_vbuz2_then_la1 + lda i1 cmp bucket_size - bcc b7_from_b7 - jmp b6 - // main::@6 - b6: - // [24] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#11 -- vbuz1=_inc_vbuz1 - inc bucket_idx - // [25] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@14 -- vbuz1_neq_vbuc1_then_la1 - lda #NUM_BUCKETS - cmp bucket_idx - bne b14_from_b6 - // [27] phi from main::@6 to main::@8 [phi:main::@6->main::@8] - b8_from_b6: - // [27] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@6->main::@8#0] -- vbuz1=vbuc1 - lda #0 - sta bucket_idx - jmp b8 - // [26] phi from main::@6 to main::@14 [phi:main::@6->main::@14] - b14_from_b6: - jmp b14 - // main::@14 - b14: - // [27] phi from main::@14 to main::@8 [phi:main::@14->main::@8] - b8_from_b14: - // [27] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@14->main::@8#0] -- register_copy + bcc b9_from_b9 jmp b8 // main::@8 b8: - // [28] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 + // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#9 -- vbuz1=_inc_vbuz1 + inc bucket_idx + // [37] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#1) -- vbuz1=pbuc1_derefidx_vbuz2 // Plot char in the bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size1 - // [29] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@9 -- vbuz1_le_0_then_la1 + // [38] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@11 -- vbuz1_le_0_then_la1 lda bucket_size1 cmp #0 - beq b9 - jmp b11 - // main::@11 - b11: - // [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda bucket_idx - asl - sta _17 - // [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) -- pwuz1=pptc1_derefidx_vbuz2 - ldy _17 - lda BUCKETS,y - sta bucket1 - lda BUCKETS+1,y - sta bucket1+1 - // [32] phi from main::@11 to main::@10 [phi:main::@11->main::@10] - b10_from_b11: - // [32] phi (byte) main::i1#2 = (byte) 0 [phi:main::@11->main::@10#0] -- vbuz1=vbuc1 - lda #0 - sta i1 - jmp b10 - // [32] phi from main::@10 to main::@10 [phi:main::@10->main::@10] - b10_from_b10: - // [32] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@10->main::@10#0] -- register_copy + beq b11 jmp b10 // main::@10 b10: - // [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 - lda i1 + // [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 -- vwuz1=_word_vbuz2 + lda bucket_idx + sta _16 + lda #0 + sta _16+1 + // [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda _16 asl - sta _18 - // [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuz3 - ldy _18 + sta _21 + lda _16+1 + rol + sta _21+1 + // [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 -- pptz1=pptc1_plus_vwuz2 + lda _21 + clc + adc #BUCKETS + sta _24+1 + // [42] (word*) main::bucket1#0 ← *((word**~) main::$24) -- pwuz1=_deref_pptz2 + ldy #0 + lda (_24),y + sta bucket1 + iny + lda (_24),y + sta bucket1+1 + // [43] phi from main::@10 to main::@12 [phi:main::@10->main::@12] + b12_from_b10: + // [43] phi (byte) main::i2#2 = (byte) 0 [phi:main::@10->main::@12#0] -- vbuz1=vbuc1 + lda #0 + sta i2 + jmp b12 + // [43] phi from main::@12 to main::@12 [phi:main::@12->main::@12] + b12_from_b12: + // [43] phi (byte) main::i2#2 = (byte) main::i2#1 [phi:main::@12->main::@12#0] -- register_copy + jmp b12 + // main::@12 + b12: + // [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + lda i2 + asl + sta _22 + // [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuz3 + ldy _22 clc lda #SCREEN_FILL adc (bucket1),y sta sc1+1 - // [35] *((byte*) main::sc1#0) ← (byte) '*' -- _deref_pbuz1=vbuc1 + // [46] *((byte*) main::sc1#0) ← (byte) '*' -- _deref_pbuz1=vbuc1 lda #'*' ldy #0 sta (sc1),y - // [36] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuz1=_inc_vbuz1 - inc i1 - // [37] if((byte) main::i1#1<(byte) main::bucket_size1#0) goto main::@10 -- vbuz1_lt_vbuz2_then_la1 - lda i1 + // [47] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuz1=_inc_vbuz1 + inc i2 + // [48] if((byte) main::i2#1<(byte) main::bucket_size1#0) goto main::@12 -- vbuz1_lt_vbuz2_then_la1 + lda i2 cmp bucket_size1 - bcc b10_from_b10 - jmp b9 - // main::@9 - b9: - // [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + bcc b12_from_b12 + jmp b11 + // main::@11 + b11: + // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@9 to main::@1 [phi:main::@9->main::@1] - b1_from_b9: - // [10] phi (byte) main::bucket_idx#11 = (byte) main::bucket_idx#6 [phi:main::@9->main::@1#0] -- register_copy - jmp b1 + // [20] phi from main::@11 to main::@3 [phi:main::@11->main::@3] + b3_from_b11: + // [20] phi (byte) main::bucket_idx#9 = (byte) main::bucket_idx#1 [phi:main::@11->main::@3#0] -- register_copy + jmp b3 } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. init_buckets: { - .label _5 = $49 - .label _9 = $50 - .label _11 = $4b - .label _12 = $4d - .label _13 = $52 - .label i = 5 - .label dist = 6 - .label i1 = 8 - .label i2 = $a - .label i3 = $b - .label distance = $4c - .label bucket = $4e - .label dist_3 = $c - .label i4 = $e - .label dist_5 = $c - // [40] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + .label _5 = $61 + .label _9 = $68 + .label _10 = $70 + .label _12 = $63 + .label _13 = $6a + .label _14 = $72 + .label i = $d + .label dist = $e + .label i1 = $10 + .label i2 = $12 + .label i3 = $14 + .label distance = $67 + .label bucket = $6e + .label dist_3 = $15 + .label i4 = $17 + .label dist_5 = $15 + .label _15 = $5f + .label _16 = $65 + .label _17 = $6c + // [51] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] b1_from_init_buckets: - // [40] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 + // [51] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 lda #0 sta i jmp b1 // Init bucket sizes to 0 - // [40] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [51] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] b1_from_b1: - // [40] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [51] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy jmp b1 // init_buckets::@1 b1: - // [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy i sta BUCKET_SIZES,y - // [42] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 + // [53] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 inc i - // [43] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #NUM_BUCKETS-1+1 - cmp i + // [54] if((byte) init_buckets::i#1!=(byte) 0) goto init_buckets::@1 -- vbuz1_neq_0_then_la1 + lda i + cmp #0 bne b1_from_b1 - // [44] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] + // [55] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] b2_from_b1: - // [44] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 + // [55] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - // [44] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 - lda #init_buckets::@2#1] -- pbuz1=pbuc1 + lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist+1 jmp b2 - // [44] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] + // [55] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] b2_from_b2: - // [44] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy - // [44] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy + // [55] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy + // [55] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy jmp b2 // init_buckets::@2 b2: - // [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 + // [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 ldy #0 lda (dist),y tax inc BUCKET_SIZES,x - // [46] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [57] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc dist bne !+ inc dist+1 !: - // [47] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [58] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 + // [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>$3e8 bne b2_from_b2 lda i1 cmp #<$3e8 bne b2_from_b2 - // [49] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [60] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] b3_from_b2: - // [49] phi (byte) init_buckets::i2#2 = (byte) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vbuz1=vbuc1 - lda #0 + // [60] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + lda #<0 sta i2 + lda #>0 + sta i2+1 jmp b3 // Allocate the buckets - // [49] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] + // [60] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] b3_from_b6: - // [49] phi (byte) init_buckets::i2#2 = (byte) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy + // [60] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy jmp b3 // init_buckets::@3 b3: - // [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 -- vwuz1=pbuc1_derefidx_vbuz2_rol_1 - ldy i2 - lda BUCKET_SIZES,y + // [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 + lda i2 + clc + adc #BUCKET_SIZES + sta _15+1 + // [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 + ldy #0 + lda _15 asl sta malloc.size lda #0 rol sta malloc.size+1 - // [51] call malloc - // [73] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] + // [63] call malloc + // [88] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] malloc_from_b3: - // [73] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy - // [73] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy + // [88] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy + // [88] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy jsr malloc jmp b6 // init_buckets::@6 b6: - // [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda malloc.mem sta _5 lda malloc.mem+1 sta _5+1 - // [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda i2 asl - sta _11 - // [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 -- pptc1_derefidx_vbuz1=pwuz2 - ldy _11 + sta _12 + lda i2+1 + rol + sta _12+1 + // [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz2 + lda _12 + clc + adc #BUCKETS + sta _16+1 + // [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 + ldy #0 lda _5 - sta BUCKETS,y + sta (_16),y + iny lda _5+1 - sta BUCKETS+1,y - // [55] (byte) init_buckets::i2#1 ← ++ (byte) init_buckets::i2#2 -- vbuz1=_inc_vbuz1 + sta (_16),y + // [68] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc i2 - // [56] if((byte) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vbuz1_neq_vbuc1_then_la1 - lda #NUM_BUCKETS-1+1 - cmp i2 + bne !+ + inc i2+1 + !: + // [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + lda i2+1 + cmp #>NUM_BUCKETS-1+1 bne b3_from_b6 - // [57] phi from init_buckets::@6 to init_buckets::@4 [phi:init_buckets::@6->init_buckets::@4] + lda i2 + cmp #init_buckets::@4] b4_from_b6: - // [57] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuz1=vbuc1 + // [70] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuz1=vbuc1 lda #0 sta i3 jmp b4 // Iterate all distances and fill the buckets with indices into the screens - // [57] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] + // [70] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] b4_from_b4: - // [57] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy + // [70] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy jmp b4 // init_buckets::@4 b4: - // [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy i3 sta BUCKET_IDX,y - // [59] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 + // [72] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 inc i3 - // [60] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuz1_neq_vbuc1_then_la1 - lda #NUM_BUCKETS-1+1 - cmp i3 + // [73] if((byte) init_buckets::i3#1!=(byte) 0) goto init_buckets::@4 -- vbuz1_neq_0_then_la1 + lda i3 + cmp #0 bne b4_from_b4 - // [61] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] + // [74] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] b5_from_b4: - // [61] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 + // [74] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 lda #<0 sta i4 lda #>0 sta i4+1 - // [61] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 - lda #init_buckets::@5#1] -- pbuz1=pbuc1 + lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist_5+1 jmp b5 - // [61] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] b5_from_b5: - // [61] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy - // [61] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy + // [74] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + // [74] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy jmp b5 // init_buckets::@5 b5: - // [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 + // [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_5),y sta distance - // [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 lda distance + sta _9 + lda #0 + sta _9+1 + // [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda _9 asl - sta _12 - // [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) -- pwuz1=pptc1_derefidx_vbuz2 - ldy _12 - lda BUCKETS,y + sta _13 + lda _9+1 + rol + sta _13+1 + // [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz2 + lda _13 + clc + adc #BUCKETS + sta _17+1 + // [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 + ldy #0 + lda (_17),y sta bucket - lda BUCKETS+1,y + iny + lda (_17),y sta bucket+1 - // [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 + // [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 -- vwuz1=pbuz2_minus_pbuc1 lda dist_5 sec - sbc #SCREEN_DIST - sta _9+1 - // [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_rol_1 + sbc #>SCREEN_MIX + sta _10+1 + // [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuc1_derefidx_vbuz2_rol_1 ldy distance lda BUCKET_IDX,y asl - sta _13 - // [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 -- pwuz1_derefidx_vbuz2=vwuz3 - ldy _13 - lda _9 + sta _14 + // [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuz2=vwuz3 + ldy _14 + lda _10 sta (bucket),y iny - lda _9+1 + lda _10+1 sta (bucket),y - // [68] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 + // [83] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 ldx distance inc BUCKET_IDX,x - // [69] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [84] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc dist_3 bne !+ inc dist_3+1 !: - // [70] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [85] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc i4 bne !+ inc i4+1 !: - // [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 + // [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 lda i4+1 cmp #>$3e8 bne b5_from_b5 @@ -4578,17 +4922,17 @@ init_buckets: { jmp breturn // init_buckets::@return breturn: - // [72] return + // [87] return rts } // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($12) size) +// malloc(word zeropage($1b) size) malloc: { - .label mem = $53 - .label size = $12 - // [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz3 + .label mem = $73 + .label size = $1b + // [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz3 lda heap_head sec sbc size @@ -4596,7 +4940,7 @@ malloc: { lda heap_head+1 sbc size+1 sta mem+1 - // [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 @@ -4604,105 +4948,105 @@ malloc: { jmp breturn // malloc::@return breturn: - // [76] return + // [91] return rts } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center init_angle_screen: { - .label _2 = $55 - .label _3 = $56 - .label _6 = $59 - .label _10 = $64 - .label _12 = $67 - .label _13 = $68 - .label _14 = $69 - .label xw = $57 - .label yw = $5a - .label angle_w = $62 - .label ang_w = $66 - .label x = $19 - .label xb = $1a - .label screen_topline = $17 - .label screen_bottomline = $15 - .label y = $14 - // [78] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + .label _2 = $75 + .label _3 = $76 + .label _6 = $79 + .label _10 = $84 + .label _12 = $87 + .label _13 = $88 + .label _14 = $89 + .label xw = $77 + .label yw = $7a + .label angle_w = $82 + .label ang_w = $86 + .label x = $22 + .label xb = $23 + .label screen_topline = $20 + .label screen_bottomline = $1e + .label y = $1d + // [93] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] b1_from_init_angle_screen: - // [78] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 + // [93] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 lda #SCREEN_ANGLE+$28*$c sta screen_topline+1 - // [78] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 + // [93] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 lda #SCREEN_ANGLE+$28*$c sta screen_bottomline+1 - // [78] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [93] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [78] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] + // [93] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] b1_from_b3: - // [78] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy - // [78] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy - // [78] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy + // [93] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy + // [93] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy + // [93] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy jmp b1 // init_angle_screen::@1 b1: - // [79] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [94] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] b2_from_b1: - // [79] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [94] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [79] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [94] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta x jmp b2 - // [79] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] + // [94] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] b2_from_b4: - // [79] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy - // [79] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy + // [94] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy + // [94] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy jmp b2 // init_angle_screen::@2 b2: - // [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _2 - // [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2 + // [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _2 sta _3 - // [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _3 ldy #0 sta xw+1 sty xw - // [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _6 - // [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda _6 ldy #0 sta yw+1 sty yw - // [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda xw sta atan2_16.x lda xw+1 sta atan2_16.x+1 - // [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda yw sta atan2_16.y lda yw+1 sta atan2_16.y+1 - // [87] call atan2_16 + // [102] call atan2_16 jsr atan2_16 - // [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda atan2_16.return sta atan2_16.return_2 lda atan2_16.return+1 @@ -4710,12 +5054,12 @@ init_angle_screen: { jmp b4 // init_angle_screen::@4 b4: - // [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda atan2_16.return_2 sta angle_w lda atan2_16.return_2+1 sta angle_w+1 - // [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -4723,52 +5067,52 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _10+1 - // [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 + // [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 lda _10+1 sta ang_w - // [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda ang_w eor #$ff clc adc #1 sta _12 - // [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuz3 + // [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuz3 lda _12 ldy xb sta (screen_topline),y - // [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax ang_w axs #-[$80] stx _13 - // [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda _13 ldy x sta (screen_topline),y - // [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc ang_w sta _14 - // [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda _14 ldy x sta (screen_bottomline),y - // [99] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [114] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [100] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [115] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [101] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 + // [116] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$13+1 bcc b2_from_b4 jmp b3 // init_angle_screen::@3 b3: - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda screen_topline sec sbc #<$28 @@ -4776,7 +5120,7 @@ init_angle_screen: { lda screen_topline+1 sbc #>$28 sta screen_topline+1 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen_bottomline @@ -4784,51 +5128,51 @@ init_angle_screen: { bcc !+ inc screen_bottomline+1 !: - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 + // [119] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 inc y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [120] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp y bne b1_from_b3 jmp breturn // init_angle_screen::@return breturn: - // [106] return + // [121] return rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($5c) x, signed word zeropage($5e) y) +// atan2_16(signed word zeropage($7c) x, signed word zeropage($7e) y) atan2_16: { - .label _2 = $1b - .label _7 = $1d - .label _23 = $6b - .label _24 = $6a - .label yi = $1b - .label xi = $1d - .label angle = $22 - .label xd = $27 - .label yd = $25 - .label shift = $24 - .label angle_2 = $20 - .label angle_3 = $20 - .label i = $1f - .label return = $22 - .label x = $5c - .label y = $5e - .label return_2 = $60 - .label angle_6 = $20 - .label angle_12 = $20 - .label angle_13 = $20 - // [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + .label _2 = $24 + .label _7 = $26 + .label _23 = $8b + .label _24 = $8a + .label yi = $24 + .label xi = $26 + .label angle = $2b + .label xd = $30 + .label yd = $2e + .label shift = $2d + .label angle_2 = $29 + .label angle_3 = $29 + .label i = $28 + .label return = $2b + .label x = $7c + .label y = $7e + .label return_2 = $80 + .label angle_6 = $29 + .label angle_12 = $29 + .label angle_13 = $29 + // [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bpl b1 jmp b2 // atan2_16::@2 b2: - // [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -4836,20 +5180,20 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [109] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [124] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] b3_from_b1: b3_from_b2: - // [109] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [124] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp b3 // atan2_16::@3 b3: - // [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda x+1 bpl b4 jmp b5 // atan2_16::@5 b5: - // [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -4857,54 +5201,54 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [112] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [127] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] b6_from_b4: b6_from_b5: - // [112] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [127] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp b6 // atan2_16::@6 b6: - // [113] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [128] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] b10_from_b6: - // [113] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [128] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #0 sta angle_12 lda #0 sta angle_12+1 - // [113] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + // [128] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta i - // [113] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [113] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [128] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [128] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@10 b10: - // [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda yi+1 bne b11 lda yi bne b11 - // [115] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [130] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] b12_from_b10: b12_from_b19: - // [115] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [130] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp b12 // atan2_16::@12 b12: - // [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda angle_6+1 lsr sta angle+1 lda angle_6 ror sta angle - // [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda x+1 bpl b7_from_b12 jmp b21 // atan2_16::@21 b21: - // [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -4912,20 +5256,20 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [119] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [134] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] b7_from_b12: b7_from_b21: - // [119] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [134] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp b7 // atan2_16::@7 b7: - // [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda y+1 bpl b8_from_b7 jmp b9 // atan2_16::@9 b9: - // [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -4933,81 +5277,81 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [122] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [137] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] b8_from_b7: b8_from_b9: - // [122] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [137] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp b8 // atan2_16::@8 b8: jmp breturn // atan2_16::@return breturn: - // [123] return + // [138] return rts // atan2_16::@11 b11: - // [124] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 + // [139] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda i sta shift - // [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [127] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [142] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] b13_from_b11: b13_from_b14: - // [127] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [127] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [127] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [142] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [142] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [142] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp b13 // atan2_16::@13 b13: - // [128] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 + // [143] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 lda shift cmp #2 bcs b14 jmp b15 // atan2_16::@15 b15: - // [129] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 + // [144] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp shift beq b17_from_b15 jmp b16 // atan2_16::@16 b16: - // [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda xd+1 cmp #$80 ror xd+1 ror xd - // [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda yd+1 cmp #$80 ror yd+1 ror yd - // [132] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [147] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] b17_from_b15: b17_from_b16: - // [132] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [132] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [147] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [147] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp b17 // atan2_16::@17 b17: - // [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda yi+1 bpl b18 jmp b20 // atan2_16::@20 b20: - // [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda xi sec sbc yd @@ -5015,7 +5359,7 @@ atan2_16: { lda xi+1 sbc yd+1 sta xi+1 - // [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda yi clc adc xd @@ -5023,11 +5367,11 @@ atan2_16: { lda yi+1 adc xd+1 sta yi+1 - // [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _24 - // [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 + // [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 ldy _24 sec lda angle_3 @@ -5036,31 +5380,31 @@ atan2_16: { lda angle_3+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle_3+1 - // [138] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [153] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] b19_from_b18: b19_from_b20: - // [138] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [138] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [138] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [153] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [153] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [153] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp b19 // atan2_16::@19 b19: - // [139] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + // [154] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc i - // [140] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + // [155] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 lda #CORDIC_ITERATIONS_16-1+1 cmp i beq b12_from_b19 - // [113] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [128] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] b10_from_b19: - // [113] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [113] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [113] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [113] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [128] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [128] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [128] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [128] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@18 b18: - // [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda xi clc adc yd @@ -5068,7 +5412,7 @@ atan2_16: { lda xi+1 adc yd+1 sta xi+1 - // [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda yi sec sbc xd @@ -5076,11 +5420,11 @@ atan2_16: { lda yi+1 sbc xd+1 sta yi+1 - // [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _23 - // [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 + // [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 ldy _23 clc lda angle_2 @@ -5092,7 +5436,7 @@ atan2_16: { jmp b19_from_b18 // atan2_16::@14 b14: - // [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda xd+1 cmp #$80 ror xd+1 @@ -5101,7 +5445,7 @@ atan2_16: { cmp #$80 ror xd+1 ror xd - // [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda yd+1 cmp #$80 ror yd+1 @@ -5110,13 +5454,13 @@ atan2_16: { cmp #$80 ror yd+1 ror yd - // [147] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 + // [162] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 dec shift dec shift jmp b13_from_b14 // atan2_16::@4 b4: - // [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -5124,7 +5468,7 @@ atan2_16: { jmp b6_from_b4 // atan2_16::@1 b1: - // [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -5136,83 +5480,83 @@ atan2_16: { // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center init_dist_screen: { - .label _5 = $2e - .label _7 = $2e - .label _13 = $31 - .label _15 = $31 - .label y2 = $6c - .label yd = $2e - .label yds = $6f - .label x2 = $71 - .label xd = $31 - .label xds = $74 - .label ds = $76 - .label d = $7b - .label x = $2f - .label xb = $30 - .label screen_topline = $2a - .label screen_bottomline = $2c - .label y = $29 - // [151] call init_squares - // [221] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + .label _5 = $37 + .label _7 = $37 + .label _13 = $3a + .label _15 = $3a + .label y2 = $8c + .label yd = $37 + .label yds = $8f + .label x2 = $91 + .label xd = $3a + .label xds = $94 + .label ds = $96 + .label d = $9b + .label x = $38 + .label xb = $39 + .label screen_topline = $33 + .label screen_bottomline = $35 + .label y = $32 + // [166] call init_squares + // [236] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares - // [152] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] + // [167] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] b1_from_init_dist_screen: - // [152] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 + // [167] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 lda #SCREEN_DIST+$28*$18 sta screen_bottomline+1 - // [152] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 + // [167] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 lda #SCREEN_DIST sta screen_topline+1 - // [152] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [167] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [152] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] + // [167] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] b1_from_b9: - // [152] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy - // [152] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy - // [152] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy + // [167] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy + // [167] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy + // [167] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy jmp b1 // init_dist_screen::@1 b1: - // [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta y2 - // [154] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 + // [169] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 lda y2 cmp #$18 bcs b2 jmp b3 // init_dist_screen::@3 b3: - // [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$18 sec sbc y2 sta _5 - // [156] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [171] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] b4_from_b2: b4_from_b3: - // [156] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [171] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy jmp b4 // init_dist_screen::@4 b4: - // [157] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 + // [172] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 lda yd sta sqr.val - // [158] call sqr - // [217] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [173] call sqr + // [232] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [217] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [232] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [159] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [174] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_2 lda sqr.return+1 @@ -5220,59 +5564,59 @@ init_dist_screen: { jmp b10 // init_dist_screen::@10 b10: - // [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 + // [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 lda sqr.return_2 sta yds lda sqr.return_2+1 sta yds+1 - // [161] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] + // [176] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] b5_from_b10: - // [161] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [176] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [161] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [176] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta x jmp b5 - // [161] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] + // [176] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] b5_from_b12: - // [161] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy - // [161] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy + // [176] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy + // [176] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy jmp b5 // init_dist_screen::@5 b5: - // [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta x2 - // [163] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuz1_ge_vbuc1_then_la1 + // [178] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuz1_ge_vbuc1_then_la1 lda x2 cmp #$27 bcs b6 jmp b7 // init_dist_screen::@7 b7: - // [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc x2 sta _13 - // [165] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8] + // [180] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8] b8_from_b6: b8_from_b7: - // [165] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy + // [180] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy jmp b8 // init_dist_screen::@8 b8: - // [166] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [181] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda xd sta sqr.val - // [167] call sqr - // [217] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] + // [182] call sqr + // [232] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] sqr_from_b8: - // [217] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy + // [232] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy jsr sqr - // [168] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [183] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_3 lda sqr.return+1 @@ -5280,12 +5624,12 @@ init_dist_screen: { jmp b11 // init_dist_screen::@11 b11: - // [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + // [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 lda sqr.return_3 sta xds lda sqr.return_3+1 sta xds+1 - // [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 lda xds clc adc yds @@ -5293,50 +5637,50 @@ init_dist_screen: { lda xds+1 adc yds+1 sta ds+1 - // [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda ds sta sqrt.val lda ds+1 sta sqrt.val+1 - // [172] call sqrt + // [187] call sqrt jsr sqrt - // [173] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [188] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda sqrt.return sta sqrt.return_2 jmp b12 // init_dist_screen::@12 b12: - // [174] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + // [189] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda sqrt.return_2 sta d - // [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_topline),y - // [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy x sta (screen_bottomline),y - // [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_topline),y - // [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda d ldy xb sta (screen_bottomline),y - // [179] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [194] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [180] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [195] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [181] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 + // [196] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$13+1 bcc b5_from_b12 jmp b9 // init_dist_screen::@9 b9: - // [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen_topline @@ -5344,7 +5688,7 @@ init_dist_screen: { bcc !+ inc screen_topline+1 !: - // [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda screen_bottomline sec sbc #<$28 @@ -5352,27 +5696,27 @@ init_dist_screen: { lda screen_bottomline+1 sbc #>$28 sta screen_bottomline+1 - // [184] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [199] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc y - // [185] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [200] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp y bne b1_from_b9 jmp breturn // init_dist_screen::@return breturn: - // [186] return + // [201] return rts // init_dist_screen::@6 b6: - // [187] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 + // [202] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 lax x2 axs #$27 stx _15 jmp b8_from_b6 // init_dist_screen::@2 b2: - // [188] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 + // [203] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 lax y2 axs #$18 stx _7 @@ -5382,29 +5726,29 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($78) val) +// sqrt(word zeropage($98) val) sqrt: { - .label _1 = $84 - .label _3 = $82 - .label found = $80 - .label return = $86 - .label val = $78 - .label return_2 = $7a - // [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 + .label _1 = $a4 + .label _3 = $a2 + .label found = $a0 + .label return = $a6 + .label val = $98 + .label return_2 = $9a + // [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda val sta bsearch16u.key lda val+1 sta bsearch16u.key+1 - // [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta bsearch16u.items lda SQUARES+1 sta bsearch16u.items+1 - // [191] call bsearch16u - // [198] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [206] call bsearch16u + // [213] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 + // [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 lda bsearch16u.return sta bsearch16u.return_3 lda bsearch16u.return+1 @@ -5412,12 +5756,12 @@ sqrt: { jmp b1 // sqrt::@1 b1: - // [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 + // [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 lda bsearch16u.return_3 sta found lda bsearch16u.return_3+1 sta found+1 - // [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 + // [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 lda found sec sbc SQUARES @@ -5425,20 +5769,20 @@ sqrt: { lda found+1 sbc SQUARES+1 sta _3+1 - // [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda _3+1 lsr sta _1+1 lda _3 ror sta _1 - // [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 + // [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 lda _1 sta return jmp breturn // sqrt::@return breturn: - // [197] return + // [212] return rts } // bsearch16u @@ -5447,34 +5791,34 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($7c) key, word* zeropage($32) items, byte zeropage($34) num) +// bsearch16u(word zeropage($9c) key, word* zeropage($3b) items, byte zeropage($3d) num) bsearch16u: { - .label _2 = $32 - .label _6 = $87 - .label _16 = $88 - .label pivot = $89 - .label result = $8b - .label return = $32 - .label num = $34 - .label items = $32 - .label key = $7c - .label return_3 = $7e - // [199] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + .label _2 = $3b + .label _6 = $a7 + .label _16 = $a8 + .label pivot = $a9 + .label result = $ab + .label return = $3b + .label num = $3d + .label items = $3b + .label key = $9c + .label return_3 = $9e + // [214] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] b3_from_bsearch16u: - // [199] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [199] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + // [214] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [214] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta num jmp b3 // bsearch16u::@3 b3: - // [200] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [215] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 lda num bne b4 jmp b5 // bsearch16u::@5 b5: - // [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -5488,7 +5832,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -5496,33 +5840,33 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [203] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [218] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [203] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [218] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [204] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [219] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] breturn_from_b2: breturn_from_b8: - // [204] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [219] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp breturn // bsearch16u::@return breturn: - // [205] return + // [220] return rts // bsearch16u::@4 b4: - // [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + // [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 lda num lsr sta _6 - // [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda _6 asl sta _16 - // [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + // [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 lda _16 clc adc items @@ -5530,7 +5874,7 @@ bsearch16u: { lda #0 adc items+1 sta pivot+1 - // [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -5540,7 +5884,7 @@ bsearch16u: { iny sbc (pivot),y sta result+1 - // [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 lda result+1 bne b6 lda result @@ -5548,7 +5892,7 @@ bsearch16u: { jmp b8 // bsearch16u::@8 b8: - // [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda pivot sta return lda pivot+1 @@ -5556,7 +5900,7 @@ bsearch16u: { jmp breturn_from_b8 // bsearch16u::@6 b6: - // [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda result+1 bmi b7_from_b6 bne !+ @@ -5566,7 +5910,7 @@ bsearch16u: { jmp b9 // bsearch16u::@9 b9: - // [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 lda #1*SIZEOF_WORD clc adc pivot @@ -5574,39 +5918,39 @@ bsearch16u: { lda #0 adc pivot+1 sta items+1 - // [214] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 + // [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 dec num - // [215] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [230] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] b7_from_b6: b7_from_b9: - // [215] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [215] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [230] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [230] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp b7 // bsearch16u::@7 b7: - // [216] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr num - // [199] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [214] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] b3_from_b7: - // [199] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [199] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [214] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [214] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp b3 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() -// sqr(byte zeropage($35) val) +// sqr(byte zeropage($3e) val) sqr: { - .label _0 = $8d - .label return = $8e - .label val = $35 - .label return_2 = $6d - .label return_3 = $72 - // [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label _0 = $ad + .label return = $ae + .label val = $3e + .label return_2 = $8d + .label return_3 = $92 + // [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda val asl sta _0 - // [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 + // [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 ldy _0 lda (SQUARES),y sta return @@ -5616,27 +5960,27 @@ sqr: { jmp breturn // sqr::@return breturn: - // [220] return + // [235] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label _3 = $92 - .label _4 = $93 - .label squares = $38 - .label sqr = $36 - .label i = $3a - // [222] call malloc - // [73] phi from init_squares to malloc [phi:init_squares->malloc] + .label _3 = $b2 + .label _4 = $b3 + .label squares = $41 + .label sqr = $3f + .label i = $43 + // [237] call malloc + // [88] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [73] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [88] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta malloc.size lda #0 sta malloc.size+1 - // [73] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 + // [88] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -5645,44 +5989,44 @@ init_squares: { jmp b2 // init_squares::@2 b2: - // [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda malloc.mem sta SQUARES lda malloc.mem+1 sta SQUARES+1 - // [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [225] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [240] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [225] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 + // [240] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta i - // [225] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [225] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [240] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [240] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #0 sta sqr lda #0 sta sqr+1 jmp b1 - // [225] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [240] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [225] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [225] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [225] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [240] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [240] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [240] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -5690,15 +6034,15 @@ init_squares: { bcc !+ inc squares+1 !: - // [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _3 - // [229] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [244] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy _3 iny sty _4 - // [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 + // [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 lda _4 clc adc sqr @@ -5706,16 +6050,16 @@ init_squares: { bcc !+ inc sqr+1 !: - // [231] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 + // [246] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc i - // [232] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 + // [247] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_SQUARES-1+1 cmp i bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [233] return + // [248] return rts } // File Data @@ -5729,6 +6073,9 @@ CORDIC_ATAN2_ANGLES_16: // = malloc(1000); // Screen containing angle to center SCREEN_ANGLE: .fill $3e8, 0 + // = malloc(1000); + // Screen containing angle to center + SCREEN_MIX: .fill $3e8, 0 // Array containing the bucket size for each of the distance buckets BUCKET_SIZES: .fill NUM_BUCKETS, 0 // Buckets containing screen indices for each distance from the center. @@ -5739,610 +6086,677 @@ CORDIC_ATAN2_ANGLES_16: BUCKET_IDX: .fill NUM_BUCKETS, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 [ main::bucket_idx#11 ] ( main:2 [ main::bucket_idx#11 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -Statement [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 [ main::bucket_idx#11 ] ( main:2 [ main::bucket_idx#11 ] ) always clobbers reg byte a -Statement [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 [ main::bucket_idx#11 main::bucket_size#0 main::$15 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::$15 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ main::bucket_size#0 ] -Statement [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::$16 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ] -Statement [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::sc#0 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::sc#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:59 [ main::bucket_size#0 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ] -Statement [21] *((byte*) main::sc#0) ← (byte) ' ' [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 ] ) always clobbers reg byte a reg byte y -Statement [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::bucket_size1#0 main::$17 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::$17 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:66 [ main::bucket_size1#0 ] -Statement [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 ] ) always clobbers reg byte a -Statement [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::$18 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::$18 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::i1#2 main::i1#1 ] -Statement [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::sc1#0 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::sc1#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:66 [ main::bucket_size1#0 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::i1#2 main::i1#1 ] -Statement [35] *((byte*) main::sc1#0) ← (byte) '*' [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ init_buckets::i#2 init_buckets::i#1 ] -Statement [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a -Statement [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ init_buckets::i2#2 init_buckets::i2#1 ] -Statement [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a -Statement [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$11 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$11 heap_head#1 ] ) always clobbers reg byte a -Statement [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a -Statement [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:9 [ init_buckets::i3#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ init_buckets::i3#2 init_buckets::i3#1 ] -Statement [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$12 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$12 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:76 [ init_buckets::distance#0 ] -Statement [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a -Statement [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 ] ) always clobbers reg byte a -Statement [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 init_buckets::$13 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 init_buckets::$13 ] ) always clobbers reg byte a -Statement [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:76 [ init_buckets::distance#0 ] -Statement [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:51 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:151::malloc:222 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:51 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:151::malloc:222 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a -Statement [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a -Statement [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] -Statement [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] -Statement [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Statement [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [159] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a -Statement [168] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:158 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:167 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:158 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:167 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:58 [ init_squares::i#2 init_squares::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:58 [ init_squares::i#2 init_squares::i#1 ] -Statement [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 [ main::bucket_idx#11 ] ( main:2 [ main::bucket_idx#11 ] ) always clobbers reg byte a -Statement [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 [ main::bucket_idx#11 ] ( main:2 [ main::bucket_idx#11 ] ) always clobbers reg byte a -Statement [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 [ main::bucket_idx#11 main::bucket_size#0 main::$15 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::$15 ] ) always clobbers reg byte a -Statement [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::$16 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::sc#0 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::sc#0 ] ) always clobbers reg byte a reg byte y -Statement [21] *((byte*) main::sc#0) ← (byte) ' ' [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 ] ) always clobbers reg byte a reg byte y -Statement [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::bucket_size1#0 main::$17 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::$17 ] ) always clobbers reg byte a -Statement [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 ] ) always clobbers reg byte a -Statement [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::$18 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::$18 ] ) always clobbers reg byte a -Statement [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::sc1#0 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::sc1#0 ] ) always clobbers reg byte a reg byte y -Statement [35] *((byte*) main::sc1#0) ← (byte) '*' [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a -Statement [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a -Statement [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a -Statement [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a -Statement [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$11 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$11 heap_head#1 ] ) always clobbers reg byte a -Statement [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a -Statement [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:9 [ init_buckets::i3#2 ] ) always clobbers reg byte a -Statement [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$12 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$12 ] ) always clobbers reg byte a -Statement [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a -Statement [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 ] ) always clobbers reg byte a -Statement [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 init_buckets::$13 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 init_buckets::$13 ] ) always clobbers reg byte a -Statement [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:51 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:151::malloc:222 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:51 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:151::malloc:222 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a -Statement [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a -Statement [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a -Statement [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a -Statement [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [159] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a -Statement [168] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:123 [ init_dist_screen::d#0 ] -Statement [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:158 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:167 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:158 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:167 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 [ main::bucket_idx#11 ] ( main:2 [ main::bucket_idx#11 ] ) always clobbers reg byte a -Statement [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 [ main::bucket_idx#11 ] ( main:2 [ main::bucket_idx#11 ] ) always clobbers reg byte a -Statement [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 [ main::bucket_idx#11 main::bucket_size#0 main::$15 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::$15 ] ) always clobbers reg byte a -Statement [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 ] ) always clobbers reg byte a -Statement [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::$16 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::$16 ] ) always clobbers reg byte a -Statement [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::sc#0 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 main::sc#0 ] ) always clobbers reg byte a reg byte y -Statement [21] *((byte*) main::sc#0) ← (byte) ' ' [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 ] ( main:2 [ main::bucket_idx#11 main::bucket_size#0 main::bucket#0 main::i#2 ] ) always clobbers reg byte a reg byte y -Statement [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::bucket_size1#0 main::$17 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::$17 ] ) always clobbers reg byte a -Statement [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 ] ) always clobbers reg byte a -Statement [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::$18 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::$18 ] ) always clobbers reg byte a -Statement [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::sc1#0 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 main::sc1#0 ] ) always clobbers reg byte a reg byte y -Statement [35] *((byte*) main::sc1#0) ← (byte) '*' [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 ] ( main:2 [ main::bucket_idx#6 main::bucket_size1#0 main::bucket1#0 main::i1#2 ] ) always clobbers reg byte a reg byte y -Statement [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a -Statement [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y -Statement [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a -Statement [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a -Statement [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a -Statement [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$11 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$11 heap_head#1 ] ) always clobbers reg byte a -Statement [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a -Statement [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:9 [ init_buckets::i3#2 ] ) always clobbers reg byte a -Statement [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$12 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$12 ] ) always clobbers reg byte a -Statement [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a -Statement [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 ] ) always clobbers reg byte a -Statement [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 init_buckets::$13 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$9 init_buckets::$13 ] ) always clobbers reg byte a -Statement [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:9 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:51 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:151::malloc:222 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:51 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:151::malloc:222 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a -Statement [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a -Statement [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a -Statement [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a -Statement [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a -Statement [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:87 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [159] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a -Statement [168] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:172 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:172::bsearch16u:191 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:158 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:167 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:158 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:167 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:151 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] : zp ZP_BYTE:2 , reg byte x , -Potential registers zp ZP_BYTE:3 [ main::i#2 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , -Potential registers zp ZP_BYTE:4 [ main::i1#2 main::i1#1 ] : zp ZP_BYTE:4 , reg byte x , -Potential registers zp ZP_BYTE:5 [ init_buckets::i#2 init_buckets::i#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:6 [ init_buckets::dist#4 init_buckets::dist#1 ] : zp ZP_WORD:6 , -Potential registers zp ZP_WORD:8 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp ZP_WORD:8 , -Potential registers zp ZP_BYTE:10 [ init_buckets::i2#2 init_buckets::i2#1 ] : zp ZP_BYTE:10 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:11 [ init_buckets::i3#2 init_buckets::i3#1 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:12 [ init_buckets::dist#5 init_buckets::dist#3 ] : zp ZP_WORD:12 , -Potential registers zp ZP_WORD:14 [ init_buckets::i4#2 init_buckets::i4#1 ] : zp ZP_WORD:14 , -Potential registers zp ZP_WORD:16 [ heap_head#13 heap_head#1 ] : zp ZP_WORD:16 , -Potential registers zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 ] : zp ZP_WORD:18 , -Potential registers zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] : zp ZP_BYTE:20 , reg byte x , -Potential registers zp ZP_WORD:21 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:21 , -Potential registers zp ZP_WORD:23 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:23 , -Potential registers zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:25 , reg byte x , -Potential registers zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:26 , reg byte x , -Potential registers zp ZP_WORD:27 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:27 , -Potential registers zp ZP_WORD:29 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:29 , -Potential registers zp ZP_BYTE:31 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:31 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:32 , -Potential registers zp ZP_WORD:34 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:34 , -Potential registers zp ZP_BYTE:36 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp ZP_BYTE:36 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:37 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:37 , -Potential registers zp ZP_WORD:39 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:39 , -Potential registers zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:41 , reg byte x , -Potential registers zp ZP_WORD:42 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:42 , -Potential registers zp ZP_WORD:44 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:44 , -Potential registers zp ZP_BYTE:46 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:47 , reg byte x , -Potential registers zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:48 , reg byte x , -Potential registers zp ZP_BYTE:49 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:50 , -Potential registers zp ZP_BYTE:52 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:52 , reg byte x , -Potential registers zp ZP_BYTE:53 [ sqr::val#2 sqr::val#0 sqr::val#1 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:54 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:54 , -Potential registers zp ZP_WORD:56 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:56 , -Potential registers zp ZP_BYTE:58 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:58 , reg byte x , -Potential registers zp ZP_BYTE:59 [ main::bucket_size#0 ] : zp ZP_BYTE:59 , reg byte x , -Potential registers zp ZP_BYTE:60 [ main::$15 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:61 [ main::bucket#0 ] : zp ZP_WORD:61 , -Potential registers zp ZP_BYTE:63 [ main::$16 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:64 [ main::sc#0 ] : zp ZP_WORD:64 , -Potential registers zp ZP_BYTE:66 [ main::bucket_size1#0 ] : zp ZP_BYTE:66 , reg byte x , -Potential registers zp ZP_BYTE:67 [ main::$17 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:68 [ main::bucket1#0 ] : zp ZP_WORD:68 , -Potential registers zp ZP_BYTE:70 [ main::$18 ] : zp ZP_BYTE:70 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:71 [ main::sc1#0 ] : zp ZP_WORD:71 , -Potential registers zp ZP_WORD:73 [ init_buckets::$5 ] : zp ZP_WORD:73 , -Potential registers zp ZP_BYTE:75 [ init_buckets::$11 ] : zp ZP_BYTE:75 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:76 [ init_buckets::distance#0 ] : zp ZP_BYTE:76 , reg byte x , -Potential registers zp ZP_BYTE:77 [ init_buckets::$12 ] : zp ZP_BYTE:77 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:78 [ init_buckets::bucket#0 ] : zp ZP_WORD:78 , -Potential registers zp ZP_WORD:80 [ init_buckets::$9 ] : zp ZP_WORD:80 , -Potential registers zp ZP_BYTE:82 [ init_buckets::$13 ] : zp ZP_BYTE:82 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:83 [ malloc::mem#0 ] : zp ZP_WORD:83 , -Potential registers zp ZP_BYTE:85 [ init_angle_screen::$2 ] : zp ZP_BYTE:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:86 [ init_angle_screen::$3 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:87 [ init_angle_screen::xw#0 ] : zp ZP_WORD:87 , -Potential registers zp ZP_BYTE:89 [ init_angle_screen::$6 ] : zp ZP_BYTE:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:90 [ init_angle_screen::yw#0 ] : zp ZP_WORD:90 , -Potential registers zp ZP_WORD:92 [ atan2_16::x#0 ] : zp ZP_WORD:92 , -Potential registers zp ZP_WORD:94 [ atan2_16::y#0 ] : zp ZP_WORD:94 , -Potential registers zp ZP_WORD:96 [ atan2_16::return#2 ] : zp ZP_WORD:96 , -Potential registers zp ZP_WORD:98 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:98 , -Potential registers zp ZP_WORD:100 [ init_angle_screen::$10 ] : zp ZP_WORD:100 , -Potential registers zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:102 , reg byte x , -Potential registers zp ZP_BYTE:103 [ init_angle_screen::$12 ] : zp ZP_BYTE:103 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:104 [ init_angle_screen::$13 ] : zp ZP_BYTE:104 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:105 [ init_angle_screen::$14 ] : zp ZP_BYTE:105 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:106 [ atan2_16::$24 ] : zp ZP_BYTE:106 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:107 [ atan2_16::$23 ] : zp ZP_BYTE:107 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:108 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:108 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:109 [ sqr::return#2 ] : zp ZP_WORD:109 , -Potential registers zp ZP_WORD:111 [ init_dist_screen::yds#0 ] : zp ZP_WORD:111 , -Potential registers zp ZP_BYTE:113 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:113 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:114 [ sqr::return#3 ] : zp ZP_WORD:114 , -Potential registers zp ZP_WORD:116 [ init_dist_screen::xds#0 ] : zp ZP_WORD:116 , -Potential registers zp ZP_WORD:118 [ init_dist_screen::ds#0 ] : zp ZP_WORD:118 , -Potential registers zp ZP_WORD:120 [ sqrt::val#0 ] : zp ZP_WORD:120 , -Potential registers zp ZP_BYTE:122 [ sqrt::return#2 ] : zp ZP_BYTE:122 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:123 [ init_dist_screen::d#0 ] : zp ZP_BYTE:123 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:124 [ bsearch16u::key#0 ] : zp ZP_WORD:124 , -Potential registers zp ZP_WORD:126 [ bsearch16u::return#3 ] : zp ZP_WORD:126 , -Potential registers zp ZP_WORD:128 [ sqrt::found#0 ] : zp ZP_WORD:128 , -Potential registers zp ZP_WORD:130 [ sqrt::$3 ] : zp ZP_WORD:130 , -Potential registers zp ZP_WORD:132 [ sqrt::$1 ] : zp ZP_WORD:132 , -Potential registers zp ZP_BYTE:134 [ sqrt::return#0 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:135 [ bsearch16u::$6 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:136 [ bsearch16u::$16 ] : zp ZP_BYTE:136 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:137 [ bsearch16u::pivot#0 ] : zp ZP_WORD:137 , -Potential registers zp ZP_WORD:139 [ bsearch16u::result#0 ] : zp ZP_WORD:139 , -Potential registers zp ZP_BYTE:141 [ sqr::$0 ] : zp ZP_BYTE:141 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:142 [ sqr::return#0 ] : zp ZP_WORD:142 , -Potential registers zp ZP_WORD:144 [ SQUARES#1 ] : zp ZP_WORD:144 , -Potential registers zp ZP_BYTE:146 [ init_squares::$3 ] : zp ZP_BYTE:146 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:147 [ init_squares::$4 ] : zp ZP_BYTE:147 , reg byte a , reg byte x , reg byte y , +Statement [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 main::$4 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 main::$4 heap_head#1 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:68 [ main::$3 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:68 [ main::$3 ] +Statement [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$5 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [12] *((byte*) main::mix#2) ← (byte~) main::$5 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 heap_head#1 ] ) always clobbers reg byte y +Statement [17] if((word) main::i#1!=(word) $3e8) goto main::@1 [ main::dist#1 main::angle#1 main::mix#1 main::i#1 heap_head#1 ] ( main:2 [ main::dist#1 main::angle#1 main::mix#1 main::i#1 heap_head#1 ] ) always clobbers reg byte a +Statement [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 [ main::bucket_idx#9 ] ( main:2 [ main::bucket_idx#9 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Statement [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 [ main::bucket_idx#9 ] ( main:2 [ main::bucket_idx#9 ] ) always clobbers reg byte a +Statement [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 [ main::bucket_idx#9 main::bucket_size#0 main::$11 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$11 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:71 [ main::bucket_size#0 ] +Statement [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 [ main::bucket_idx#9 main::bucket_size#0 main::$19 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$19 ] ) always clobbers reg byte a +Statement [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 [ main::bucket_idx#9 main::bucket_size#0 main::$23 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$23 ] ) always clobbers reg byte a +Statement [29] (word*) main::bucket#0 ← *((word**~) main::$23) [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:71 [ main::bucket_size#0 ] +Statement [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::$20 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::$20 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ main::i1#2 main::i1#1 ] +Statement [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::sc#0 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::sc#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:11 [ main::i1#2 main::i1#1 ] +Statement [33] *((byte*) main::sc#0) ← (byte) ' ' [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 [ main::bucket_idx#1 main::bucket_size1#0 main::$16 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$16 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ main::bucket_size1#0 ] +Statement [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 [ main::bucket_idx#1 main::bucket_size1#0 main::$21 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$21 ] ) always clobbers reg byte a +Statement [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 [ main::bucket_idx#1 main::bucket_size1#0 main::$24 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$24 ] ) always clobbers reg byte a +Statement [42] (word*) main::bucket1#0 ← *((word**~) main::$24) [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:83 [ main::bucket_size1#0 ] +Statement [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::$22 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::$22 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ main::i2#2 main::i2#1 ] +Statement [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::sc1#0 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::sc1#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:12 [ main::i2#2 main::i2#1 ] +Statement [46] *((byte*) main::sc1#0) ← (byte) '*' [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 ] ) always clobbers reg byte a reg byte y +Statement [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ init_buckets::i#2 init_buckets::i#1 ] +Statement [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:19 [ init_buckets::i3#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ init_buckets::i3#2 init_buckets::i3#1 ] +Statement [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:103 [ init_buckets::distance#0 ] +Statement [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:103 [ init_buckets::distance#0 ] +Statement [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a +Statement [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a +Statement [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:19::malloc:63 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:166::malloc:237 [ malloc::mem#0 ] ) always clobbers reg byte a +Statement [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:19::malloc:63 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:166::malloc:237 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Statement [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Statement [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a +Statement [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a +Statement [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] +Statement [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] +Statement [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ atan2_16::i#2 atan2_16::i#1 ] +Statement [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] +Statement [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Statement [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [174] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Statement [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a +Statement [183] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Statement [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:61 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +Statement [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:61 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] +Statement [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:173 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:182 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:173 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:182 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:67 [ init_squares::i#2 init_squares::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:67 [ init_squares::i#2 init_squares::i#1 ] +Statement [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 main::$4 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 main::$4 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$5 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [12] *((byte*) main::mix#2) ← (byte~) main::$5 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 heap_head#1 ] ) always clobbers reg byte y +Statement [17] if((word) main::i#1!=(word) $3e8) goto main::@1 [ main::dist#1 main::angle#1 main::mix#1 main::i#1 heap_head#1 ] ( main:2 [ main::dist#1 main::angle#1 main::mix#1 main::i#1 heap_head#1 ] ) always clobbers reg byte a +Statement [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 [ main::bucket_idx#9 ] ( main:2 [ main::bucket_idx#9 ] ) always clobbers reg byte a +Statement [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 [ main::bucket_idx#9 ] ( main:2 [ main::bucket_idx#9 ] ) always clobbers reg byte a +Statement [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 [ main::bucket_idx#9 main::bucket_size#0 main::$11 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$11 ] ) always clobbers reg byte a +Statement [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 [ main::bucket_idx#9 main::bucket_size#0 main::$19 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$19 ] ) always clobbers reg byte a +Statement [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 [ main::bucket_idx#9 main::bucket_size#0 main::$23 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$23 ] ) always clobbers reg byte a +Statement [29] (word*) main::bucket#0 ← *((word**~) main::$23) [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::$20 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::$20 ] ) always clobbers reg byte a +Statement [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::sc#0 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::sc#0 ] ) always clobbers reg byte a reg byte y +Statement [33] *((byte*) main::sc#0) ← (byte) ' ' [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 [ main::bucket_idx#1 main::bucket_size1#0 main::$16 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$16 ] ) always clobbers reg byte a +Statement [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 [ main::bucket_idx#1 main::bucket_size1#0 main::$21 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$21 ] ) always clobbers reg byte a +Statement [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 [ main::bucket_idx#1 main::bucket_size1#0 main::$24 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$24 ] ) always clobbers reg byte a +Statement [42] (word*) main::bucket1#0 ← *((word**~) main::$24) [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 ] ) always clobbers reg byte a reg byte y +Statement [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::$22 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::$22 ] ) always clobbers reg byte a +Statement [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::sc1#0 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::sc1#0 ] ) always clobbers reg byte a reg byte y +Statement [46] *((byte*) main::sc1#0) ← (byte) '*' [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 ] ) always clobbers reg byte a reg byte y +Statement [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:19 [ init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a +Statement [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a +Statement [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a +Statement [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:19::malloc:63 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:166::malloc:237 [ malloc::mem#0 ] ) always clobbers reg byte a +Statement [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:19::malloc:63 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:166::malloc:237 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a +Statement [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a +Statement [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a +Statement [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a +Statement [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [174] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a +Statement [183] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:155 [ init_dist_screen::d#0 ] +Statement [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y +Statement [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:173 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:182 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:173 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:182 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 main::$4 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$3 main::$4 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$5 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 main::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [12] *((byte*) main::mix#2) ← (byte~) main::$5 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 heap_head#1 ] ( main:2 [ main::dist#2 main::angle#2 main::mix#2 main::i#2 heap_head#1 ] ) always clobbers reg byte y +Statement [17] if((word) main::i#1!=(word) $3e8) goto main::@1 [ main::dist#1 main::angle#1 main::mix#1 main::i#1 heap_head#1 ] ( main:2 [ main::dist#1 main::angle#1 main::mix#1 main::i#1 heap_head#1 ] ) always clobbers reg byte a +Statement [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 [ main::bucket_idx#9 ] ( main:2 [ main::bucket_idx#9 ] ) always clobbers reg byte a +Statement [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 [ main::bucket_idx#9 ] ( main:2 [ main::bucket_idx#9 ] ) always clobbers reg byte a +Statement [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 [ main::bucket_idx#9 main::bucket_size#0 main::$11 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$11 ] ) always clobbers reg byte a +Statement [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 [ main::bucket_idx#9 main::bucket_size#0 main::$19 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$19 ] ) always clobbers reg byte a +Statement [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 [ main::bucket_idx#9 main::bucket_size#0 main::$23 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::$23 ] ) always clobbers reg byte a +Statement [29] (word*) main::bucket#0 ← *((word**~) main::$23) [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::$20 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::$20 ] ) always clobbers reg byte a +Statement [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::sc#0 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 main::sc#0 ] ) always clobbers reg byte a reg byte y +Statement [33] *((byte*) main::sc#0) ← (byte) ' ' [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 ] ( main:2 [ main::bucket_idx#9 main::bucket_size#0 main::bucket#0 main::i1#2 ] ) always clobbers reg byte a reg byte y +Statement [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 [ main::bucket_idx#1 main::bucket_size1#0 main::$16 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$16 ] ) always clobbers reg byte a +Statement [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 [ main::bucket_idx#1 main::bucket_size1#0 main::$21 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$21 ] ) always clobbers reg byte a +Statement [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 [ main::bucket_idx#1 main::bucket_size1#0 main::$24 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::$24 ] ) always clobbers reg byte a +Statement [42] (word*) main::bucket1#0 ← *((word**~) main::$24) [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 ] ) always clobbers reg byte a reg byte y +Statement [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::$22 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::$22 ] ) always clobbers reg byte a +Statement [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::sc1#0 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 main::sc1#0 ] ) always clobbers reg byte a reg byte y +Statement [46] *((byte*) main::sc1#0) ← (byte) '*' [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 ] ( main:2 [ main::bucket_idx#1 main::bucket_size1#0 main::bucket1#0 main::i2#2 ] ) always clobbers reg byte a reg byte y +Statement [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ init_buckets::i#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte x reg byte y +Statement [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 malloc::size#1 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ init_buckets::i2#2 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:19 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ init_buckets::i3#2 ] ( main:2::init_buckets:19 [ init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a +Statement [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a +Statement [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a +Statement [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:2::init_buckets:19 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 [ init_buckets::dist#3 init_buckets::i4#1 ] ( main:2::init_buckets:19 [ init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:19::malloc:63 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:166::malloc:237 [ malloc::mem#0 ] ) always clobbers reg byte a +Statement [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:19::malloc:63 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:166::malloc:237 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$2 ] ) always clobbers reg byte a +Statement [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$6 ] ) always clobbers reg byte a +Statement [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$10 ] ) always clobbers reg byte a +Statement [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$12 ] ) always clobbers reg byte a +Statement [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 [ init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ( main:2::init_angle_screen:7 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$24 ] ) always clobbers reg byte a +Statement [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$23 ] ) always clobbers reg byte a +Statement [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:7::atan2_16:102 [ heap_head#1 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#5 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [174] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$13 SQUARES#1 ] ) always clobbers reg byte a +Statement [183] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y +Statement [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:2::init_dist_screen:5 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:187 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:2::init_dist_screen:5::sqrt:187::bsearch16u:206 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:173 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:2::init_dist_screen:5::sqr:182 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:173 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:2::init_dist_screen:5::sqr:182 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:5::init_squares:166 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::dist#2 main::dist#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_WORD:4 [ main::angle#2 main::angle#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_WORD:6 [ main::mix#2 main::mix#1 ] : zp ZP_WORD:6 , +Potential registers zp ZP_WORD:8 [ main::i#2 main::i#1 ] : zp ZP_WORD:8 , +Potential registers zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] : zp ZP_BYTE:10 , reg byte x , +Potential registers zp ZP_BYTE:11 [ main::i1#2 main::i1#1 ] : zp ZP_BYTE:11 , reg byte x , +Potential registers zp ZP_BYTE:12 [ main::i2#2 main::i2#1 ] : zp ZP_BYTE:12 , reg byte x , +Potential registers zp ZP_BYTE:13 [ init_buckets::i#2 init_buckets::i#1 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:14 [ init_buckets::dist#4 init_buckets::dist#1 ] : zp ZP_WORD:14 , +Potential registers zp ZP_WORD:16 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:18 [ init_buckets::i2#2 init_buckets::i2#1 ] : zp ZP_WORD:18 , +Potential registers zp ZP_BYTE:20 [ init_buckets::i3#2 init_buckets::i3#1 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:21 [ init_buckets::dist#5 init_buckets::dist#3 ] : zp ZP_WORD:21 , +Potential registers zp ZP_WORD:23 [ init_buckets::i4#2 init_buckets::i4#1 ] : zp ZP_WORD:23 , +Potential registers zp ZP_WORD:25 [ heap_head#13 heap_head#1 ] : zp ZP_WORD:25 , +Potential registers zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 ] : zp ZP_WORD:27 , +Potential registers zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] : zp ZP_BYTE:29 , reg byte x , +Potential registers zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:30 , +Potential registers zp ZP_WORD:32 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:32 , +Potential registers zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:34 , reg byte x , +Potential registers zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:35 , reg byte x , +Potential registers zp ZP_WORD:36 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp ZP_WORD:36 , +Potential registers zp ZP_WORD:38 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:38 , +Potential registers zp ZP_BYTE:40 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:40 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:41 , +Potential registers zp ZP_WORD:43 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:43 , +Potential registers zp ZP_BYTE:45 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp ZP_BYTE:45 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:46 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:46 , +Potential registers zp ZP_WORD:48 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:48 , +Potential registers zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:50 , reg byte x , +Potential registers zp ZP_WORD:51 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:51 , +Potential registers zp ZP_WORD:53 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:53 , +Potential registers zp ZP_BYTE:55 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:56 , reg byte x , +Potential registers zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:57 , reg byte x , +Potential registers zp ZP_BYTE:58 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:59 , +Potential registers zp ZP_BYTE:61 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:61 , reg byte x , +Potential registers zp ZP_BYTE:62 [ sqr::val#2 sqr::val#0 sqr::val#1 ] : zp ZP_BYTE:62 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:63 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:63 , +Potential registers zp ZP_WORD:65 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:65 , +Potential registers zp ZP_BYTE:67 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:67 , reg byte x , +Potential registers zp ZP_BYTE:68 [ main::$3 ] : zp ZP_BYTE:68 , reg byte x , +Potential registers zp ZP_BYTE:69 [ main::$4 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:70 [ main::$5 ] : zp ZP_BYTE:70 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:71 [ main::bucket_size#0 ] : zp ZP_BYTE:71 , reg byte x , +Potential registers zp ZP_WORD:72 [ main::$11 ] : zp ZP_WORD:72 , +Potential registers zp ZP_WORD:74 [ main::$19 ] : zp ZP_WORD:74 , +Potential registers zp ZP_WORD:76 [ main::$23 ] : zp ZP_WORD:76 , +Potential registers zp ZP_WORD:78 [ main::bucket#0 ] : zp ZP_WORD:78 , +Potential registers zp ZP_BYTE:80 [ main::$20 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:81 [ main::sc#0 ] : zp ZP_WORD:81 , +Potential registers zp ZP_BYTE:83 [ main::bucket_size1#0 ] : zp ZP_BYTE:83 , reg byte x , +Potential registers zp ZP_WORD:84 [ main::$16 ] : zp ZP_WORD:84 , +Potential registers zp ZP_WORD:86 [ main::$21 ] : zp ZP_WORD:86 , +Potential registers zp ZP_WORD:88 [ main::$24 ] : zp ZP_WORD:88 , +Potential registers zp ZP_WORD:90 [ main::bucket1#0 ] : zp ZP_WORD:90 , +Potential registers zp ZP_BYTE:92 [ main::$22 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:93 [ main::sc1#0 ] : zp ZP_WORD:93 , +Potential registers zp ZP_WORD:95 [ init_buckets::$15 ] : zp ZP_WORD:95 , +Potential registers zp ZP_WORD:97 [ init_buckets::$5 ] : zp ZP_WORD:97 , +Potential registers zp ZP_WORD:99 [ init_buckets::$12 ] : zp ZP_WORD:99 , +Potential registers zp ZP_WORD:101 [ init_buckets::$16 ] : zp ZP_WORD:101 , +Potential registers zp ZP_BYTE:103 [ init_buckets::distance#0 ] : zp ZP_BYTE:103 , reg byte x , +Potential registers zp ZP_WORD:104 [ init_buckets::$9 ] : zp ZP_WORD:104 , +Potential registers zp ZP_WORD:106 [ init_buckets::$13 ] : zp ZP_WORD:106 , +Potential registers zp ZP_WORD:108 [ init_buckets::$17 ] : zp ZP_WORD:108 , +Potential registers zp ZP_WORD:110 [ init_buckets::bucket#0 ] : zp ZP_WORD:110 , +Potential registers zp ZP_WORD:112 [ init_buckets::$10 ] : zp ZP_WORD:112 , +Potential registers zp ZP_BYTE:114 [ init_buckets::$14 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:115 [ malloc::mem#0 ] : zp ZP_WORD:115 , +Potential registers zp ZP_BYTE:117 [ init_angle_screen::$2 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:118 [ init_angle_screen::$3 ] : zp ZP_BYTE:118 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:119 [ init_angle_screen::xw#0 ] : zp ZP_WORD:119 , +Potential registers zp ZP_BYTE:121 [ init_angle_screen::$6 ] : zp ZP_BYTE:121 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:122 [ init_angle_screen::yw#0 ] : zp ZP_WORD:122 , +Potential registers zp ZP_WORD:124 [ atan2_16::x#0 ] : zp ZP_WORD:124 , +Potential registers zp ZP_WORD:126 [ atan2_16::y#0 ] : zp ZP_WORD:126 , +Potential registers zp ZP_WORD:128 [ atan2_16::return#2 ] : zp ZP_WORD:128 , +Potential registers zp ZP_WORD:130 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:130 , +Potential registers zp ZP_WORD:132 [ init_angle_screen::$10 ] : zp ZP_WORD:132 , +Potential registers zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:134 , reg byte x , +Potential registers zp ZP_BYTE:135 [ init_angle_screen::$12 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:136 [ init_angle_screen::$13 ] : zp ZP_BYTE:136 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:137 [ init_angle_screen::$14 ] : zp ZP_BYTE:137 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:138 [ atan2_16::$24 ] : zp ZP_BYTE:138 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:139 [ atan2_16::$23 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:140 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:140 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:141 [ sqr::return#2 ] : zp ZP_WORD:141 , +Potential registers zp ZP_WORD:143 [ init_dist_screen::yds#0 ] : zp ZP_WORD:143 , +Potential registers zp ZP_BYTE:145 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:145 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:146 [ sqr::return#3 ] : zp ZP_WORD:146 , +Potential registers zp ZP_WORD:148 [ init_dist_screen::xds#0 ] : zp ZP_WORD:148 , +Potential registers zp ZP_WORD:150 [ init_dist_screen::ds#0 ] : zp ZP_WORD:150 , +Potential registers zp ZP_WORD:152 [ sqrt::val#0 ] : zp ZP_WORD:152 , +Potential registers zp ZP_BYTE:154 [ sqrt::return#2 ] : zp ZP_BYTE:154 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:155 [ init_dist_screen::d#0 ] : zp ZP_BYTE:155 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:156 [ bsearch16u::key#0 ] : zp ZP_WORD:156 , +Potential registers zp ZP_WORD:158 [ bsearch16u::return#3 ] : zp ZP_WORD:158 , +Potential registers zp ZP_WORD:160 [ sqrt::found#0 ] : zp ZP_WORD:160 , +Potential registers zp ZP_WORD:162 [ sqrt::$3 ] : zp ZP_WORD:162 , +Potential registers zp ZP_WORD:164 [ sqrt::$1 ] : zp ZP_WORD:164 , +Potential registers zp ZP_BYTE:166 [ sqrt::return#0 ] : zp ZP_BYTE:166 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:167 [ bsearch16u::$6 ] : zp ZP_BYTE:167 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:168 [ bsearch16u::$16 ] : zp ZP_BYTE:168 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:169 [ bsearch16u::pivot#0 ] : zp ZP_WORD:169 , +Potential registers zp ZP_WORD:171 [ bsearch16u::result#0 ] : zp ZP_WORD:171 , +Potential registers zp ZP_BYTE:173 [ sqr::$0 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:174 [ sqr::return#0 ] : zp ZP_WORD:174 , +Potential registers zp ZP_WORD:176 [ SQUARES#1 ] : zp ZP_WORD:176 , +Potential registers zp ZP_BYTE:178 [ init_squares::$3 ] : zp ZP_BYTE:178 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:179 [ init_squares::$4 ] : zp ZP_BYTE:179 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:36 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:37 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:39 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:27 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:29 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:106 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:107 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:31 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:96 [ atan2_16::return#2 ] 50: zp ZP_WORD:34 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:92 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:94 [ atan2_16::y#0 ] -Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:52 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:135 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:136 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:139 [ bsearch16u::result#0 ] 501: zp ZP_WORD:137 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:126 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:124 [ bsearch16u::key#0 ] -Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:85 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:86 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:89 [ init_angle_screen::$6 ] 202: zp ZP_WORD:98 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:100 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:103 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:104 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:105 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:90 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:87 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:21 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:23 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:49 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:113 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:116 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:118 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:123 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:46 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:108 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:44 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:42 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:111 [ init_dist_screen::yds#0 ] -Uplift Scope [main] 227.25: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 227.25: zp ZP_BYTE:4 [ main::i1#2 main::i1#1 ] 202: zp ZP_BYTE:63 [ main::$16 ] 202: zp ZP_WORD:64 [ main::sc#0 ] 202: zp ZP_BYTE:70 [ main::$18 ] 202: zp ZP_WORD:71 [ main::sc1#0 ] 22: zp ZP_BYTE:60 [ main::$15 ] 22: zp ZP_BYTE:67 [ main::$17 ] 17.81: zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] 16: zp ZP_WORD:61 [ main::bucket#0 ] 16: zp ZP_WORD:68 [ main::bucket1#0 ] 12.3: zp ZP_BYTE:59 [ main::bucket_size#0 ] 12.3: zp ZP_BYTE:66 [ main::bucket_size1#0 ] -Uplift Scope [sqr] 338: zp ZP_BYTE:53 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:114 [ sqr::return#3 ] 28.5: zp ZP_WORD:142 [ sqr::return#0 ] 22: zp ZP_WORD:109 [ sqr::return#2 ] 4: zp ZP_BYTE:141 [ sqr::$0 ] -Uplift Scope [sqrt] 202: zp ZP_BYTE:122 [ sqrt::return#2 ] 103: zp ZP_WORD:120 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:134 [ sqrt::return#0 ] 4: zp ZP_WORD:128 [ sqrt::found#0 ] 4: zp ZP_WORD:130 [ sqrt::$3 ] 2: zp ZP_WORD:132 [ sqrt::$1 ] -Uplift Scope [init_buckets] 33: zp ZP_BYTE:5 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:11 [ init_buckets::i3#2 init_buckets::i3#1 ] 29.33: zp ZP_WORD:6 [ init_buckets::dist#4 init_buckets::dist#1 ] 23.83: zp ZP_WORD:8 [ init_buckets::i1#2 init_buckets::i1#1 ] 23.83: zp ZP_BYTE:10 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_BYTE:75 [ init_buckets::$11 ] 22: zp ZP_BYTE:77 [ init_buckets::$12 ] 22: zp ZP_BYTE:82 [ init_buckets::$13 ] 18.94: zp ZP_WORD:14 [ init_buckets::i4#2 init_buckets::i4#1 ] 12.83: zp ZP_WORD:12 [ init_buckets::dist#5 init_buckets::dist#3 ] 11: zp ZP_WORD:80 [ init_buckets::$9 ] 9.17: zp ZP_BYTE:76 [ init_buckets::distance#0 ] 7.33: zp ZP_WORD:78 [ init_buckets::bucket#0 ] 5.5: zp ZP_WORD:73 [ init_buckets::$5 ] -Uplift Scope [init_squares] 25.17: zp ZP_WORD:56 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:58 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:146 [ init_squares::$3 ] 22: zp ZP_BYTE:147 [ init_squares::$4 ] 13.93: zp ZP_WORD:54 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplift Scope [malloc] 35: zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 ] 0.8: zp ZP_WORD:83 [ malloc::mem#0 ] -Uplift Scope [] 13.18: zp ZP_WORD:16 [ heap_head#13 heap_head#1 ] 0.03: zp ZP_WORD:144 [ SQUARES#1 ] +Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:45 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:46 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:48 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:36 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 2,283.07: zp ZP_WORD:38 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 2,002: zp ZP_BYTE:138 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:139 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:40 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:128 [ atan2_16::return#2 ] 50: zp ZP_WORD:43 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:124 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:126 [ atan2_16::y#0 ] +Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:61 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp ZP_BYTE:167 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:168 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:171 [ bsearch16u::result#0 ] 501: zp ZP_WORD:169 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:158 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:156 [ bsearch16u::key#0 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:117 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:118 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:121 [ init_angle_screen::$6 ] 202: zp ZP_WORD:130 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:132 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:135 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:136 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:137 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:122 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:119 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:32 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:58 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:145 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:148 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:150 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:155 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:55 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:140 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:53 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:51 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:143 [ init_dist_screen::yds#0 ] +Uplift Scope [main] 227.25: zp ZP_BYTE:11 [ main::i1#2 main::i1#1 ] 227.25: zp ZP_BYTE:12 [ main::i2#2 main::i2#1 ] 202: zp ZP_BYTE:80 [ main::$20 ] 202: zp ZP_WORD:81 [ main::sc#0 ] 202: zp ZP_BYTE:92 [ main::$22 ] 202: zp ZP_WORD:93 [ main::sc1#0 ] 22: zp ZP_BYTE:69 [ main::$4 ] 22: zp ZP_BYTE:70 [ main::$5 ] 22: zp ZP_WORD:72 [ main::$11 ] 22: zp ZP_WORD:74 [ main::$19 ] 22: zp ZP_WORD:76 [ main::$23 ] 22: zp ZP_WORD:84 [ main::$16 ] 22: zp ZP_WORD:86 [ main::$21 ] 22: zp ZP_WORD:88 [ main::$24 ] 19.25: zp ZP_WORD:8 [ main::i#2 main::i#1 ] 16: zp ZP_WORD:78 [ main::bucket#0 ] 16: zp ZP_WORD:90 [ main::bucket1#0 ] 12.05: zp ZP_WORD:4 [ main::angle#2 main::angle#1 ] 11: zp ZP_WORD:2 [ main::dist#2 main::dist#1 ] 11: zp ZP_WORD:6 [ main::mix#2 main::mix#1 ] 11: zp ZP_BYTE:68 [ main::$3 ] 10.25: zp ZP_BYTE:71 [ main::bucket_size#0 ] 10.25: zp ZP_BYTE:83 [ main::bucket_size1#0 ] 4.42: zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Uplift Scope [sqr] 338: zp ZP_BYTE:62 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:146 [ sqr::return#3 ] 28.5: zp ZP_WORD:174 [ sqr::return#0 ] 22: zp ZP_WORD:141 [ sqr::return#2 ] 4: zp ZP_BYTE:173 [ sqr::$0 ] +Uplift Scope [init_buckets] 33: zp ZP_BYTE:13 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:20 [ init_buckets::i3#2 init_buckets::i3#1 ] 29.33: zp ZP_WORD:14 [ init_buckets::dist#4 init_buckets::dist#1 ] 23.83: zp ZP_WORD:16 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:18 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:95 [ init_buckets::$15 ] 22: zp ZP_WORD:99 [ init_buckets::$12 ] 22: zp ZP_WORD:101 [ init_buckets::$16 ] 22: zp ZP_WORD:104 [ init_buckets::$9 ] 22: zp ZP_WORD:106 [ init_buckets::$13 ] 22: zp ZP_WORD:108 [ init_buckets::$17 ] 22: zp ZP_BYTE:114 [ init_buckets::$14 ] 18.5: zp ZP_WORD:23 [ init_buckets::i4#2 init_buckets::i4#1 ] 11.73: zp ZP_WORD:21 [ init_buckets::dist#5 init_buckets::dist#3 ] 11: zp ZP_WORD:112 [ init_buckets::$10 ] 7.33: zp ZP_WORD:110 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:103 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:97 [ init_buckets::$5 ] +Uplift Scope [sqrt] 202: zp ZP_BYTE:154 [ sqrt::return#2 ] 103: zp ZP_WORD:152 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:166 [ sqrt::return#0 ] 4: zp ZP_WORD:160 [ sqrt::found#0 ] 4: zp ZP_WORD:162 [ sqrt::$3 ] 2: zp ZP_WORD:164 [ sqrt::$1 ] +Uplift Scope [init_squares] 25.17: zp ZP_WORD:65 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:67 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:178 [ init_squares::$3 ] 22: zp ZP_BYTE:179 [ init_squares::$4 ] 13.93: zp ZP_WORD:63 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplift Scope [malloc] 35: zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 ] 0.8: zp ZP_WORD:115 [ malloc::mem#0 ] +Uplift Scope [] 13.15: zp ZP_WORD:25 [ heap_head#13 heap_head#1 ] 0.03: zp ZP_WORD:176 [ SQUARES#1 ] -Uplifting [atan2_16] best 1248725 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:37 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:39 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:27 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:29 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:96 [ atan2_16::return#2 ] zp ZP_WORD:34 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:92 [ atan2_16::x#0 ] zp ZP_WORD:94 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1251955 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:46 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:48 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:36 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp ZP_WORD:38 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:128 [ atan2_16::return#2 ] zp ZP_WORD:43 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:124 [ atan2_16::x#0 ] zp ZP_WORD:126 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [bsearch16u] best 1229725 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:139 [ bsearch16u::result#0 ] zp ZP_WORD:137 [ bsearch16u::pivot#0 ] zp ZP_WORD:126 [ bsearch16u::return#3 ] zp ZP_WORD:124 [ bsearch16u::key#0 ] -Uplifting [init_angle_screen] best 1227525 combination reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$6 ] zp ZP_WORD:98 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:100 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:104 [ init_angle_screen::$13 ] zp ZP_BYTE:105 [ init_angle_screen::$14 ] zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:90 [ init_angle_screen::yw#0 ] zp ZP_WORD:87 [ init_angle_screen::xw#0 ] zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:21 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:23 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Uplifting [bsearch16u] best 1232955 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:171 [ bsearch16u::result#0 ] zp ZP_WORD:169 [ bsearch16u::pivot#0 ] zp ZP_WORD:158 [ bsearch16u::return#3 ] zp ZP_WORD:156 [ bsearch16u::key#0 ] +Uplifting [init_angle_screen] best 1230755 combination reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$6 ] zp ZP_WORD:130 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:132 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:136 [ init_angle_screen::$13 ] zp ZP_BYTE:137 [ init_angle_screen::$14 ] zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:122 [ init_angle_screen::yw#0 ] zp ZP_WORD:119 [ init_angle_screen::xw#0 ] zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:30 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:32 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [init_dist_screen] best 1224325 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:116 [ init_dist_screen::xds#0 ] zp ZP_WORD:118 [ init_dist_screen::ds#0 ] zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:46 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:108 [ init_dist_screen::y2#0 ] zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:44 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:42 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] zp ZP_WORD:111 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 1227555 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:148 [ init_dist_screen::xds#0 ] zp ZP_WORD:150 [ init_dist_screen::ds#0 ] zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:55 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:140 [ init_dist_screen::y2#0 ] zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:53 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:51 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] zp ZP_WORD:143 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [main] best 1221485 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i1#2 main::i1#1 ] reg byte a [ main::$16 ] zp ZP_WORD:64 [ main::sc#0 ] reg byte a [ main::$18 ] zp ZP_WORD:71 [ main::sc1#0 ] reg byte a [ main::$15 ] zp ZP_BYTE:67 [ main::$17 ] zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_WORD:61 [ main::bucket#0 ] zp ZP_WORD:68 [ main::bucket1#0 ] zp ZP_BYTE:59 [ main::bucket_size#0 ] zp ZP_BYTE:66 [ main::bucket_size1#0 ] -Limited combination testing to 100 combinations of 8192 possible. -Uplifting [sqr] best 1221148 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:114 [ sqr::return#3 ] zp ZP_WORD:142 [ sqr::return#0 ] zp ZP_WORD:109 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [sqrt] best 1220245 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:120 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:128 [ sqrt::found#0 ] zp ZP_WORD:130 [ sqrt::$3 ] zp ZP_WORD:132 [ sqrt::$1 ] -Uplifting [init_buckets] best 1219835 combination reg byte x [ init_buckets::i#2 init_buckets::i#1 ] reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:6 [ init_buckets::dist#4 init_buckets::dist#1 ] zp ZP_WORD:8 [ init_buckets::i1#2 init_buckets::i1#1 ] reg byte x [ init_buckets::i2#2 init_buckets::i2#1 ] reg byte a [ init_buckets::$11 ] zp ZP_BYTE:77 [ init_buckets::$12 ] zp ZP_BYTE:82 [ init_buckets::$13 ] zp ZP_WORD:14 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:12 [ init_buckets::dist#5 init_buckets::dist#3 ] zp ZP_WORD:80 [ init_buckets::$9 ] zp ZP_BYTE:76 [ init_buckets::distance#0 ] zp ZP_WORD:78 [ init_buckets::bucket#0 ] zp ZP_WORD:73 [ init_buckets::$5 ] -Limited combination testing to 100 combinations of 3456 possible. -Uplifting [init_squares] best 1219635 combination zp ZP_WORD:56 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:54 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [malloc] best 1219635 combination zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 ] zp ZP_WORD:83 [ malloc::mem#0 ] -Uplifting [] best 1219635 combination zp ZP_WORD:16 [ heap_head#13 heap_head#1 ] zp ZP_WORD:144 [ SQUARES#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:104 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1219235 combination reg byte a [ init_angle_screen::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:105 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1218635 combination reg byte a [ init_angle_screen::$14 ] -Attempting to uplift remaining variables inzp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 1218635 combination zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1218635 combination zp ZP_BYTE:25 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 1218635 combination zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1218635 combination zp ZP_BYTE:26 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1218635 combination zp ZP_BYTE:102 [ init_angle_screen::ang_w#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:46 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 1218565 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:67 [ main::$17 ] -Uplifting [main] best 1218525 combination reg byte a [ main::$17 ] -Attempting to uplift remaining variables inzp ZP_BYTE:77 [ init_buckets::$12 ] -Uplifting [init_buckets] best 1218485 combination reg byte a [ init_buckets::$12 ] -Attempting to uplift remaining variables inzp ZP_BYTE:82 [ init_buckets::$13 ] -Uplifting [init_buckets] best 1218445 combination reg byte a [ init_buckets::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:108 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 1218345 combination reg byte a [ init_dist_screen::y2#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1218345 combination zp ZP_BYTE:20 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -Uplifting [main] best 1218345 combination zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 1218345 combination zp ZP_BYTE:41 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:59 [ main::bucket_size#0 ] -Uplifting [main] best 1218345 combination zp ZP_BYTE:59 [ main::bucket_size#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:66 [ main::bucket_size1#0 ] -Uplifting [main] best 1218345 combination zp ZP_BYTE:66 [ main::bucket_size1#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:76 [ init_buckets::distance#0 ] -Uplifting [init_buckets] best 1218265 combination reg byte x [ init_buckets::distance#0 ] -Coalescing zero page register with common assignment [ zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 ] ] with [ zp ZP_WORD:83 [ malloc::mem#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:34 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:126 [ bsearch16u::return#3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:87 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:92 [ atan2_16::x#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:90 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:94 [ atan2_16::y#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:96 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:98 [ init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:109 [ sqr::return#2 ] ] with [ zp ZP_WORD:111 [ init_dist_screen::yds#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:114 [ sqr::return#3 ] ] with [ zp ZP_WORD:116 [ init_dist_screen::xds#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:114 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:142 [ sqr::return#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:118 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:120 [ sqrt::val#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:128 [ sqrt::found#0 ] ] with [ zp ZP_WORD:130 [ sqrt::$3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 malloc::mem#0 ] ] with [ zp ZP_WORD:73 [ init_buckets::$5 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:18 [ malloc::size#2 malloc::size#1 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:144 [ SQUARES#1 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:96 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:128 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:114 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:118 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:32 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:100 [ init_angle_screen::$10 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:50 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:132 [ sqrt::$1 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:114 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:124 [ bsearch16u::key#0 ] ] - score: 1 -Allocated (was zp ZP_WORD:6) zp ZP_WORD:3 [ init_buckets::dist#4 init_buckets::dist#1 ] -Allocated (was zp ZP_WORD:8) zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ] -Allocated (was zp ZP_WORD:12) zp ZP_WORD:7 [ init_buckets::dist#5 init_buckets::dist#3 ] -Allocated (was zp ZP_WORD:14) zp ZP_WORD:9 [ init_buckets::i4#2 init_buckets::i4#1 ] -Allocated (was zp ZP_WORD:16) zp ZP_WORD:11 [ heap_head#13 heap_head#1 ] -Allocated (was zp ZP_WORD:18) zp ZP_WORD:13 [ malloc::size#2 malloc::size#1 malloc::mem#0 init_buckets::$5 SQUARES#1 ] -Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:15 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Allocated (was zp ZP_WORD:21) zp ZP_WORD:16 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -Allocated (was zp ZP_WORD:23) zp ZP_WORD:18 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:20 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Allocated (was zp ZP_BYTE:26) zp ZP_BYTE:21 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Allocated (was zp ZP_WORD:27) zp ZP_WORD:22 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] -Allocated (was zp ZP_WORD:29) zp ZP_WORD:24 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] -Allocated (was zp ZP_WORD:32) zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ] -Allocated (was zp ZP_WORD:37) zp ZP_WORD:28 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -Allocated (was zp ZP_WORD:39) zp ZP_WORD:30 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:32 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Allocated (was zp ZP_WORD:42) zp ZP_WORD:33 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -Allocated (was zp ZP_WORD:44) zp ZP_WORD:35 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] -Allocated (was zp ZP_BYTE:47) zp ZP_BYTE:37 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Allocated (was zp ZP_BYTE:48) zp ZP_BYTE:38 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Allocated (was zp ZP_WORD:50) zp ZP_WORD:39 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] -Allocated (was zp ZP_WORD:54) zp ZP_WORD:41 [ init_squares::sqr#2 init_squares::sqr#1 ] -Allocated (was zp ZP_WORD:56) zp ZP_WORD:43 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] -Allocated (was zp ZP_BYTE:59) zp ZP_BYTE:45 [ main::bucket_size#0 ] -Allocated (was zp ZP_WORD:61) zp ZP_WORD:46 [ main::bucket#0 ] -Allocated (was zp ZP_WORD:64) zp ZP_WORD:48 [ main::sc#0 ] -Allocated (was zp ZP_BYTE:66) zp ZP_BYTE:50 [ main::bucket_size1#0 ] -Allocated (was zp ZP_WORD:68) zp ZP_WORD:51 [ main::bucket1#0 ] -Allocated (was zp ZP_WORD:71) zp ZP_WORD:53 [ main::sc1#0 ] -Allocated (was zp ZP_WORD:78) zp ZP_WORD:55 [ init_buckets::bucket#0 ] -Allocated (was zp ZP_WORD:80) zp ZP_WORD:57 [ init_buckets::$9 ] -Allocated (was zp ZP_WORD:87) zp ZP_WORD:59 [ init_angle_screen::xw#0 atan2_16::x#0 ] -Allocated (was zp ZP_WORD:90) zp ZP_WORD:61 [ init_angle_screen::yw#0 atan2_16::y#0 ] -Allocated (was zp ZP_BYTE:102) zp ZP_BYTE:63 [ init_angle_screen::ang_w#0 ] -Allocated (was zp ZP_WORD:109) zp ZP_WORD:64 [ sqr::return#2 init_dist_screen::yds#0 ] -Allocated (was zp ZP_WORD:114) zp ZP_WORD:66 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] -Allocated (was zp ZP_WORD:137) zp ZP_WORD:68 [ bsearch16u::pivot#0 ] -Allocated (was zp ZP_WORD:139) zp ZP_WORD:70 [ bsearch16u::result#0 ] +Uplifting [main] best 1224695 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i2#2 main::i2#1 ] reg byte a [ main::$20 ] zp ZP_WORD:81 [ main::sc#0 ] reg byte a [ main::$22 ] zp ZP_WORD:93 [ main::sc1#0 ] reg byte a [ main::$4 ] zp ZP_BYTE:70 [ main::$5 ] zp ZP_WORD:72 [ main::$11 ] zp ZP_WORD:74 [ main::$19 ] zp ZP_WORD:76 [ main::$23 ] zp ZP_WORD:84 [ main::$16 ] zp ZP_WORD:86 [ main::$21 ] zp ZP_WORD:88 [ main::$24 ] zp ZP_WORD:8 [ main::i#2 main::i#1 ] zp ZP_WORD:78 [ main::bucket#0 ] zp ZP_WORD:90 [ main::bucket1#0 ] zp ZP_WORD:4 [ main::angle#2 main::angle#1 ] zp ZP_WORD:2 [ main::dist#2 main::dist#1 ] zp ZP_WORD:6 [ main::mix#2 main::mix#1 ] zp ZP_BYTE:68 [ main::$3 ] zp ZP_BYTE:71 [ main::bucket_size#0 ] zp ZP_BYTE:83 [ main::bucket_size1#0 ] zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Limited combination testing to 100 combinations of 16384 possible. +Uplifting [sqr] best 1224358 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:146 [ sqr::return#3 ] zp ZP_WORD:174 [ sqr::return#0 ] zp ZP_WORD:141 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [init_buckets] best 1223998 combination reg byte x [ init_buckets::i#2 init_buckets::i#1 ] reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:14 [ init_buckets::dist#4 init_buckets::dist#1 ] zp ZP_WORD:16 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:18 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:95 [ init_buckets::$15 ] zp ZP_WORD:99 [ init_buckets::$12 ] zp ZP_WORD:101 [ init_buckets::$16 ] zp ZP_WORD:104 [ init_buckets::$9 ] zp ZP_WORD:106 [ init_buckets::$13 ] zp ZP_WORD:108 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:23 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:21 [ init_buckets::dist#5 init_buckets::dist#3 ] zp ZP_WORD:112 [ init_buckets::$10 ] zp ZP_WORD:110 [ init_buckets::bucket#0 ] reg byte x [ init_buckets::distance#0 ] zp ZP_WORD:97 [ init_buckets::$5 ] +Uplifting [sqrt] best 1223095 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:152 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:160 [ sqrt::found#0 ] zp ZP_WORD:162 [ sqrt::$3 ] zp ZP_WORD:164 [ sqrt::$1 ] +Uplifting [init_squares] best 1222895 combination zp ZP_WORD:65 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp ZP_WORD:63 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [malloc] best 1222895 combination zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 ] zp ZP_WORD:115 [ malloc::mem#0 ] +Uplifting [] best 1222895 combination zp ZP_WORD:25 [ heap_head#13 heap_head#1 ] zp ZP_WORD:176 [ SQUARES#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:136 [ init_angle_screen::$13 ] +Uplifting [init_angle_screen] best 1222495 combination reg byte a [ init_angle_screen::$13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:137 [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1221895 combination reg byte a [ init_angle_screen::$14 ] +Attempting to uplift remaining variables inzp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 1221895 combination zp ZP_BYTE:56 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1221895 combination zp ZP_BYTE:34 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 1221895 combination zp ZP_BYTE:57 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1221895 combination zp ZP_BYTE:35 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1221895 combination zp ZP_BYTE:134 [ init_angle_screen::ang_w#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:55 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Uplifting [init_dist_screen] best 1221825 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:70 [ main::$5 ] +Uplifting [main] best 1221765 combination reg byte a [ main::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:140 [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1221665 combination reg byte a [ init_dist_screen::y2#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1221665 combination zp ZP_BYTE:29 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Uplifting [init_dist_screen] best 1221665 combination zp ZP_BYTE:50 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:68 [ main::$3 ] +Uplifting [main] best 1221665 combination zp ZP_BYTE:68 [ main::$3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:71 [ main::bucket_size#0 ] +Uplifting [main] best 1221665 combination zp ZP_BYTE:71 [ main::bucket_size#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:83 [ main::bucket_size1#0 ] +Uplifting [main] best 1221665 combination zp ZP_BYTE:83 [ main::bucket_size1#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Uplifting [main] best 1221665 combination zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 ] ] with [ zp ZP_WORD:95 [ init_buckets::$15 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 init_buckets::$15 ] ] with [ zp ZP_WORD:115 [ malloc::mem#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:43 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp ZP_WORD:158 [ bsearch16u::return#3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:72 [ main::$11 ] ] with [ zp ZP_WORD:74 [ main::$19 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:76 [ main::$23 ] ] with [ zp ZP_WORD:78 [ main::bucket#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ main::$16 ] ] with [ zp ZP_WORD:86 [ main::$21 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:88 [ main::$24 ] ] with [ zp ZP_WORD:90 [ main::bucket1#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:99 [ init_buckets::$12 ] ] with [ zp ZP_WORD:101 [ init_buckets::$16 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:104 [ init_buckets::$9 ] ] with [ zp ZP_WORD:106 [ init_buckets::$13 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:108 [ init_buckets::$17 ] ] with [ zp ZP_WORD:110 [ init_buckets::bucket#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:119 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:124 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:122 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:126 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:128 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:130 [ init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:141 [ sqr::return#2 ] ] with [ zp ZP_WORD:143 [ init_dist_screen::yds#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:146 [ sqr::return#3 ] ] with [ zp ZP_WORD:148 [ init_dist_screen::xds#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:146 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:174 [ sqr::return#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:150 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:152 [ sqrt::val#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:160 [ sqrt::found#0 ] ] with [ zp ZP_WORD:162 [ sqrt::$3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:97 [ init_buckets::$5 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:176 [ SQUARES#1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp ZP_WORD:128 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp ZP_WORD:160 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:72 [ main::$11 main::$19 ] ] with [ zp ZP_WORD:76 [ main::$23 main::bucket#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ main::$16 main::$21 ] ] with [ zp ZP_WORD:88 [ main::$24 main::bucket1#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:104 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:108 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:146 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:150 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:41 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp ZP_WORD:132 [ init_angle_screen::$10 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:59 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:164 [ sqrt::$1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:146 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:156 [ bsearch16u::key#0 ] ] - score: 1 +Allocated (was zp ZP_WORD:14) zp ZP_WORD:11 [ init_buckets::dist#4 init_buckets::dist#1 ] +Allocated (was zp ZP_WORD:16) zp ZP_WORD:13 [ init_buckets::i1#2 init_buckets::i1#1 ] +Allocated (was zp ZP_WORD:18) zp ZP_WORD:15 [ init_buckets::i2#2 init_buckets::i2#1 ] +Allocated (was zp ZP_WORD:21) zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] +Allocated (was zp ZP_WORD:23) zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] +Allocated (was zp ZP_WORD:25) zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] +Allocated (was zp ZP_WORD:27) zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] +Allocated (was zp ZP_BYTE:29) zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Allocated (was zp ZP_WORD:30) zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] +Allocated (was zp ZP_WORD:32) zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Allocated (was zp ZP_BYTE:35) zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Allocated (was zp ZP_WORD:36) zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +Allocated (was zp ZP_WORD:38) zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +Allocated (was zp ZP_WORD:41) zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ] +Allocated (was zp ZP_WORD:46) zp ZP_WORD:38 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +Allocated (was zp ZP_WORD:48) zp ZP_WORD:40 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:42 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Allocated (was zp ZP_WORD:51) zp ZP_WORD:43 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] +Allocated (was zp ZP_WORD:53) zp ZP_WORD:45 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +Allocated (was zp ZP_BYTE:56) zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Allocated (was zp ZP_BYTE:57) zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Allocated (was zp ZP_WORD:59) zp ZP_WORD:49 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] +Allocated (was zp ZP_WORD:63) zp ZP_WORD:51 [ init_squares::sqr#2 init_squares::sqr#1 ] +Allocated (was zp ZP_WORD:65) zp ZP_WORD:53 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +Allocated (was zp ZP_BYTE:68) zp ZP_BYTE:55 [ main::$3 ] +Allocated (was zp ZP_BYTE:71) zp ZP_BYTE:56 [ main::bucket_size#0 ] +Allocated (was zp ZP_WORD:72) zp ZP_WORD:57 [ main::$11 main::$19 main::$23 main::bucket#0 ] +Allocated (was zp ZP_WORD:81) zp ZP_WORD:59 [ main::sc#0 ] +Allocated (was zp ZP_BYTE:83) zp ZP_BYTE:61 [ main::bucket_size1#0 ] +Allocated (was zp ZP_WORD:84) zp ZP_WORD:62 [ main::$16 main::$21 main::$24 main::bucket1#0 ] +Allocated (was zp ZP_WORD:93) zp ZP_WORD:64 [ main::sc1#0 ] +Allocated (was zp ZP_WORD:99) zp ZP_WORD:66 [ init_buckets::$12 init_buckets::$16 ] +Allocated (was zp ZP_WORD:104) zp ZP_WORD:68 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +Allocated (was zp ZP_WORD:112) zp ZP_WORD:70 [ init_buckets::$10 ] +Allocated (was zp ZP_WORD:119) zp ZP_WORD:72 [ init_angle_screen::xw#0 atan2_16::x#0 ] +Allocated (was zp ZP_WORD:122) zp ZP_WORD:74 [ init_angle_screen::yw#0 atan2_16::y#0 ] +Allocated (was zp ZP_BYTE:134) zp ZP_BYTE:76 [ init_angle_screen::ang_w#0 ] +Allocated (was zp ZP_WORD:141) zp ZP_WORD:77 [ sqr::return#2 init_dist_screen::yds#0 ] +Allocated (was zp ZP_WORD:146) zp ZP_WORD:79 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] +Allocated (was zp ZP_WORD:169) zp ZP_WORD:81 [ bsearch16u::pivot#0 ] +Allocated (was zp ZP_WORD:171) zp ZP_WORD:83 [ bsearch16u::result#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -6364,10 +6778,10 @@ ASSEMBLER BEFORE OPTIMIZATION // Screen containing angle to center .label SCREEN_FILL = $400 // The number of buckets in our bucket sort - .const NUM_BUCKETS = $30 + .const NUM_BUCKETS = $100 .const NUM_SQUARES = $30 - .label heap_head = $b - .label SQUARES = $d + .label heap_head = $15 + .label SQUARES = $17 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -6386,98 +6800,200 @@ bend_from_b1: bend: // main main: { - .label bucket_size = $2d - .label bucket_idx = 2 - .label bucket = $2e - .label sc = $30 - .label bucket_size1 = $32 - .label bucket1 = $33 - .label sc1 = $35 + .label _3 = $37 + .label _11 = $39 + .label _16 = $3e + .label _19 = $39 + .label _21 = $3e + .label mix = 6 + .label dist = 2 + .label angle = 4 + .label i = 8 + .label bucket_size = $38 + .label bucket_idx = $a + .label bucket_size1 = $3d + .label bucket = $39 + .label sc = $3b + .label bucket1 = $3e + .label sc1 = $40 + .label _23 = $39 + .label _24 = $3e // [5] call init_dist_screen - // [150] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [165] phi from main to init_dist_screen [phi:main->init_dist_screen] init_dist_screen_from_main: jsr init_dist_screen - // [6] phi from main to main::@12 [phi:main->main::@12] - b12_from_main: - jmp b12 - // main::@12 - b12: - // [7] call init_angle_screen - // [77] phi from main::@12 to init_angle_screen [phi:main::@12->init_angle_screen] - init_angle_screen_from_b12: - jsr init_angle_screen - // [8] phi from main::@12 to main::@13 [phi:main::@12->main::@13] - b13_from_b12: + // [6] phi from main to main::@13 [phi:main->main::@13] + b13_from_main: jmp b13 // main::@13 b13: - // [9] call init_buckets - // [39] phi from main::@13 to init_buckets [phi:main::@13->init_buckets] - init_buckets_from_b13: - jsr init_buckets - // [10] phi from main::@13 to main::@1 [phi:main::@13->main::@1] + // [7] call init_angle_screen + // [92] phi from main::@13 to init_angle_screen [phi:main::@13->init_angle_screen] + init_angle_screen_from_b13: + jsr init_angle_screen + // [8] phi from main::@13 to main::@1 [phi:main::@13->main::@1] b1_from_b13: - // [10] phi (byte) main::bucket_idx#11 = (byte) 0 [phi:main::@13->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta bucket_idx + // [8] phi (word) main::i#2 = (word) 0 [phi:main::@13->main::@1#0] -- vwuz1=vwuc1 + lda #<0 + sta i + lda #>0 + sta i+1 + // [8] phi (byte*) main::mix#2 = (const byte[$3e8]) SCREEN_MIX#0 [phi:main::@13->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_MIX + sta mix+1 + // [8] phi (byte*) main::angle#2 = (const byte[$3e8]) SCREEN_ANGLE#0 [phi:main::@13->main::@1#2] -- pbuz1=pbuc1 + lda #SCREEN_ANGLE + sta angle+1 + // [8] phi (byte*) main::dist#2 = (const byte[$3e8]) SCREEN_DIST#0 [phi:main::@13->main::@1#3] -- pbuz1=pbuc1 + lda #SCREEN_DIST + sta dist+1 + jmp b1 + // [8] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + // [8] phi (word) main::i#2 = (word) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // [8] phi (byte*) main::mix#2 = (byte*) main::mix#1 [phi:main::@1->main::@1#1] -- register_copy + // [8] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@1->main::@1#2] -- register_copy + // [8] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@1->main::@1#3] -- register_copy jmp b1 // main::@1 b1: + // [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 -- vbuz1=_deref_pbuz2_rol_2 + ldy #0 + lda (dist),y + asl + asl + sta _3 + // [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 -- vbuaa=_deref_pbuz1_ror_1 + ldy #0 + lda (angle),y + lsr + // [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 -- vbuaa=vbuz1_plus_vbuaa + clc + adc _3 + // [12] *((byte*) main::mix#2) ← (byte~) main::$5 -- _deref_pbuz1=vbuaa + ldy #0 + sta (mix),y + // [13] (byte*) main::mix#1 ← ++ (byte*) main::mix#2 -- pbuz1=_inc_pbuz1 + inc mix + bne !+ + inc mix+1 + !: + // [14] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1 + inc dist + bne !+ + inc dist+1 + !: + // [15] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1 + inc angle + bne !+ + inc angle+1 + !: + // [16] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + // [17] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1 + lda i+1 + cmp #>$3e8 + bne b1_from_b1 + lda i + cmp #<$3e8 + bne b1_from_b1 + // [18] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: jmp b2 // main::@2 b2: - // [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$fe - cmp RASTER - bne b2 + // [19] call init_buckets + // [50] phi from main::@2 to init_buckets [phi:main::@2->init_buckets] + init_buckets_from_b2: + jsr init_buckets + // [20] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + // [20] phi (byte) main::bucket_idx#9 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta bucket_idx jmp b3 // main::@3 b3: - // [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 -- _deref_pbuc1_neq_vbuc2_then_la1 - lda #$ff - cmp RASTER - bne b3 jmp b4 // main::@4 b4: - // [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 + lda #$fe + cmp RASTER + bne b4 + jmp b5 + // main::@5 + b5: + // [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1 + lda #$ff + cmp RASTER + bne b5 + jmp b6 + // main::@6 + b6: + // [23] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // [14] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#11) -- vbuz1=pbuc1_derefidx_vbuz2 + // [24] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 // First clear the current bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size - // [15] if((byte) main::bucket_size#0<=(byte) 0) goto main::@6 -- vbuz1_le_0_then_la1 + // [25] if((byte) main::bucket_size#0<=(byte) 0) goto main::@8 -- vbuz1_le_0_then_la1 lda bucket_size cmp #0 - beq b6 - jmp b5 - // main::@5 - b5: - // [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 -- vbuaa=vbuz1_rol_1 - lda bucket_idx - asl - // [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) -- pwuz1=pptc1_derefidx_vbuaa - tay - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y - sta bucket+1 - // [18] phi from main::@5 to main::@7 [phi:main::@5->main::@7] - b7_from_b5: - // [18] phi (byte) main::i#2 = (byte) 0 [phi:main::@5->main::@7#0] -- vbuxx=vbuc1 - ldx #0 - jmp b7 - // [18] phi from main::@7 to main::@7 [phi:main::@7->main::@7] - b7_from_b7: - // [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@7#0] -- register_copy + beq b8 jmp b7 // main::@7 b7: - // [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 -- vwuz1=_word_vbuz2 + lda bucket_idx + sta _11 + lda #0 + sta _11+1 + // [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 -- vwuz1=vwuz1_rol_1 + asl _19 + rol _19+1 + // [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 -- pptz1=pptc1_plus_vwuz1 + clc + lda _23 + adc #BUCKETS + sta _23+1 + // [29] (word*) main::bucket#0 ← *((word**~) main::$23) -- pwuz1=_deref_pptz1 + ldy #0 + lda (bucket),y + pha + iny + lda (bucket),y + sta bucket+1 + pla + sta bucket + // [30] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + b9_from_b7: + // [30] phi (byte) main::i1#2 = (byte) 0 [phi:main::@7->main::@9#0] -- vbuxx=vbuc1 + ldx #0 + jmp b9 + // [30] phi from main::@9 to main::@9 [phi:main::@9->main::@9] + b9_from_b9: + // [30] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@9->main::@9#0] -- register_copy + jmp b9 + // main::@9 + b9: + // [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa + // [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa tay clc lda #SCREEN_FILL adc (bucket),y sta sc+1 - // [21] *((byte*) main::sc#0) ← (byte) ' ' -- _deref_pbuz1=vbuc1 + // [33] *((byte*) main::sc#0) ← (byte) ' ' -- _deref_pbuz1=vbuc1 lda #' ' ldy #0 sta (sc),y - // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [34] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx inx - // [23] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@7 -- vbuxx_lt_vbuz1_then_la1 + // [35] if((byte) main::i1#1<(byte) main::bucket_size#0) goto main::@9 -- vbuxx_lt_vbuz1_then_la1 cpx bucket_size - bcc b7_from_b7 - jmp b6 - // main::@6 - b6: - // [24] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#11 -- vbuz1=_inc_vbuz1 - inc bucket_idx - // [25] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@14 -- vbuz1_neq_vbuc1_then_la1 - lda #NUM_BUCKETS - cmp bucket_idx - bne b14_from_b6 - // [27] phi from main::@6 to main::@8 [phi:main::@6->main::@8] - b8_from_b6: - // [27] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@6->main::@8#0] -- vbuz1=vbuc1 - lda #0 - sta bucket_idx - jmp b8 - // [26] phi from main::@6 to main::@14 [phi:main::@6->main::@14] - b14_from_b6: - jmp b14 - // main::@14 - b14: - // [27] phi from main::@14 to main::@8 [phi:main::@14->main::@8] - b8_from_b14: - // [27] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@14->main::@8#0] -- register_copy + bcc b9_from_b9 jmp b8 // main::@8 b8: - // [28] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 + // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#9 -- vbuz1=_inc_vbuz1 + inc bucket_idx + // [37] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#1) -- vbuz1=pbuc1_derefidx_vbuz2 // Plot char in the bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size1 - // [29] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@9 -- vbuz1_le_0_then_la1 + // [38] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@11 -- vbuz1_le_0_then_la1 lda bucket_size1 cmp #0 - beq b9 - jmp b11 - // main::@11 - b11: - // [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 - lda bucket_idx - asl - // [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) -- pwuz1=pptc1_derefidx_vbuaa - tay - lda BUCKETS,y - sta bucket1 - lda BUCKETS+1,y - sta bucket1+1 - // [32] phi from main::@11 to main::@10 [phi:main::@11->main::@10] - b10_from_b11: - // [32] phi (byte) main::i1#2 = (byte) 0 [phi:main::@11->main::@10#0] -- vbuxx=vbuc1 - ldx #0 - jmp b10 - // [32] phi from main::@10 to main::@10 [phi:main::@10->main::@10] - b10_from_b10: - // [32] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@10->main::@10#0] -- register_copy + beq b11 jmp b10 // main::@10 b10: - // [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 -- vwuz1=_word_vbuz2 + lda bucket_idx + sta _16 + lda #0 + sta _16+1 + // [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 -- vwuz1=vwuz1_rol_1 + asl _21 + rol _21+1 + // [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 -- pptz1=pptc1_plus_vwuz1 + clc + lda _24 + adc #BUCKETS + sta _24+1 + // [42] (word*) main::bucket1#0 ← *((word**~) main::$24) -- pwuz1=_deref_pptz1 + ldy #0 + lda (bucket1),y + pha + iny + lda (bucket1),y + sta bucket1+1 + pla + sta bucket1 + // [43] phi from main::@10 to main::@12 [phi:main::@10->main::@12] + b12_from_b10: + // [43] phi (byte) main::i2#2 = (byte) 0 [phi:main::@10->main::@12#0] -- vbuxx=vbuc1 + ldx #0 + jmp b12 + // [43] phi from main::@12 to main::@12 [phi:main::@12->main::@12] + b12_from_b12: + // [43] phi (byte) main::i2#2 = (byte) main::i2#1 [phi:main::@12->main::@12#0] -- register_copy + jmp b12 + // main::@12 + b12: + // [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa + // [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa tay clc lda #SCREEN_FILL adc (bucket1),y sta sc1+1 - // [35] *((byte*) main::sc1#0) ← (byte) '*' -- _deref_pbuz1=vbuc1 + // [46] *((byte*) main::sc1#0) ← (byte) '*' -- _deref_pbuz1=vbuc1 lda #'*' ldy #0 sta (sc1),y - // [36] (byte) main::i1#1 ← ++ (byte) main::i1#2 -- vbuxx=_inc_vbuxx + // [47] (byte) main::i2#1 ← ++ (byte) main::i2#2 -- vbuxx=_inc_vbuxx inx - // [37] if((byte) main::i1#1<(byte) main::bucket_size1#0) goto main::@10 -- vbuxx_lt_vbuz1_then_la1 + // [48] if((byte) main::i2#1<(byte) main::bucket_size1#0) goto main::@12 -- vbuxx_lt_vbuz1_then_la1 cpx bucket_size1 - bcc b10_from_b10 - jmp b9 - // main::@9 - b9: - // [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + bcc b12_from_b12 + jmp b11 + // main::@11 + b11: + // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@9 to main::@1 [phi:main::@9->main::@1] - b1_from_b9: - // [10] phi (byte) main::bucket_idx#11 = (byte) main::bucket_idx#6 [phi:main::@9->main::@1#0] -- register_copy - jmp b1 + // [20] phi from main::@11 to main::@3 [phi:main::@11->main::@3] + b3_from_b11: + // [20] phi (byte) main::bucket_idx#9 = (byte) main::bucket_idx#1 [phi:main::@11->main::@3#0] -- register_copy + jmp b3 } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. init_buckets: { - .label _5 = $d - .label _9 = $39 - .label dist = 3 - .label i1 = 5 - .label bucket = $37 - .label dist_3 = 7 - .label i4 = 9 - .label dist_5 = 7 - // [40] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + .label _5 = $17 + .label _9 = $44 + .label _10 = $46 + .label _12 = $42 + .label _13 = $44 + .label dist = $b + .label i1 = $d + .label i2 = $f + .label bucket = $44 + .label dist_3 = $11 + .label i4 = $13 + .label dist_5 = $11 + .label _15 = $17 + .label _16 = $42 + .label _17 = $44 + // [51] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] b1_from_init_buckets: - // [40] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 + // [51] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 ldx #0 jmp b1 // Init bucket sizes to 0 - // [40] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [51] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] b1_from_b1: - // [40] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [51] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy jmp b1 // init_buckets::@1 b1: - // [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta BUCKET_SIZES,x - // [42] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx + // [53] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx inx - // [43] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_BUCKETS-1+1 + // [54] if((byte) init_buckets::i#1!=(byte) 0) goto init_buckets::@1 -- vbuxx_neq_0_then_la1 + cpx #0 bne b1_from_b1 - // [44] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] + // [55] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] b2_from_b1: - // [44] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 + // [55] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - // [44] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 - lda #init_buckets::@2#1] -- pbuz1=pbuc1 + lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist+1 jmp b2 - // [44] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] + // [55] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] b2_from_b2: - // [44] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy - // [44] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy + // [55] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy + // [55] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy jmp b2 // init_buckets::@2 b2: - // [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 + // [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 ldy #0 lda (dist),y tax inc BUCKET_SIZES,x - // [46] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [57] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc dist bne !+ inc dist+1 !: - // [47] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [58] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 + // [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>$3e8 bne b2_from_b2 lda i1 cmp #<$3e8 bne b2_from_b2 - // [49] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [60] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] b3_from_b2: - // [49] phi (byte) init_buckets::i2#2 = (byte) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vbuxx=vbuc1 - ldx #0 + // [60] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + lda #<0 + sta i2 + lda #>0 + sta i2+1 jmp b3 // Allocate the buckets - // [49] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] + // [60] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] b3_from_b6: - // [49] phi (byte) init_buckets::i2#2 = (byte) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy + // [60] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy jmp b3 // init_buckets::@3 b3: - // [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 -- vwuz1=pbuc1_derefidx_vbuxx_rol_1 - lda BUCKET_SIZES,x + // [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 + lda i2 + clc + adc #BUCKET_SIZES + sta _15+1 + // [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 + ldy #0 + lda (malloc.size),y asl sta malloc.size lda #0 rol sta malloc.size+1 - // [51] call malloc - // [73] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] + // [63] call malloc + // [88] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] malloc_from_b3: - // [73] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy - // [73] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy + // [88] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy + // [88] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy jsr malloc jmp b6 // init_buckets::@6 b6: - // [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 - // [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa + // [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + // [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i2 asl - // [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 -- pptc1_derefidx_vbuaa=pwuz1 - tay + sta _12 + lda i2+1 + rol + sta _12+1 + // [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz1 + clc + lda _16 + adc #BUCKETS + sta _16+1 + // [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 + ldy #0 lda _5 - sta BUCKETS,y + sta (_16),y + iny lda _5+1 - sta BUCKETS+1,y - // [55] (byte) init_buckets::i2#1 ← ++ (byte) init_buckets::i2#2 -- vbuxx=_inc_vbuxx - inx - // [56] if((byte) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_BUCKETS-1+1 + sta (_16),y + // [68] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + inc i2 + bne !+ + inc i2+1 + !: + // [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + lda i2+1 + cmp #>NUM_BUCKETS-1+1 bne b3_from_b6 - // [57] phi from init_buckets::@6 to init_buckets::@4 [phi:init_buckets::@6->init_buckets::@4] + lda i2 + cmp #init_buckets::@4] b4_from_b6: - // [57] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 + // [70] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 ldx #0 jmp b4 // Iterate all distances and fill the buckets with indices into the screens - // [57] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] + // [70] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] b4_from_b4: - // [57] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy + // [70] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy jmp b4 // init_buckets::@4 b4: - // [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta BUCKET_IDX,x - // [59] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx + // [72] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx inx - // [60] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_BUCKETS-1+1 + // [73] if((byte) init_buckets::i3#1!=(byte) 0) goto init_buckets::@4 -- vbuxx_neq_0_then_la1 + cpx #0 bne b4_from_b4 - // [61] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] + // [74] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] b5_from_b4: - // [61] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 + // [74] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 lda #<0 sta i4 lda #>0 sta i4+1 - // [61] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 - lda #init_buckets::@5#1] -- pbuz1=pbuc1 + lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist_5+1 jmp b5 - // [61] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] b5_from_b5: - // [61] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy - // [61] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy + // [74] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + // [74] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy jmp b5 // init_buckets::@5 b5: - // [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 + // [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 ldy #0 lda (dist_5),y tax - // [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuxx txa - asl - // [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) -- pwuz1=pptc1_derefidx_vbuaa - tay - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y + sta _9 + lda #0 + sta _9+1 + // [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 + asl _13 + rol _13+1 + // [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz1 + clc + lda _17 + adc #BUCKETS + sta _17+1 + // [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 + ldy #0 + lda (bucket),y + pha + iny + lda (bucket),y sta bucket+1 - // [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 + pla + sta bucket + // [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 -- vwuz1=pbuz2_minus_pbuc1 lda dist_5 sec - sbc #SCREEN_DIST - sta _9+1 - // [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_rol_1 + sbc #>SCREEN_MIX + sta _10+1 + // [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_rol_1 lda BUCKET_IDX,x asl - // [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 -- pwuz1_derefidx_vbuaa=vwuz2 + // [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 tay - lda _9 + lda _10 sta (bucket),y iny - lda _9+1 + lda _10+1 sta (bucket),y - // [68] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + // [83] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx inc BUCKET_IDX,x - // [69] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [84] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc dist_3 bne !+ inc dist_3+1 !: - // [70] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [85] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc i4 bne !+ inc i4+1 !: - // [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 + // [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 lda i4+1 cmp #>$3e8 bne b5_from_b5 @@ -6795,17 +7361,17 @@ init_buckets: { jmp breturn // init_buckets::@return breturn: - // [72] return + // [87] return rts } // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($d) size) +// malloc(word zeropage($17) size) malloc: { - .label mem = $d - .label size = $d - // [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 + .label mem = $17 + .label size = $17 + // [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec sbc mem @@ -6813,7 +7379,7 @@ malloc: { lda heap_head+1 sbc mem+1 sta mem+1 - // [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 @@ -6821,91 +7387,91 @@ malloc: { jmp breturn // malloc::@return breturn: - // [76] return + // [91] return rts } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center init_angle_screen: { - .label _10 = $1a - .label xw = $3b - .label yw = $3d - .label angle_w = $1a - .label ang_w = $3f - .label x = $14 - .label xb = $15 - .label screen_topline = $12 - .label screen_bottomline = $10 - .label y = $f - // [78] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + .label _10 = $24 + .label xw = $48 + .label yw = $4a + .label angle_w = $24 + .label ang_w = $4c + .label x = $1e + .label xb = $1f + .label screen_topline = $1c + .label screen_bottomline = $1a + .label y = $19 + // [93] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] b1_from_init_angle_screen: - // [78] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 + // [93] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 lda #SCREEN_ANGLE+$28*$c sta screen_topline+1 - // [78] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 + // [93] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 lda #SCREEN_ANGLE+$28*$c sta screen_bottomline+1 - // [78] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [93] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [78] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] + // [93] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] b1_from_b3: - // [78] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy - // [78] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy - // [78] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy + // [93] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy + // [93] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy + // [93] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy jmp b1 // init_angle_screen::@1 b1: - // [79] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [94] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] b2_from_b1: - // [79] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [94] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [79] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [94] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta x jmp b2 - // [79] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] + // [94] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] b2_from_b4: - // [79] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy - // [79] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy + // [94] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy + // [94] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy jmp b2 // init_angle_screen::@2 b2: - // [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa + // [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw - // [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta yw+1 sty yw - // [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [87] call atan2_16 + // [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [102] call atan2_16 jsr atan2_16 - // [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b4 // init_angle_screen::@4 b4: - // [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _10 @@ -6913,47 +7479,47 @@ init_angle_screen: { bcc !+ inc _10+1 !: - // [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 + // [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 lda _10+1 sta ang_w - // [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda ang_w ldy xb sta (screen_bottomline),y - // [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa + // [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [99] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [114] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [100] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [115] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [101] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 + // [116] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$13+1 bcc b2_from_b4 jmp b3 // init_angle_screen::@3 b3: - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda screen_topline sec sbc #<$28 @@ -6961,7 +7527,7 @@ init_angle_screen: { lda screen_topline+1 sbc #>$28 sta screen_topline+1 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen_bottomline @@ -6969,41 +7535,41 @@ init_angle_screen: { bcc !+ inc screen_bottomline+1 !: - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 + // [119] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 inc y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [120] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp y bne b1_from_b3 jmp breturn // init_angle_screen::@return breturn: - // [106] return + // [121] return rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($3b) x, signed word zeropage($3d) y) +// atan2_16(signed word zeropage($48) x, signed word zeropage($4a) y) atan2_16: { - .label _2 = $16 - .label _7 = $18 - .label yi = $16 - .label xi = $18 - .label angle = $1a - .label xd = $1e - .label yd = $1c - .label return = $1a - .label x = $3b - .label y = $3d - // [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + .label _2 = $20 + .label _7 = $22 + .label yi = $20 + .label xi = $22 + .label angle = $24 + .label xd = $28 + .label yd = $26 + .label return = $24 + .label x = $48 + .label y = $4a + // [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bpl b1 jmp b2 // atan2_16::@2 b2: - // [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -7011,20 +7577,20 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [109] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [124] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] b3_from_b1: b3_from_b2: - // [109] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [124] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp b3 // atan2_16::@3 b3: - // [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda x+1 bpl b4 jmp b5 // atan2_16::@5 b5: - // [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -7032,49 +7598,49 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [112] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [127] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] b6_from_b4: b6_from_b5: - // [112] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [127] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp b6 // atan2_16::@6 b6: - // [113] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [128] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] b10_from_b6: - // [113] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [128] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #0 sta angle lda #0 sta angle+1 - // [113] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [128] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 - // [113] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [113] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [128] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [128] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@10 b10: - // [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda yi+1 bne b11 lda yi bne b11 - // [115] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [130] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] b12_from_b10: b12_from_b19: - // [115] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [130] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp b12 // atan2_16::@12 b12: - // [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr angle+1 ror angle - // [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda x+1 bpl b7_from_b12 jmp b21 // atan2_16::@21 b21: - // [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -7082,20 +7648,20 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [119] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [134] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] b7_from_b12: b7_from_b21: - // [119] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [134] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp b7 // atan2_16::@7 b7: - // [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda y+1 bpl b8_from_b7 jmp b9 // atan2_16::@9 b9: - // [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -7103,79 +7669,79 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [122] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [137] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] b8_from_b7: b8_from_b9: - // [122] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [137] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp b8 // atan2_16::@8 b8: jmp breturn // atan2_16::@return breturn: - // [123] return + // [138] return rts // atan2_16::@11 b11: - // [124] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [139] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [127] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [142] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] b13_from_b11: b13_from_b14: - // [127] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [127] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [127] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [142] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [142] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [142] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp b13 // atan2_16::@13 b13: - // [128] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [143] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs b14 jmp b15 // atan2_16::@15 b15: - // [129] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [144] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq b17_from_b15 jmp b16 // atan2_16::@16 b16: - // [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda xd+1 cmp #$80 ror xd+1 ror xd - // [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda yd+1 cmp #$80 ror yd+1 ror yd - // [132] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [147] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] b17_from_b15: b17_from_b16: - // [132] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [132] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [147] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [147] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp b17 // atan2_16::@17 b17: - // [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda yi+1 bpl b18 jmp b20 // atan2_16::@20 b20: - // [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda xi sec sbc yd @@ -7183,7 +7749,7 @@ atan2_16: { lda xi+1 sbc yd+1 sta xi+1 - // [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda yi clc adc xd @@ -7191,10 +7757,10 @@ atan2_16: { lda yi+1 adc xd+1 sta yi+1 - // [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda angle @@ -7203,30 +7769,30 @@ atan2_16: { lda angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle+1 - // [138] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [153] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] b19_from_b18: b19_from_b20: - // [138] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [138] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [138] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [153] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [153] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [153] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp b19 // atan2_16::@19 b19: - // [139] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [154] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [140] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [155] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 beq b12_from_b19 - // [113] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [128] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] b10_from_b19: - // [113] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [113] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [113] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [113] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [128] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [128] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [128] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [128] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@18 b18: - // [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda xi clc adc yd @@ -7234,7 +7800,7 @@ atan2_16: { lda xi+1 adc yd+1 sta xi+1 - // [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda yi sec sbc xd @@ -7242,10 +7808,10 @@ atan2_16: { lda yi+1 sbc xd+1 sta yi+1 - // [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda angle @@ -7257,7 +7823,7 @@ atan2_16: { jmp b19_from_b18 // atan2_16::@14 b14: - // [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda xd+1 cmp #$80 ror xd+1 @@ -7266,7 +7832,7 @@ atan2_16: { cmp #$80 ror xd+1 ror xd - // [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda yd+1 cmp #$80 ror yd+1 @@ -7275,13 +7841,13 @@ atan2_16: { cmp #$80 ror yd+1 ror yd - // [147] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [162] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp b13_from_b14 // atan2_16::@4 b4: - // [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -7289,7 +7855,7 @@ atan2_16: { jmp b6_from_b4 // atan2_16::@1 b1: - // [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -7301,69 +7867,69 @@ atan2_16: { // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center init_dist_screen: { - .label yds = $40 - .label xds = $42 - .label ds = $42 - .label x = $25 - .label xb = $26 - .label screen_topline = $21 - .label screen_bottomline = $23 - .label y = $20 - // [151] call init_squares - // [221] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + .label yds = $4d + .label xds = $4f + .label ds = $4f + .label x = $2f + .label xb = $30 + .label screen_topline = $2b + .label screen_bottomline = $2d + .label y = $2a + // [166] call init_squares + // [236] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares - // [152] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] + // [167] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] b1_from_init_dist_screen: - // [152] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 + // [167] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 lda #SCREEN_DIST+$28*$18 sta screen_bottomline+1 - // [152] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 + // [167] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 lda #SCREEN_DIST sta screen_topline+1 - // [152] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [167] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [152] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] + // [167] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] b1_from_b9: - // [152] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy - // [152] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy - // [152] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy + // [167] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy + // [167] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy + // [167] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy jmp b1 // init_dist_screen::@1 b1: - // [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [154] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [169] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 cmp #$18 bcs b2 jmp b3 // init_dist_screen::@3 b3: - // [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [156] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [171] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] b4_from_b2: b4_from_b3: - // [156] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [171] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy jmp b4 // init_dist_screen::@4 b4: - // [157] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [158] call sqr - // [217] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [172] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [173] call sqr + // [232] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [217] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [232] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [159] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [174] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_2 lda sqr.return+1 @@ -7371,55 +7937,55 @@ init_dist_screen: { jmp b10 // init_dist_screen::@10 b10: - // [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [161] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] + // [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [176] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] b5_from_b10: - // [161] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [176] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [161] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [176] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta x jmp b5 - // [161] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] + // [176] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] b5_from_b12: - // [161] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy - // [161] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy + // [176] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy + // [176] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy jmp b5 // init_dist_screen::@5 b5: - // [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [163] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 + // [178] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b6 jmp b7 // init_dist_screen::@7 b7: - // [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [165] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8] + // [180] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8] b8_from_b6: b8_from_b7: - // [165] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy + // [180] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy jmp b8 // init_dist_screen::@8 b8: - // [166] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [167] call sqr - // [217] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] + // [181] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [182] call sqr + // [232] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] sqr_from_b8: - // [217] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy + // [232] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy jsr sqr - // [168] (word) sqr::return#3 ← (word) sqr::return#0 + // [183] (word) sqr::return#3 ← (word) sqr::return#0 jmp b11 // init_dist_screen::@11 b11: - // [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -7427,38 +7993,38 @@ init_dist_screen: { lda ds+1 adc yds+1 sta ds+1 - // [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [172] call sqrt + // [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [187] call sqrt jsr sqrt - // [173] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [188] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp b12 // init_dist_screen::@12 b12: - // [174] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [189] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y - // [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_bottomline),y - // [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y - // [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_bottomline),y - // [179] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [194] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [180] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [195] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [181] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 + // [196] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$13+1 bcc b5_from_b12 jmp b9 // init_dist_screen::@9 b9: - // [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen_topline @@ -7466,7 +8032,7 @@ init_dist_screen: { bcc !+ inc screen_topline+1 !: - // [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda screen_bottomline sec sbc #<$28 @@ -7474,26 +8040,26 @@ init_dist_screen: { lda screen_bottomline+1 sbc #>$28 sta screen_bottomline+1 - // [184] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [199] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc y - // [185] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [200] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp y bne b1_from_b9 jmp breturn // init_dist_screen::@return breturn: - // [186] return + // [201] return rts // init_dist_screen::@6 b6: - // [187] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [202] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$27 jmp b8_from_b6 // init_dist_screen::@2 b2: - // [188] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [203] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp b4_from_b2 @@ -7502,28 +8068,28 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($42) val) +// sqrt(word zeropage($4f) val) sqrt: { - .label _1 = $27 - .label _3 = $27 - .label found = $27 - .label val = $42 - // [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + .label _1 = $31 + .label _3 = $31 + .label found = $31 + .label val = $4f + // [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta bsearch16u.items lda SQUARES+1 sta bsearch16u.items+1 - // [191] call bsearch16u - // [198] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [206] call bsearch16u + // [213] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 jmp b1 // sqrt::@1 b1: - // [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - // [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda _3 sec sbc SQUARES @@ -7531,15 +8097,15 @@ sqrt: { lda _3+1 sbc SQUARES+1 sta _3+1 - // [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr _1+1 ror _1 - // [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda _1 jmp breturn // sqrt::@return breturn: - // [197] return + // [212] return rts } // bsearch16u @@ -7548,29 +8114,29 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($42) key, word* zeropage($27) items, byte register(X) num) +// bsearch16u(word zeropage($4f) key, word* zeropage($31) items, byte register(X) num) bsearch16u: { - .label _2 = $27 - .label pivot = $44 - .label result = $46 - .label return = $27 - .label items = $27 - .label key = $42 - // [199] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + .label _2 = $31 + .label pivot = $51 + .label result = $53 + .label return = $31 + .label items = $31 + .label key = $4f + // [214] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] b3_from_bsearch16u: - // [199] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [199] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + // [214] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [214] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES jmp b3 // bsearch16u::@3 b3: - // [200] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [215] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 cpx #0 bne b4 jmp b5 // bsearch16u::@5 b5: - // [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -7584,7 +8150,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -7592,37 +8158,37 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [203] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [218] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [203] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [218] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [204] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [219] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] breturn_from_b2: breturn_from_b8: - // [204] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [219] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp breturn // bsearch16u::@return breturn: - // [205] return + // [220] return rts // bsearch16u::@4 b4: - // [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr - // [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc adc items sta pivot lda #0 adc items+1 sta pivot+1 - // [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -7632,7 +8198,7 @@ bsearch16u: { iny sbc (pivot),y sta result+1 - // [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 lda result+1 bne b6 lda result @@ -7640,7 +8206,7 @@ bsearch16u: { jmp b8 // bsearch16u::@8 b8: - // [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda pivot sta return lda pivot+1 @@ -7648,7 +8214,7 @@ bsearch16u: { jmp breturn_from_b8 // bsearch16u::@6 b6: - // [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda result+1 bmi b7_from_b6 bne !+ @@ -7658,7 +8224,7 @@ bsearch16u: { jmp b9 // bsearch16u::@9 b9: - // [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 lda #1*SIZEOF_WORD clc adc pivot @@ -7666,24 +8232,24 @@ bsearch16u: { lda #0 adc pivot+1 sta items+1 - // [214] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex - // [215] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [230] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] b7_from_b6: b7_from_b9: - // [215] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [215] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [230] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [230] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp b7 // bsearch16u::@7 b7: - // [216] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [199] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [214] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] b3_from_b7: - // [199] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [199] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [214] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [214] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp b3 } // sqr @@ -7691,11 +8257,11 @@ bsearch16u: { // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $42 - .label return_2 = $40 - // [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + .label return = $4f + .label return_2 = $4d + // [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -7705,24 +8271,24 @@ sqr: { jmp breturn // sqr::@return breturn: - // [220] return + // [235] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $2b - .label sqr = $29 - // [222] call malloc - // [73] phi from init_squares to malloc [phi:init_squares->malloc] + .label squares = $35 + .label sqr = $33 + // [237] call malloc + // [88] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [73] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [88] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta malloc.size lda #0 sta malloc.size+1 - // [73] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 + // [88] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -7731,39 +8297,39 @@ init_squares: { jmp b2 // init_squares::@2 b2: - // [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - // [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [225] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [240] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [225] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [240] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [225] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [225] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [240] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [240] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #0 sta sqr lda #0 sta sqr+1 jmp b1 - // [225] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [240] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [225] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [225] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [225] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [240] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [240] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [240] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp b1 // init_squares::@1 b1: - // [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y iny lda sqr+1 sta (squares),y - // [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -7771,28 +8337,28 @@ init_squares: { bcc !+ inc squares+1 !: - // [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [229] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [244] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 - // [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr bcc !+ inc sqr+1 !: - // [231] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [246] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [232] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [247] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1_from_b1 jmp breturn // init_squares::@return breturn: - // [233] return + // [248] return rts } // File Data @@ -7806,6 +8372,9 @@ CORDIC_ATAN2_ANGLES_16: // = malloc(1000); // Screen containing angle to center SCREEN_ANGLE: .fill $3e8, 0 + // = malloc(1000); + // Screen containing angle to center + SCREEN_MIX: .fill $3e8, 0 // Array containing the bucket size for each of the distance buckets BUCKET_SIZES: .fill NUM_BUCKETS, 0 // Buckets containing screen indices for each distance from the center. @@ -7818,20 +8387,19 @@ CORDIC_ATAN2_ANGLES_16: ASSEMBLER OPTIMIZATIONS Removing instruction jmp b1 Removing instruction jmp bend -Removing instruction jmp b12 Removing instruction jmp b13 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 Removing instruction jmp b4 Removing instruction jmp b5 -Removing instruction jmp b7 Removing instruction jmp b6 -Removing instruction jmp b14 -Removing instruction jmp b8 -Removing instruction jmp b11 -Removing instruction jmp b10 +Removing instruction jmp b7 Removing instruction jmp b9 +Removing instruction jmp b8 +Removing instruction jmp b10 +Removing instruction jmp b12 +Removing instruction jmp b11 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 @@ -7888,10 +8456,17 @@ Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Removing instruction ldy #0 +Removing instruction ldy #0 Removing instruction lda bucket_size Removing instruction lda bucket_size1 Removing instruction lda #>0 Removing instruction lda #>0 +Replacing instruction lda #0 with TYA +Removing instruction lda #>0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 Removing instruction ldy #0 Removing instruction lda ang_w Removing instruction lda ang_w @@ -7905,14 +8480,16 @@ Removing instruction lda result+1 Replacing instruction lda #0 with TXA Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label b7_from_b7 with b7 -Replacing label b14_from_b6 with b8 -Replacing label b10_from_b10 with b10 -Replacing label b1 with b2 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b9_from_b9 with b9 +Replacing label b12_from_b12 with b12 +Replacing label b3 with b4 Replacing label b1_from_b1 with b1 Replacing label b2_from_b2 with b2 Replacing label b2_from_b2 with b2 Replacing label b3_from_b6 with b3 +Replacing label b3_from_b6 with b3 Replacing label b4_from_b4 with b4 Replacing label b5_from_b5 with b5 Replacing label b5_from_b5 with b5 @@ -7940,16 +8517,14 @@ Removing instruction b1_from_bbegin: Removing instruction b1: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b12_from_main: -Removing instruction init_angle_screen_from_b12: -Removing instruction b13_from_b12: -Removing instruction init_buckets_from_b13: -Removing instruction b1: -Removing instruction b7_from_b7: -Removing instruction b14_from_b6: -Removing instruction b14: -Removing instruction b8_from_b14: -Removing instruction b10_from_b10: +Removing instruction b13_from_main: +Removing instruction init_angle_screen_from_b13: +Removing instruction b1_from_b1: +Removing instruction b2_from_b1: +Removing instruction init_buckets_from_b2: +Removing instruction b3: +Removing instruction b9_from_b9: +Removing instruction b12_from_b12: Removing instruction b1_from_b1: Removing instruction b2_from_b2: Removing instruction b3_from_b6: @@ -7996,16 +8571,16 @@ Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction bend: Removing instruction init_dist_screen_from_main: -Removing instruction b12: Removing instruction b13: Removing instruction b1_from_b13: -Removing instruction b4: -Removing instruction b5: -Removing instruction b7_from_b5: -Removing instruction b8_from_b6: -Removing instruction b11: -Removing instruction b10_from_b11: -Removing instruction b1_from_b9: +Removing instruction b2: +Removing instruction b3_from_b2: +Removing instruction b6: +Removing instruction b7: +Removing instruction b9_from_b7: +Removing instruction b10: +Removing instruction b12_from_b10: +Removing instruction b3_from_b11: Removing instruction b1_from_init_buckets: Removing instruction b2_from_b1: Removing instruction b3_from_b2: @@ -8056,9 +8631,9 @@ Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Replacing jump to rts with rts in jmp b2 Succesful ASM optimization Pass5DoubleJumpElimination -Removing instruction jmp b7 -Removing instruction jmp b8 -Removing instruction jmp b10 +Removing instruction jmp b1 +Removing instruction jmp b9 +Removing instruction jmp b12 Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b3 @@ -8077,9 +8652,9 @@ Removing instruction lda #<0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [470] beq b12 to bne -Fixing long branch [364] bpl b1 to bmi -Fixing long branch [376] bpl b4 to bmi +Fixing long branch [600] beq b12 to bne +Fixing long branch [494] bpl b1 to bmi +Fixing long branch [506] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -8101,8 +8676,8 @@ FINAL SYMBOL TABLE (const byte) CORDIC_ITERATIONS_16#0 CORDIC_ITERATIONS_16 = (byte) $f (byte*) HEAP_TOP (const byte*) HEAP_TOP#0 HEAP_TOP = (byte*) 40960 -(byte) NUM_BUCKETS -(const byte) NUM_BUCKETS#0 NUM_BUCKETS = (byte) $30 +(word) NUM_BUCKETS +(const word) NUM_BUCKETS#0 NUM_BUCKETS = (word) $100 (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (byte*) RASTER @@ -8113,14 +8688,16 @@ FINAL SYMBOL TABLE (const byte[$3e8]) SCREEN_DIST#0 SCREEN_DIST = { fill( $3e8, 0) } (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 +(byte[$3e8]) SCREEN_MIX +(const byte[$3e8]) SCREEN_MIX#0 SCREEN_MIX = { fill( $3e8, 0) } (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:13 0.03278688524590164 +(void*) SQUARES#1 SQUARES zp ZP_WORD:23 0.03278688524590164 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) -(signed word~) atan2_16::$2 $2 zp ZP_WORD:22 4.0 +(signed word~) atan2_16::$2 $2 zp ZP_WORD:32 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$24 reg byte a 2002.0 -(signed word~) atan2_16::$7 $7 zp ZP_WORD:24 4.0 +(signed word~) atan2_16::$7 $7 zp ZP_WORD:34 4.0 (label) atan2_16::@1 (label) atan2_16::@10 (label) atan2_16::@11 @@ -8144,58 +8721,58 @@ FINAL SYMBOL TABLE (label) atan2_16::@9 (label) atan2_16::@return (word) atan2_16::angle -(word) atan2_16::angle#1 angle zp ZP_WORD:26 3.0 -(word) atan2_16::angle#11 angle zp ZP_WORD:26 4.0 -(word) atan2_16::angle#12 angle zp ZP_WORD:26 190.66666666666666 -(word) atan2_16::angle#13 angle zp ZP_WORD:26 1334.6666666666667 -(word) atan2_16::angle#2 angle zp ZP_WORD:26 2002.0 -(word) atan2_16::angle#3 angle zp ZP_WORD:26 2002.0 -(word) atan2_16::angle#4 angle zp ZP_WORD:26 4.0 -(word) atan2_16::angle#5 angle zp ZP_WORD:26 4.0 -(word) atan2_16::angle#6 angle zp ZP_WORD:26 2004.0 +(word) atan2_16::angle#1 angle zp ZP_WORD:36 3.0 +(word) atan2_16::angle#11 angle zp ZP_WORD:36 4.0 +(word) atan2_16::angle#12 angle zp ZP_WORD:36 190.66666666666666 +(word) atan2_16::angle#13 angle zp ZP_WORD:36 1334.6666666666667 +(word) atan2_16::angle#2 angle zp ZP_WORD:36 2002.0 +(word) atan2_16::angle#3 angle zp ZP_WORD:36 2002.0 +(word) atan2_16::angle#4 angle zp ZP_WORD:36 4.0 +(word) atan2_16::angle#5 angle zp ZP_WORD:36 4.0 +(word) atan2_16::angle#6 angle zp ZP_WORD:36 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 reg byte x 1501.5 (byte) atan2_16::i#2 reg byte x 208.54166666666669 (word) atan2_16::return -(word) atan2_16::return#0 return zp ZP_WORD:26 34.99999999999999 -(word) atan2_16::return#2 return zp ZP_WORD:26 202.0 +(word) atan2_16::return#0 return zp ZP_WORD:36 34.99999999999999 +(word) atan2_16::return#2 return zp ZP_WORD:36 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 reg byte y 20002.0 (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:59 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:72 2.8684210526315796 (signed word) atan2_16::xd -(signed word) atan2_16::xd#1 xd zp ZP_WORD:30 6667.333333333333 -(signed word~) atan2_16::xd#10 xd zp ZP_WORD:30 1001.0 -(signed word) atan2_16::xd#2 xd zp ZP_WORD:30 1001.0 -(signed word) atan2_16::xd#3 xd zp ZP_WORD:30 7668.333333333332 -(signed word) atan2_16::xd#5 xd zp ZP_WORD:30 1001.0 +(signed word) atan2_16::xd#1 xd zp ZP_WORD:40 6667.333333333333 +(signed word~) atan2_16::xd#10 xd zp ZP_WORD:40 1001.0 +(signed word) atan2_16::xd#2 xd zp ZP_WORD:40 1001.0 +(signed word) atan2_16::xd#3 xd zp ZP_WORD:40 7668.333333333332 +(signed word) atan2_16::xd#5 xd zp ZP_WORD:40 1001.0 (signed word) atan2_16::xi -(signed word) atan2_16::xi#0 xi zp ZP_WORD:24 6.0 -(signed word) atan2_16::xi#1 xi zp ZP_WORD:24 500.5 -(signed word~) atan2_16::xi#13 xi zp ZP_WORD:24 4.0 -(signed word) atan2_16::xi#2 xi zp ZP_WORD:24 500.5 -(signed word) atan2_16::xi#3 xi zp ZP_WORD:24 267.0666666666667 -(signed word) atan2_16::xi#8 xi zp ZP_WORD:24 1001.0 +(signed word) atan2_16::xi#0 xi zp ZP_WORD:34 6.0 +(signed word) atan2_16::xi#1 xi zp ZP_WORD:34 500.5 +(signed word~) atan2_16::xi#13 xi zp ZP_WORD:34 4.0 +(signed word) atan2_16::xi#2 xi zp ZP_WORD:34 500.5 +(signed word) atan2_16::xi#3 xi zp ZP_WORD:34 267.0666666666667 +(signed word) atan2_16::xi#8 xi zp ZP_WORD:34 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:61 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:74 2.724999999999999 (signed word) atan2_16::yd -(signed word) atan2_16::yd#1 yd zp ZP_WORD:28 10001.0 -(signed word~) atan2_16::yd#10 yd zp ZP_WORD:28 2002.0 -(signed word) atan2_16::yd#2 yd zp ZP_WORD:28 2002.0 -(signed word) atan2_16::yd#3 yd zp ZP_WORD:28 4601.0 -(signed word) atan2_16::yd#5 yd zp ZP_WORD:28 2002.0 +(signed word) atan2_16::yd#1 yd zp ZP_WORD:38 10001.0 +(signed word~) atan2_16::yd#10 yd zp ZP_WORD:38 2002.0 +(signed word) atan2_16::yd#2 yd zp ZP_WORD:38 2002.0 +(signed word) atan2_16::yd#3 yd zp ZP_WORD:38 4601.0 +(signed word) atan2_16::yd#5 yd zp ZP_WORD:38 2002.0 (signed word) atan2_16::yi -(signed word) atan2_16::yi#0 yi zp ZP_WORD:22 1.2000000000000002 -(signed word) atan2_16::yi#1 yi zp ZP_WORD:22 667.3333333333334 -(signed word~) atan2_16::yi#16 yi zp ZP_WORD:22 4.0 -(signed word) atan2_16::yi#2 yi zp ZP_WORD:22 667.3333333333334 -(signed word) atan2_16::yi#3 yi zp ZP_WORD:22 353.4117647058823 -(signed word) atan2_16::yi#8 yi zp ZP_WORD:22 1001.0 +(signed word) atan2_16::yi#0 yi zp ZP_WORD:32 1.2000000000000002 +(signed word) atan2_16::yi#1 yi zp ZP_WORD:32 667.3333333333334 +(signed word~) atan2_16::yi#16 yi zp ZP_WORD:32 4.0 +(signed word) atan2_16::yi#2 yi zp ZP_WORD:32 667.3333333333334 +(signed word) atan2_16::yi#3 yi zp ZP_WORD:32 353.4117647058823 +(signed word) atan2_16::yi#8 yi zp ZP_WORD:32 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:39 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:49 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 (label) bsearch16u::@2 @@ -8208,31 +8785,31 @@ FINAL SYMBOL TABLE (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:39 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:39 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:39 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:39 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:49 1001.0 +(word*) bsearch16u::items#1 items zp ZP_WORD:49 2.0 +(word*) bsearch16u::items#2 items zp ZP_WORD:49 334.5555555555556 +(word*) bsearch16u::items#8 items zp ZP_WORD:49 1501.5 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:66 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:79 0.26666666666666666 (byte) bsearch16u::num (byte) bsearch16u::num#0 reg byte x 2002.0 (byte) bsearch16u::num#1 reg byte x 2002.0 (byte) bsearch16u::num#3 reg byte x 556.1111111111111 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:68 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:81 501.0 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:70 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:83 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:39 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:39 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:39 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:39 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:49 2.0 +(word*) bsearch16u::return#2 return zp ZP_WORD:49 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:49 4.0 +(word*~) bsearch16u::return#6 return zp ZP_WORD:49 4.0 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:11 0.17567567567567569 -(byte*) heap_head#13 heap_head zp ZP_WORD:11 13.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:21 0.1511627906976744 +(byte*) heap_head#13 heap_head zp ZP_WORD:21 13.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) -(word~) init_angle_screen::$10 $10 zp ZP_WORD:26 202.0 +(word~) init_angle_screen::$10 $10 zp ZP_WORD:36 202.0 (byte~) init_angle_screen::$12 reg byte a 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 (byte~) init_angle_screen::$14 reg byte a 202.0 @@ -8245,35 +8822,39 @@ FINAL SYMBOL TABLE (label) init_angle_screen::@4 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:63 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:76 84.16666666666666 (word) init_angle_screen::angle_w -(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:26 202.0 +(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:36 202.0 (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline -(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:16 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:16 8.959999999999999 +(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:26 7.333333333333333 +(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:26 8.959999999999999 (byte*) init_angle_screen::screen_topline -(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:18 5.5 -(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:18 9.333333333333334 +(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:28 5.5 +(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:28 9.333333333333334 (byte) init_angle_screen::x -(byte) init_angle_screen::x#1 x zp ZP_BYTE:20 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:20 25.25 +(byte) init_angle_screen::x#1 x zp ZP_BYTE:30 101.0 +(byte) init_angle_screen::x#2 x zp ZP_BYTE:30 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:21 101.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:21 19.238095238095237 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:31 101.0 +(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:31 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:59 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:72 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:15 16.5 -(byte) init_angle_screen::y#4 y zp ZP_BYTE:15 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:25 16.5 +(byte) init_angle_screen::y#4 y zp ZP_BYTE:25 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:61 50.5 -(void()) init_buckets() -(byte~) init_buckets::$11 reg byte a 22.0 -(byte~) init_buckets::$12 reg byte a 22.0 -(byte~) init_buckets::$13 reg byte a 22.0 -(void*~) init_buckets::$5 $5 zp ZP_WORD:13 5.5 -(word~) init_buckets::$9 $9 zp ZP_WORD:57 11.0 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:74 50.5 +(void()) init_buckets((byte*) init_buckets::screen) +(word~) init_buckets::$10 $10 zp ZP_WORD:70 11.0 +(word~) init_buckets::$12 $12 zp ZP_WORD:66 22.0 +(word~) init_buckets::$13 $13 zp ZP_WORD:68 22.0 +(byte~) init_buckets::$14 reg byte a 22.0 +(byte*~) init_buckets::$15 $15 zp ZP_WORD:23 22.0 +(word**~) init_buckets::$16 $16 zp ZP_WORD:66 22.0 +(word**~) init_buckets::$17 $17 zp ZP_WORD:68 22.0 +(void*~) init_buckets::$5 $5 zp ZP_WORD:23 3.6666666666666665 +(word~) init_buckets::$9 $9 zp ZP_WORD:68 22.0 (label) init_buckets::@1 (label) init_buckets::@2 (label) init_buckets::@3 @@ -8282,29 +8863,30 @@ FINAL SYMBOL TABLE (label) init_buckets::@6 (label) init_buckets::@return (word*) init_buckets::bucket -(word*) init_buckets::bucket#0 bucket zp ZP_WORD:55 7.333333333333333 +(word*) init_buckets::bucket#0 bucket zp ZP_WORD:68 7.333333333333333 (byte*) init_buckets::dist -(byte*) init_buckets::dist#1 dist zp ZP_WORD:3 7.333333333333333 -(byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:7 7.333333333333333 -(byte*) init_buckets::dist#4 dist zp ZP_WORD:3 22.0 -(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:7 5.5 +(byte*) init_buckets::dist#1 dist zp ZP_WORD:11 7.333333333333333 +(byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:17 7.333333333333333 +(byte*) init_buckets::dist#4 dist zp ZP_WORD:11 22.0 +(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:17 4.4 (byte) init_buckets::distance -(byte) init_buckets::distance#0 reg byte x 9.166666666666666 +(byte) init_buckets::distance#0 reg byte x 5.5 (byte) init_buckets::i (byte) init_buckets::i#1 reg byte x 16.5 (byte) init_buckets::i#2 reg byte x 16.5 (word) init_buckets::i1 -(word) init_buckets::i1#1 i1 zp ZP_WORD:5 16.5 -(word) init_buckets::i1#2 i1 zp ZP_WORD:5 7.333333333333333 -(byte) init_buckets::i2 -(byte) init_buckets::i2#1 reg byte x 16.5 -(byte) init_buckets::i2#2 reg byte x 7.333333333333333 +(word) init_buckets::i1#1 i1 zp ZP_WORD:13 16.5 +(word) init_buckets::i1#2 i1 zp ZP_WORD:13 7.333333333333333 +(word) init_buckets::i2 +(word) init_buckets::i2#1 i2 zp ZP_WORD:15 16.5 +(word) init_buckets::i2#2 i2 zp ZP_WORD:15 5.5 (byte) init_buckets::i3 (byte) init_buckets::i3#1 reg byte x 16.5 (byte) init_buckets::i3#2 reg byte x 16.5 (word) init_buckets::i4 -(word) init_buckets::i4#1 i4 zp ZP_WORD:9 16.5 -(word) init_buckets::i4#2 i4 zp ZP_WORD:9 2.4444444444444446 +(word) init_buckets::i4#1 i4 zp ZP_WORD:19 16.5 +(word) init_buckets::i4#2 i4 zp ZP_WORD:19 2.0 +(byte*) init_buckets::screen (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$13 reg byte a 202.0 (byte~) init_dist_screen::$15 reg byte a 202.0 @@ -8326,35 +8908,35 @@ FINAL SYMBOL TABLE (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:66 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:79 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen_bottomline -(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:35 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:35 6.787878787878788 +(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:45 7.333333333333333 +(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:45 6.787878787878788 (byte*) init_dist_screen::screen_topline -(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:33 5.5 -(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:33 7.0 +(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:43 5.5 +(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:43 7.0 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:37 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:37 26.578947368421055 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:47 101.0 +(byte) init_dist_screen::x#2 x zp ZP_BYTE:47 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:38 101.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:38 20.2 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:48 101.0 +(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:48 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:66 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:79 202.0 (byte) init_dist_screen::y -(byte) init_dist_screen::y#1 y zp ZP_BYTE:32 16.5 -(byte) init_dist_screen::y#10 y zp ZP_BYTE:32 0.9705882352941178 +(byte) init_dist_screen::y#1 y zp ZP_BYTE:42 16.5 +(byte) init_dist_screen::y#10 y zp ZP_BYTE:42 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 reg byte a 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:64 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:77 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -8365,23 +8947,29 @@ FINAL SYMBOL TABLE (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:41 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:41 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:51 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:51 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:43 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:43 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:43 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:53 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:53 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:53 17.5 (void()) main() -(byte~) main::$15 reg byte a 22.0 -(byte~) main::$16 reg byte a 202.0 -(byte~) main::$17 reg byte a 22.0 -(byte~) main::$18 reg byte a 202.0 +(word~) main::$11 $11 zp ZP_WORD:57 22.0 +(word~) main::$16 $16 zp ZP_WORD:62 22.0 +(word~) main::$19 $19 zp ZP_WORD:57 22.0 +(byte~) main::$20 reg byte a 202.0 +(word~) main::$21 $21 zp ZP_WORD:62 22.0 +(byte~) main::$22 reg byte a 202.0 +(word**~) main::$23 $23 zp ZP_WORD:57 22.0 +(word**~) main::$24 $24 zp ZP_WORD:62 22.0 +(byte~) main::$3 $3 zp ZP_BYTE:55 11.0 +(byte~) main::$4 reg byte a 22.0 +(byte~) main::$5 reg byte a 22.0 (label) main::@1 (label) main::@10 (label) main::@11 (label) main::@12 (label) main::@13 -(label) main::@14 (label) main::@2 (label) main::@3 (label) main::@4 @@ -8390,143 +8978,158 @@ FINAL SYMBOL TABLE (label) main::@7 (label) main::@8 (label) main::@9 +(byte*) main::angle +(byte*) main::angle#1 angle zp ZP_WORD:4 7.333333333333333 +(byte*) main::angle#2 angle zp ZP_WORD:4 4.714285714285714 (word*) main::bucket -(word*) main::bucket#0 bucket zp ZP_WORD:46 16.0 +(word*) main::bucket#0 bucket zp ZP_WORD:57 16.0 (word*) main::bucket1 -(word*) main::bucket1#0 bucket1 zp ZP_WORD:51 16.0 +(word*) main::bucket1#0 bucket1 zp ZP_WORD:62 16.0 (byte) main::bucket_idx -(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0 -(byte) main::bucket_idx#11 bucket_idx zp ZP_BYTE:2 3.142857142857143 -(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 3.6666666666666665 +(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:10 2.357142857142857 +(byte) main::bucket_idx#9 bucket_idx zp ZP_BYTE:10 2.0625 (byte) main::bucket_size -(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:45 12.3 +(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:56 10.25 (byte) main::bucket_size1 -(byte) main::bucket_size1#0 bucket_size1 zp ZP_BYTE:50 12.3 -(byte) main::i -(byte) main::i#1 reg byte x 151.5 -(byte) main::i#2 reg byte x 75.75 +(byte) main::bucket_size1#0 bucket_size1 zp ZP_BYTE:61 10.25 +(byte*) main::dist +(byte*) main::dist#1 dist zp ZP_WORD:2 5.5 +(byte*) main::dist#2 dist zp ZP_WORD:2 5.5 +(word) main::i +(word) main::i#1 i zp ZP_WORD:8 16.5 +(word) main::i#2 i zp ZP_WORD:8 2.75 (byte) main::i1 (byte) main::i1#1 reg byte x 151.5 (byte) main::i1#2 reg byte x 75.75 +(byte) main::i2 +(byte) main::i2#1 reg byte x 151.5 +(byte) main::i2#2 reg byte x 75.75 +(byte*) main::mix +(byte*) main::mix#1 mix zp ZP_WORD:6 4.4 +(byte*) main::mix#2 mix zp ZP_WORD:6 6.6000000000000005 (byte*) main::sc -(byte*) main::sc#0 sc zp ZP_WORD:48 202.0 +(byte*) main::sc#0 sc zp ZP_WORD:59 202.0 (byte*) main::sc1 -(byte*) main::sc1#0 sc1 zp ZP_WORD:53 202.0 +(byte*) main::sc1#0 sc1 zp ZP_WORD:64 202.0 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:13 0.8 +(byte*) malloc::mem#0 mem zp ZP_WORD:23 0.8 (void*) malloc::return (word) malloc::size -(word) malloc::size#1 size zp ZP_WORD:13 22.0 -(word) malloc::size#2 size zp ZP_WORD:13 13.0 +(word) malloc::size#1 size zp ZP_WORD:23 22.0 +(word) malloc::size#2 size zp ZP_WORD:23 13.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:66 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:64 22.0 -(word) sqr::return#3 return zp ZP_WORD:66 202.0 +(word) sqr::return#0 return zp ZP_WORD:79 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:77 22.0 +(word) sqr::return#3 return zp ZP_WORD:79 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:39 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:39 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:49 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:49 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:39 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:49 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:66 103.0 +(word) sqrt::val#0 val zp ZP_WORD:79 103.0 -zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -reg byte x [ main::i#2 main::i#1 ] +zp ZP_WORD:2 [ main::dist#2 main::dist#1 ] +zp ZP_WORD:4 [ main::angle#2 main::angle#1 ] +zp ZP_WORD:6 [ main::mix#2 main::mix#1 ] +zp ZP_WORD:8 [ main::i#2 main::i#1 ] +zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] reg byte x [ main::i1#2 main::i1#1 ] +reg byte x [ main::i2#2 main::i2#1 ] reg byte x [ init_buckets::i#2 init_buckets::i#1 ] -zp ZP_WORD:3 [ init_buckets::dist#4 init_buckets::dist#1 ] -zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ] -reg byte x [ init_buckets::i2#2 init_buckets::i2#1 ] +zp ZP_WORD:11 [ init_buckets::dist#4 init_buckets::dist#1 ] +zp ZP_WORD:13 [ init_buckets::i1#2 init_buckets::i1#1 ] +zp ZP_WORD:15 [ init_buckets::i2#2 init_buckets::i2#1 ] reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ] -zp ZP_WORD:7 [ init_buckets::dist#5 init_buckets::dist#3 ] -zp ZP_WORD:9 [ init_buckets::i4#2 init_buckets::i4#1 ] -zp ZP_WORD:11 [ heap_head#13 heap_head#1 ] -zp ZP_WORD:13 [ malloc::size#2 malloc::size#1 malloc::mem#0 init_buckets::$5 SQUARES#1 ] -zp ZP_BYTE:15 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -zp ZP_WORD:16 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -zp ZP_WORD:18 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -zp ZP_BYTE:20 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -zp ZP_BYTE:21 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -zp ZP_WORD:22 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] -zp ZP_WORD:24 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] +zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] +zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] +zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] +zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] +zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] -zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ] +zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_WORD:28 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -zp ZP_WORD:30 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -zp ZP_BYTE:32 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -zp ZP_WORD:33 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -zp ZP_WORD:35 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +zp ZP_WORD:38 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +zp ZP_WORD:40 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_BYTE:42 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +zp ZP_WORD:43 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] +zp ZP_WORD:45 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -zp ZP_BYTE:37 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -zp ZP_BYTE:38 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] -zp ZP_WORD:39 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] +zp ZP_WORD:49 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] -zp ZP_WORD:41 [ init_squares::sqr#2 init_squares::sqr#1 ] -zp ZP_WORD:43 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +zp ZP_WORD:51 [ init_squares::sqr#2 init_squares::sqr#1 ] +zp ZP_WORD:53 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_BYTE:45 [ main::bucket_size#0 ] -reg byte a [ main::$15 ] -zp ZP_WORD:46 [ main::bucket#0 ] -reg byte a [ main::$16 ] -zp ZP_WORD:48 [ main::sc#0 ] -zp ZP_BYTE:50 [ main::bucket_size1#0 ] -reg byte a [ main::$17 ] -zp ZP_WORD:51 [ main::bucket1#0 ] -reg byte a [ main::$18 ] -zp ZP_WORD:53 [ main::sc1#0 ] -reg byte a [ init_buckets::$11 ] +zp ZP_BYTE:55 [ main::$3 ] +reg byte a [ main::$4 ] +reg byte a [ main::$5 ] +zp ZP_BYTE:56 [ main::bucket_size#0 ] +zp ZP_WORD:57 [ main::$11 main::$19 main::$23 main::bucket#0 ] +reg byte a [ main::$20 ] +zp ZP_WORD:59 [ main::sc#0 ] +zp ZP_BYTE:61 [ main::bucket_size1#0 ] +zp ZP_WORD:62 [ main::$16 main::$21 main::$24 main::bucket1#0 ] +reg byte a [ main::$22 ] +zp ZP_WORD:64 [ main::sc1#0 ] +zp ZP_WORD:66 [ init_buckets::$12 init_buckets::$16 ] reg byte x [ init_buckets::distance#0 ] -reg byte a [ init_buckets::$12 ] -zp ZP_WORD:55 [ init_buckets::bucket#0 ] -zp ZP_WORD:57 [ init_buckets::$9 ] -reg byte a [ init_buckets::$13 ] +zp ZP_WORD:68 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +zp ZP_WORD:70 [ init_buckets::$10 ] +reg byte a [ init_buckets::$14 ] reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] -zp ZP_WORD:59 [ init_angle_screen::xw#0 atan2_16::x#0 ] +zp ZP_WORD:72 [ init_angle_screen::xw#0 atan2_16::x#0 ] reg byte a [ init_angle_screen::$6 ] -zp ZP_WORD:61 [ init_angle_screen::yw#0 atan2_16::y#0 ] -zp ZP_BYTE:63 [ init_angle_screen::ang_w#0 ] +zp ZP_WORD:74 [ init_angle_screen::yw#0 atan2_16::y#0 ] +zp ZP_BYTE:76 [ init_angle_screen::ang_w#0 ] reg byte a [ init_angle_screen::$12 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:64 [ sqr::return#2 init_dist_screen::yds#0 ] +zp ZP_WORD:77 [ sqr::return#2 init_dist_screen::yds#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:66 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] +zp ZP_WORD:79 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:68 [ bsearch16u::pivot#0 ] -zp ZP_WORD:70 [ bsearch16u::result#0 ] +zp ZP_WORD:81 [ bsearch16u::pivot#0 ] +zp ZP_WORD:83 [ bsearch16u::result#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] FINAL ASSEMBLER -Score: 1108642 +Score: 1112027 // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center @@ -8547,10 +9150,10 @@ Score: 1108642 // Screen containing angle to center .label SCREEN_FILL = $400 // The number of buckets in our bucket sort - .const NUM_BUCKETS = $30 + .const NUM_BUCKETS = $100 .const NUM_SQUARES = $30 - .label heap_head = $b - .label SQUARES = $d + .label heap_head = $15 + .label SQUARES = $17 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -8560,86 +9163,188 @@ Score: 1108642 // @end // main main: { - .label bucket_size = $2d - .label bucket_idx = 2 - .label bucket = $2e - .label sc = $30 - .label bucket_size1 = $32 - .label bucket1 = $33 - .label sc1 = $35 + .label _3 = $37 + .label _11 = $39 + .label _16 = $3e + .label _19 = $39 + .label _21 = $3e + .label mix = 6 + .label dist = 2 + .label angle = 4 + .label i = 8 + .label bucket_size = $38 + .label bucket_idx = $a + .label bucket_size1 = $3d + .label bucket = $39 + .label sc = $3b + .label bucket1 = $3e + .label sc1 = $40 + .label _23 = $39 + .label _24 = $3e // init_dist_screen(SCREEN_DIST) // [5] call init_dist_screen - // [150] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [165] phi from main to init_dist_screen [phi:main->init_dist_screen] jsr init_dist_screen - // [6] phi from main to main::@12 [phi:main->main::@12] - // main::@12 + // [6] phi from main to main::@13 [phi:main->main::@13] + // main::@13 // init_angle_screen(SCREEN_ANGLE) // [7] call init_angle_screen - // [77] phi from main::@12 to init_angle_screen [phi:main::@12->init_angle_screen] + // [92] phi from main::@13 to init_angle_screen [phi:main::@13->init_angle_screen] jsr init_angle_screen - // [8] phi from main::@12 to main::@13 [phi:main::@12->main::@13] - // main::@13 - // init_buckets() - // [9] call init_buckets - // [39] phi from main::@13 to init_buckets [phi:main::@13->init_buckets] + // [8] phi from main::@13 to main::@1 [phi:main::@13->main::@1] + // [8] phi (word) main::i#2 = (word) 0 [phi:main::@13->main::@1#0] -- vwuz1=vwuc1 + lda #<0 + sta i + sta i+1 + // [8] phi (byte*) main::mix#2 = (const byte[$3e8]) SCREEN_MIX#0 [phi:main::@13->main::@1#1] -- pbuz1=pbuc1 + lda #SCREEN_MIX + sta mix+1 + // [8] phi (byte*) main::angle#2 = (const byte[$3e8]) SCREEN_ANGLE#0 [phi:main::@13->main::@1#2] -- pbuz1=pbuc1 + lda #SCREEN_ANGLE + sta angle+1 + // [8] phi (byte*) main::dist#2 = (const byte[$3e8]) SCREEN_DIST#0 [phi:main::@13->main::@1#3] -- pbuz1=pbuc1 + lda #SCREEN_DIST + sta dist+1 + // [8] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [8] phi (word) main::i#2 = (word) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // [8] phi (byte*) main::mix#2 = (byte*) main::mix#1 [phi:main::@1->main::@1#1] -- register_copy + // [8] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@1->main::@1#2] -- register_copy + // [8] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@1->main::@1#3] -- register_copy + // main::@1 + b1: + // (*dist++)*4 + // [9] (byte~) main::$3 ← *((byte*) main::dist#2) << (byte) 2 -- vbuz1=_deref_pbuz2_rol_2 + ldy #0 + lda (dist),y + asl + asl + sta _3 + // (*angle++)/2 + // [10] (byte~) main::$4 ← *((byte*) main::angle#2) >> (byte) 1 -- vbuaa=_deref_pbuz1_ror_1 + lda (angle),y + lsr + // (*dist++)*4 + (*angle++)/2 + // [11] (byte~) main::$5 ← (byte~) main::$3 + (byte~) main::$4 -- vbuaa=vbuz1_plus_vbuaa + clc + adc _3 + // *mix++ = (*dist++)*4 + (*angle++)/2 + // [12] *((byte*) main::mix#2) ← (byte~) main::$5 -- _deref_pbuz1=vbuaa + sta (mix),y + // *mix++ = (*dist++)*4 + (*angle++)/2; + // [13] (byte*) main::mix#1 ← ++ (byte*) main::mix#2 -- pbuz1=_inc_pbuz1 + inc mix + bne !+ + inc mix+1 + !: + // [14] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1 + inc dist + bne !+ + inc dist+1 + !: + // [15] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1 + inc angle + bne !+ + inc angle+1 + !: + // for( word i:0..999) + // [16] (word) main::i#1 ← ++ (word) main::i#2 -- vwuz1=_inc_vwuz1 + inc i + bne !+ + inc i+1 + !: + // [17] if((word) main::i#1!=(word) $3e8) goto main::@1 -- vwuz1_neq_vwuc1_then_la1 + lda i+1 + cmp #>$3e8 + bne b1 + lda i + cmp #<$3e8 + bne b1 + // [18] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // main::@2 + // init_buckets(SCREEN_MIX) + // [19] call init_buckets + // [50] phi from main::@2 to init_buckets [phi:main::@2->init_buckets] jsr init_buckets - // [10] phi from main::@13 to main::@1 [phi:main::@13->main::@1] - // [10] phi (byte) main::bucket_idx#11 = (byte) 0 [phi:main::@13->main::@1#0] -- vbuz1=vbuc1 + // [20] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [20] phi (byte) main::bucket_idx#9 = (byte) 0 [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 lda #0 sta bucket_idx - // main::@1 - // main::@2 - b2: + // main::@3 + // main::@4 + b4: // while (*RASTER!=0xfe) - // [11] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [21] if(*((const byte*) RASTER#0)!=(byte) $fe) goto main::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$fe cmp RASTER - bne b2 - // main::@3 - b3: + bne b4 + // main::@5 + b5: // while (*RASTER!=0xff) - // [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@3 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [22] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@5 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER - bne b3 - // main::@4 + bne b5 + // main::@6 // (*BORDERCOL)++; - // [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [23] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL // bucket_size = BUCKET_SIZES[bucket_idx] - // [14] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#11) -- vbuz1=pbuc1_derefidx_vbuz2 + // [24] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#9) -- vbuz1=pbuc1_derefidx_vbuz2 // First clear the current bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size // if(bucket_size>0) - // [15] if((byte) main::bucket_size#0<=(byte) 0) goto main::@6 -- vbuz1_le_0_then_la1 + // [25] if((byte) main::bucket_size#0<=(byte) 0) goto main::@8 -- vbuz1_le_0_then_la1 cmp #0 - beq b6 - // main::@5 - // bucket = BUCKETS[bucket_idx] - // [16] (byte~) main::$15 ← (byte) main::bucket_idx#11 << (byte) 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [17] (word*) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$15) -- pwuz1=pptc1_derefidx_vbuaa - tay - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y - sta bucket+1 - // [18] phi from main::@5 to main::@7 [phi:main::@5->main::@7] - // [18] phi (byte) main::i#2 = (byte) 0 [phi:main::@5->main::@7#0] -- vbuxx=vbuc1 - ldx #0 - // [18] phi from main::@7 to main::@7 [phi:main::@7->main::@7] - // [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@7#0] -- register_copy + beq b8 // main::@7 - b7: + // (word)bucket_idx + // [26] (word~) main::$11 ← (word)(byte) main::bucket_idx#9 -- vwuz1=_word_vbuz2 + tya + sta _11 + lda #0 + sta _11+1 + // bucket = BUCKETS[(word)bucket_idx] + // [27] (word~) main::$19 ← (word~) main::$11 << (byte) 1 -- vwuz1=vwuz1_rol_1 + asl _19 + rol _19+1 + // [28] (word**~) main::$23 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$19 -- pptz1=pptc1_plus_vwuz1 + clc + lda _23 + adc #BUCKETS + sta _23+1 + // [29] (word*) main::bucket#0 ← *((word**~) main::$23) -- pwuz1=_deref_pptz1 + ldy #0 + lda (bucket),y + pha + iny + lda (bucket),y + sta bucket+1 + pla + sta bucket + // [30] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + // [30] phi (byte) main::i1#2 = (byte) 0 [phi:main::@7->main::@9#0] -- vbuxx=vbuc1 + ldx #0 + // [30] phi from main::@9 to main::@9 [phi:main::@9->main::@9] + // [30] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@9->main::@9#0] -- register_copy + // main::@9 + b9: // SCREEN_FILL+bucket[i] - // [19] (byte~) main::$16 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [31] (byte~) main::$20 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // sc = SCREEN_FILL+bucket[i] - // [20] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$16) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa + // [32] (byte*) main::sc#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket#0 + (byte~) main::$20) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa tay clc lda #main::@8] - // [27] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@6->main::@8#0] -- vbuz1=vbuc1 - lda #0 - sta bucket_idx - // [26] phi from main::@6 to main::@14 [phi:main::@6->main::@14] - // main::@14 - // [27] phi from main::@14 to main::@8 [phi:main::@14->main::@8] - // [27] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@14->main::@8#0] -- register_copy + bcc b9 // main::@8 b8: + // bucket_idx++; + // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#9 -- vbuz1=_inc_vbuz1 + inc bucket_idx // bucket_size = BUCKET_SIZES[bucket_idx] - // [28] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 + // [37] (byte) main::bucket_size1#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#1) -- vbuz1=pbuc1_derefidx_vbuz2 // Plot char in the bucket ldy bucket_idx lda BUCKET_SIZES,y sta bucket_size1 // if(bucket_size>0) - // [29] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@9 -- vbuz1_le_0_then_la1 + // [38] if((byte) main::bucket_size1#0<=(byte) 0) goto main::@11 -- vbuz1_le_0_then_la1 cmp #0 - beq b9 - // main::@11 - // bucket = BUCKETS[bucket_idx] - // [30] (byte~) main::$17 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [31] (word*) main::bucket1#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$17) -- pwuz1=pptc1_derefidx_vbuaa - tay - lda BUCKETS,y - sta bucket1 - lda BUCKETS+1,y - sta bucket1+1 - // [32] phi from main::@11 to main::@10 [phi:main::@11->main::@10] - // [32] phi (byte) main::i1#2 = (byte) 0 [phi:main::@11->main::@10#0] -- vbuxx=vbuc1 - ldx #0 - // [32] phi from main::@10 to main::@10 [phi:main::@10->main::@10] - // [32] phi (byte) main::i1#2 = (byte) main::i1#1 [phi:main::@10->main::@10#0] -- register_copy + beq b11 // main::@10 - b10: + // (word)bucket_idx + // [39] (word~) main::$16 ← (word)(byte) main::bucket_idx#1 -- vwuz1=_word_vbuz2 + tya + sta _16 + lda #0 + sta _16+1 + // bucket = BUCKETS[(word)bucket_idx] + // [40] (word~) main::$21 ← (word~) main::$16 << (byte) 1 -- vwuz1=vwuz1_rol_1 + asl _21 + rol _21+1 + // [41] (word**~) main::$24 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) main::$21 -- pptz1=pptc1_plus_vwuz1 + clc + lda _24 + adc #BUCKETS + sta _24+1 + // [42] (word*) main::bucket1#0 ← *((word**~) main::$24) -- pwuz1=_deref_pptz1 + ldy #0 + lda (bucket1),y + pha + iny + lda (bucket1),y + sta bucket1+1 + pla + sta bucket1 + // [43] phi from main::@10 to main::@12 [phi:main::@10->main::@12] + // [43] phi (byte) main::i2#2 = (byte) 0 [phi:main::@10->main::@12#0] -- vbuxx=vbuc1 + ldx #0 + // [43] phi from main::@12 to main::@12 [phi:main::@12->main::@12] + // [43] phi (byte) main::i2#2 = (byte) main::i2#1 [phi:main::@12->main::@12#0] -- register_copy + // main::@12 + b12: // SCREEN_FILL+bucket[i] - // [33] (byte~) main::$18 ← (byte) main::i1#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [44] (byte~) main::$22 ← (byte) main::i2#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // sc = SCREEN_FILL+bucket[i] - // [34] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$18) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa + // [45] (byte*) main::sc1#0 ← (const byte*) SCREEN_FILL#0 + *((word*) main::bucket1#0 + (byte~) main::$22) -- pbuz1=pbuc1_plus_pwuz2_derefidx_vbuaa tay clc lda #main::@1] - // [10] phi (byte) main::bucket_idx#11 = (byte) main::bucket_idx#6 [phi:main::@9->main::@1#0] -- register_copy - jmp b2 + // [20] phi from main::@11 to main::@3 [phi:main::@11->main::@3] + // [20] phi (byte) main::bucket_idx#9 = (byte) main::bucket_idx#1 [phi:main::@11->main::@3#0] -- register_copy + jmp b4 } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. init_buckets: { - .label _5 = $d - .label _9 = $39 - .label dist = 3 - .label i1 = 5 - .label bucket = $37 - .label dist_3 = 7 - .label i4 = 9 - .label dist_5 = 7 - // [40] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] - // [40] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 + .label _5 = $17 + .label _9 = $44 + .label _10 = $46 + .label _12 = $42 + .label _13 = $44 + .label dist = $b + .label i1 = $d + .label i2 = $f + .label bucket = $44 + .label dist_3 = $11 + .label i4 = $13 + .label dist_5 = $11 + .label _15 = $17 + .label _16 = $42 + .label _17 = $44 + // [51] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + // [51] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 ldx #0 // Init bucket sizes to 0 - // [40] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] - // [40] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [51] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [51] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy // init_buckets::@1 b1: // BUCKET_SIZES[i]=0 - // [41] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [52] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta BUCKET_SIZES,x // for(byte i:0..NUM_BUCKETS-1) - // [42] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx + // [53] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx inx - // [43] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_BUCKETS-1+1 + // [54] if((byte) init_buckets::i#1!=(byte) 0) goto init_buckets::@1 -- vbuxx_neq_0_then_la1 + cpx #0 bne b1 - // [44] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] - // [44] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 + // [55] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] + // [55] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 sta i1 sta i1+1 - // [44] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 - lda #init_buckets::@2#1] -- pbuz1=pbuc1 + lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist+1 - // [44] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] - // [44] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy - // [44] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy + // [55] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] + // [55] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy + // [55] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@2->init_buckets::@2#1] -- register_copy // init_buckets::@2 b2: // BUCKET_SIZES[*dist]++; - // [45] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 + // [56] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuc1_derefidx__deref_pbuz1=_inc_pbuc1_derefidx__deref_pbuz1 ldy #0 lda (dist),y tax inc BUCKET_SIZES,x // dist++; - // [46] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [57] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc dist bne !+ inc dist+1 !: // for( word i:0..999) - // [47] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [58] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [48] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 + // [59] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>$3e8 bne b2 lda i1 cmp #<$3e8 bne b2 - // [49] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] - // [49] phi (byte) init_buckets::i2#2 = (byte) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vbuxx=vbuc1 - ldx #0 + // [60] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [60] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + lda #<0 + sta i2 + sta i2+1 // Allocate the buckets - // [49] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] - // [49] phi (byte) init_buckets::i2#2 = (byte) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy + // [60] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] + // [60] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@6->init_buckets::@3#0] -- register_copy // init_buckets::@3 b3: // malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [50] (word) malloc::size#1 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i2#2) << (byte) 1 -- vwuz1=pbuc1_derefidx_vbuxx_rol_1 - lda BUCKET_SIZES,x + // [61] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 + lda i2 + clc + adc #BUCKET_SIZES + sta _15+1 + // [62] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 + ldy #0 + lda (malloc.size),y asl sta malloc.size - lda #0 + tya rol sta malloc.size+1 - // [51] call malloc - // [73] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] - // [73] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy - // [73] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy + // [63] call malloc + // [88] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] + // [88] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy + // [88] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy jsr malloc // init_buckets::@6 // malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [52] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + // [64] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 // BUCKETS[i] = malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [53] (byte~) init_buckets::$11 ← (byte) init_buckets::i2#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 - txa + // [65] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + lda i2 asl - // [54] *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$11) ← (word*)(void*~) init_buckets::$5 -- pptc1_derefidx_vbuaa=pwuz1 - tay + sta _12 + lda i2+1 + rol + sta _12+1 + // [66] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz1 + clc + lda _16 + adc #BUCKETS + sta _16+1 + // [67] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 + ldy #0 lda _5 - sta BUCKETS,y + sta (_16),y + iny lda _5+1 - sta BUCKETS+1,y - // for( byte i:0..NUM_BUCKETS-1) - // [55] (byte) init_buckets::i2#1 ← ++ (byte) init_buckets::i2#2 -- vbuxx=_inc_vbuxx - inx - // [56] if((byte) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_BUCKETS-1+1 + sta (_16),y + // for( word i:0..NUM_BUCKETS-1) + // [68] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + inc i2 + bne !+ + inc i2+1 + !: + // [69] if((word) init_buckets::i2#1!=(const word) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + lda i2+1 + cmp #>NUM_BUCKETS-1+1 bne b3 - // [57] phi from init_buckets::@6 to init_buckets::@4 [phi:init_buckets::@6->init_buckets::@4] - // [57] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 + lda i2 + cmp #init_buckets::@4] + // [70] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 ldx #0 // Iterate all distances and fill the buckets with indices into the screens - // [57] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] - // [57] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy + // [70] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] + // [70] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@4->init_buckets::@4#0] -- register_copy // init_buckets::@4 b4: // BUCKET_IDX[i]=0 - // [58] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [71] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta BUCKET_IDX,x // for(byte i:0..NUM_BUCKETS-1) - // [59] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx + // [72] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx inx - // [60] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuxx_neq_vbuc1_then_la1 - cpx #NUM_BUCKETS-1+1 + // [73] if((byte) init_buckets::i3#1!=(byte) 0) goto init_buckets::@4 -- vbuxx_neq_0_then_la1 + cpx #0 bne b4 - // [61] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] - // [61] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 + // [74] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] + // [74] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 sta i4 sta i4+1 - // [61] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 - lda #init_buckets::@5#1] -- pbuz1=pbuc1 + lda #SCREEN_DIST + lda #>SCREEN_MIX sta dist_5+1 - // [61] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] - // [61] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy - // [61] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy + // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [74] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + // [74] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@5->init_buckets::@5#1] -- register_copy // init_buckets::@5 b5: // distance = *dist - // [62] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 + // [75] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 ldy #0 lda (dist_5),y tax - // bucket = BUCKETS[distance] - // [63] (byte~) init_buckets::$12 ← (byte) init_buckets::distance#0 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // (word)distance + // [76] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuxx txa - asl - // [64] (word*) init_buckets::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) init_buckets::$12) -- pwuz1=pptc1_derefidx_vbuaa - tay - lda BUCKETS,y - sta bucket - lda BUCKETS+1,y + sta _9 + tya + sta _9+1 + // bucket = BUCKETS[(word)distance] + // [77] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 + asl _13 + rol _13+1 + // [78] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz1 + clc + lda _17 + adc #BUCKETS + sta _17+1 + // [79] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 + lda (bucket),y + pha + iny + lda (bucket),y sta bucket+1 - // dist-SCREEN_DIST - // [65] (word~) init_buckets::$9 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 + pla + sta bucket + // dist-screen + // [80] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_MIX#0 -- vwuz1=pbuz2_minus_pbuc1 lda dist_5 sec - sbc #SCREEN_DIST - sta _9+1 - // bucket[BUCKET_IDX[distance]] = dist-SCREEN_DIST - // [66] (byte~) init_buckets::$13 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_rol_1 + sbc #>SCREEN_MIX + sta _10+1 + // bucket[BUCKET_IDX[distance]] = dist-screen + // [81] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuc1_derefidx_vbuxx_rol_1 lda BUCKET_IDX,x asl - // [67] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$13) ← (word~) init_buckets::$9 -- pwuz1_derefidx_vbuaa=vwuz2 + // [82] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 tay - lda _9 + lda _10 sta (bucket),y iny - lda _9+1 + lda _10+1 sta (bucket),y // BUCKET_IDX[distance]++; - // [68] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + // [83] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx inc BUCKET_IDX,x // *dist++; - // [69] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [84] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc dist_3 bne !+ inc dist_3+1 !: // for(word i:0..999) - // [70] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [85] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc i4 bne !+ inc i4+1 !: - // [71] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 + // [86] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 lda i4+1 cmp #>$3e8 bne b5 @@ -8942,18 +9703,18 @@ init_buckets: { bne b5 // init_buckets::@return // } - // [72] return + // [87] return rts } // malloc // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. -// malloc(word zeropage($d) size) +// malloc(word zeropage($17) size) malloc: { - .label mem = $d - .label size = $d + .label mem = $17 + .label size = $17 // mem = heap_head-size - // [74] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 + // [89] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec sbc mem @@ -8962,95 +9723,95 @@ malloc: { sbc mem+1 sta mem+1 // heap_head = mem - // [75] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [90] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 sta heap_head+1 // malloc::@return // } - // [76] return + // [91] return rts } // init_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center init_angle_screen: { - .label _10 = $1a - .label xw = $3b - .label yw = $3d - .label angle_w = $1a - .label ang_w = $3f - .label x = $14 - .label xb = $15 - .label screen_topline = $12 - .label screen_bottomline = $10 - .label y = $f - // [78] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - // [78] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 + .label _10 = $24 + .label xw = $48 + .label yw = $4a + .label angle_w = $24 + .label ang_w = $4c + .label x = $1e + .label xb = $1f + .label screen_topline = $1c + .label screen_bottomline = $1a + .label y = $19 + // [93] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [93] phi (byte*) init_angle_screen::screen_topline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#0] -- pbuz1=pbuc1 lda #SCREEN_ANGLE+$28*$c sta screen_topline+1 - // [78] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 + // [93] phi (byte*) init_angle_screen::screen_bottomline#5 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c [phi:init_angle_screen->init_angle_screen::@1#1] -- pbuz1=pbuc1 lda #SCREEN_ANGLE+$28*$c sta screen_bottomline+1 - // [78] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [93] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y - // [78] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] - // [78] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy - // [78] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy - // [78] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy + // [93] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] + // [93] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#0] -- register_copy + // [93] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@3->init_angle_screen::@1#1] -- register_copy + // [93] phi (byte) init_angle_screen::y#4 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@3->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 b1: - // [79] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [79] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [94] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [94] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [79] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [94] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta x - // [79] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] - // [79] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy - // [79] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy + // [94] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] + // [94] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@4->init_angle_screen::@2#0] -- register_copy + // [94] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@4->init_angle_screen::@2#1] -- register_copy // init_angle_screen::@2 b2: // x*2 - // [80] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [95] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [81] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa + // [96] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [82] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [97] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta xw+1 sty xw // y*2 - // [83] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [98] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [84] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [99] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta yw+1 sty yw // atan2_16(xw, yw) - // [85] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [86] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [87] call atan2_16 + // [100] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [101] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [102] call atan2_16 jsr atan2_16 - // [88] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [103] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@4 // angle_w = atan2_16(xw, yw) - // [89] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [104] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [90] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [105] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _10 @@ -9059,50 +9820,50 @@ init_angle_screen: { inc _10+1 !: // ang_w = >(angle_w+0x0080) - // [91] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 + // [106] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 lda _10+1 sta ang_w // screen_bottomline[xb] = ang_w - // [92] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [107] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy xb sta (screen_bottomline),y // -ang_w - // [93] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [108] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [94] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa + // [109] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [95] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [110] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w // screen_topline[x] = 0x80+ang_w - // [96] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [111] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // 0x80-ang_w - // [97] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [112] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w // screen_bottomline[x] = 0x80-ang_w - // [98] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [99] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [114] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [100] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [115] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [101] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 + // [116] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$13+1 bcc b2 // init_angle_screen::@3 // screen_topline -= 40 - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [117] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda screen_topline sec sbc #<$28 @@ -9111,7 +9872,7 @@ init_angle_screen: { sbc #>$28 sta screen_topline+1 // screen_bottomline += 40 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [118] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen_bottomline @@ -9120,41 +9881,41 @@ init_angle_screen: { inc screen_bottomline+1 !: // for(byte y: 0..12) - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 + // [119] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 inc y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [120] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp y bne b1 // init_angle_screen::@return // } - // [106] return + // [121] return rts } // atan2_16 // Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y) // Finding the angle requires a binary search using CORDIC_ITERATIONS_16 // Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI) -// atan2_16(signed word zeropage($3b) x, signed word zeropage($3d) y) +// atan2_16(signed word zeropage($48) x, signed word zeropage($4a) y) atan2_16: { - .label _2 = $16 - .label _7 = $18 - .label yi = $16 - .label xi = $18 - .label angle = $1a - .label xd = $1e - .label yd = $1c - .label return = $1a - .label x = $3b - .label y = $3d + .label _2 = $20 + .label _7 = $22 + .label yi = $20 + .label xi = $22 + .label angle = $24 + .label xd = $28 + .label yd = $26 + .label return = $24 + .label x = $48 + .label y = $4a // (y>=0)?y:-y - // [107] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [122] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda y+1 bmi !b1+ jmp b1 !b1: // atan2_16::@2 - // [108] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [123] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -9162,18 +9923,18 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [109] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] - // [109] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [124] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [124] phi (signed word) atan2_16::yi#0 = (signed word~) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy // atan2_16::@3 b3: // (x>=0)?x:-x - // [110] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [125] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda x+1 bmi !b4+ jmp b4 !b4: // atan2_16::@5 - // [111] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [126] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -9181,42 +9942,42 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [112] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] - // [112] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [127] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [127] phi (signed word) atan2_16::xi#0 = (signed word~) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy // atan2_16::@6 b6: - // [113] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [113] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [128] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [128] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #0 sta angle sta angle+1 - // [113] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [128] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax - // [113] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [113] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [128] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [128] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy // atan2_16::@10 b10: // if(yi==0) - // [114] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [129] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda yi+1 bne b11 lda yi bne b11 - // [115] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] - // [115] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [130] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [130] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy // atan2_16::@12 b12: // angle /=2 - // [116] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [131] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr angle+1 ror angle // if(x<0) - // [117] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [132] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda x+1 bpl b7 // atan2_16::@21 // angle = 0x8000-angle - // [118] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [133] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -9224,17 +9985,17 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [119] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] - // [119] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [134] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [134] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy // atan2_16::@7 b7: // if(y<0) - // [120] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [135] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda y+1 bpl b8 // atan2_16::@9 // angle = -angle - // [121] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [136] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -9242,69 +10003,69 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [122] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] - // [122] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [137] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [137] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy // atan2_16::@8 b8: // atan2_16::@return // } - // [123] return + // [138] return rts // atan2_16::@11 b11: - // [124] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [139] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [125] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [140] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [126] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [141] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [127] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] - // [127] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [127] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [127] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [142] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [142] phi (signed word) atan2_16::yd#3 = (signed word~) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [142] phi (signed word) atan2_16::xd#3 = (signed word~) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [142] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy // atan2_16::@13 b13: // while(shift>=2) - // [128] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [143] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs b14 // atan2_16::@15 // if(shift) - // [129] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [144] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq b17 // atan2_16::@16 // xd >>= 1 - // [130] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [145] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda xd+1 cmp #$80 ror xd+1 ror xd // yd >>= 1 - // [131] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [146] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda yd+1 cmp #$80 ror yd+1 ror yd - // [132] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] - // [132] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [132] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [147] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [147] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [147] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy // atan2_16::@17 b17: // if(yi>=0) - // [133] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [148] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda yi+1 bpl b18 // atan2_16::@20 // xi -= yd - // [134] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [149] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda xi sec sbc yd @@ -9313,7 +10074,7 @@ atan2_16: { sbc yd+1 sta xi+1 // yi += xd - // [135] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [150] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda yi clc adc xd @@ -9322,10 +10083,10 @@ atan2_16: { adc xd+1 sta yi+1 // angle -= CORDIC_ATAN2_ANGLES_16[i] - // [136] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [151] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [137] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [152] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda angle @@ -9334,30 +10095,30 @@ atan2_16: { lda angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle+1 - // [138] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] - // [138] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [138] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [138] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [153] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [153] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [153] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [153] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy // atan2_16::@19 b19: // for( byte i: 0..CORDIC_ITERATIONS_16-1) - // [139] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [154] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [140] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [155] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 bne !b12+ jmp b12 !b12: - // [113] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] - // [113] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [113] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [113] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [113] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [128] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [128] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [128] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [128] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [128] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp b10 // atan2_16::@18 b18: // xi += yd - // [141] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [156] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda xi clc adc yd @@ -9366,7 +10127,7 @@ atan2_16: { adc yd+1 sta xi+1 // yi -= xd - // [142] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [157] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda yi sec sbc xd @@ -9375,10 +10136,10 @@ atan2_16: { sbc xd+1 sta yi+1 // angle += CORDIC_ATAN2_ANGLES_16[i] - // [143] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [158] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [144] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [159] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda angle @@ -9391,7 +10152,7 @@ atan2_16: { // atan2_16::@14 b14: // xd >>= 2 - // [145] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [160] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda xd+1 cmp #$80 ror xd+1 @@ -9401,7 +10162,7 @@ atan2_16: { ror xd+1 ror xd // yd >>= 2 - // [146] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [161] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda yd+1 cmp #$80 ror yd+1 @@ -9411,13 +10172,13 @@ atan2_16: { ror yd+1 ror yd // shift -=2 - // [147] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [162] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp b13 // atan2_16::@4 b4: - // [148] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [163] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -9425,7 +10186,7 @@ atan2_16: { jmp b6 // atan2_16::@1 b1: - // [149] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [164] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -9437,112 +10198,112 @@ atan2_16: { // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center init_dist_screen: { - .label yds = $40 - .label xds = $42 - .label ds = $42 - .label x = $25 - .label xb = $26 - .label screen_topline = $21 - .label screen_bottomline = $23 - .label y = $20 + .label yds = $4d + .label xds = $4f + .label ds = $4f + .label x = $2f + .label xb = $30 + .label screen_topline = $2b + .label screen_bottomline = $2d + .label y = $2a // init_squares() - // [151] call init_squares - // [221] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [166] call init_squares + // [236] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares - // [152] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] - // [152] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 + // [167] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] + // [167] phi (byte*) init_dist_screen::screen_bottomline#10 = (const byte[$3e8]) SCREEN_DIST#0+(word)(number) $28*(number) $18 [phi:init_dist_screen->init_dist_screen::@1#0] -- pbuz1=pbuc1 lda #SCREEN_DIST+$28*$18 sta screen_bottomline+1 - // [152] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 + // [167] phi (byte*) init_dist_screen::screen_topline#10 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_dist_screen->init_dist_screen::@1#1] -- pbuz1=pbuc1 lda #SCREEN_DIST sta screen_topline+1 - // [152] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [167] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y - // [152] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] - // [152] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy - // [152] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy - // [152] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy + // [167] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] + // [167] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#0] -- register_copy + // [167] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@9->init_dist_screen::@1#1] -- register_copy + // [167] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@9->init_dist_screen::@1#2] -- register_copy // init_dist_screen::@1 b1: // y2 = y*2 - // [153] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [168] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (y2>=24)?(y2-24):(24-y2) - // [154] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [169] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 cmp #$18 bcs b2 // init_dist_screen::@3 - // [155] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [170] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [156] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] - // [156] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [171] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [171] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy // init_dist_screen::@4 b4: // sqr(yd) - // [157] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [158] call sqr - // [217] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] - // [217] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [172] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [173] call sqr + // [232] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [232] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) - // [159] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [174] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_2 lda sqr.return+1 sta sqr.return_2+1 // init_dist_screen::@10 // yds = sqr(yd) - // [160] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [161] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] - // [161] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [175] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [176] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] + // [176] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [161] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [176] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta x - // [161] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - // [161] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy - // [161] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy + // [176] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] + // [176] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- register_copy + // [176] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- register_copy // init_dist_screen::@5 b5: // x2 = x*2 - // [162] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [177] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // (x2>=39)?(x2-39):(39-x2) - // [163] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 + // [178] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs b6 // init_dist_screen::@7 - // [164] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [179] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [165] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8] - // [165] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy + // [180] phi from init_dist_screen::@6 init_dist_screen::@7 to init_dist_screen::@8 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8] + // [180] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$15 [phi:init_dist_screen::@6/init_dist_screen::@7->init_dist_screen::@8#0] -- register_copy // init_dist_screen::@8 b8: // sqr(xd) - // [166] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [167] call sqr - // [217] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] - // [217] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy + // [181] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [182] call sqr + // [232] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] + // [232] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [168] (word) sqr::return#3 ← (word) sqr::return#0 + // [183] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@11 // xds = sqr(xd) - // [169] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [184] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [170] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [185] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda ds clc adc yds @@ -9551,39 +10312,39 @@ init_dist_screen: { adc yds+1 sta ds+1 // sqrt(ds) - // [171] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [172] call sqrt + // [186] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [187] call sqrt jsr sqrt - // [173] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [188] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@12 // d = sqrt(ds) - // [174] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [189] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [175] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [190] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy x sta (screen_topline),y // screen_bottomline[x] = d - // [176] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [191] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // screen_topline[xb] = d - // [177] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [192] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy xb sta (screen_topline),y // screen_bottomline[xb] = d - // [178] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [193] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [179] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [194] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [180] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [195] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [181] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 + // [196] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 lda x cmp #$13+1 bcc b5 // init_dist_screen::@9 // screen_topline += 40 - // [182] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [197] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc screen_topline @@ -9592,7 +10353,7 @@ init_dist_screen: { inc screen_topline+1 !: // screen_bottomline -= 40 - // [183] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [198] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda screen_bottomline sec sbc #<$28 @@ -9601,27 +10362,27 @@ init_dist_screen: { sbc #>$28 sta screen_bottomline+1 // for(byte y: 0..12) - // [184] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [199] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc y - // [185] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [200] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp y bne b1 // init_dist_screen::@return // } - // [186] return + // [201] return rts // init_dist_screen::@6 b6: // (x2>=39)?(x2-39):(39-x2) - // [187] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [202] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$27 jmp b8 // init_dist_screen::@2 b2: // (y2>=24)?(y2-24):(24-y2) - // [188] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [203] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp b4 @@ -9630,29 +10391,29 @@ init_dist_screen: { // Find the (integer) square root of a word value // If the square is not an integer then it returns the largest integer N where N*N <= val // Uses a table of squares that must be initialized by calling init_squares() -// sqrt(word zeropage($42) val) +// sqrt(word zeropage($4f) val) sqrt: { - .label _1 = $27 - .label _3 = $27 - .label found = $27 - .label val = $42 + .label _1 = $31 + .label _3 = $31 + .label found = $31 + .label val = $4f // bsearch16u(val, SQUARES, NUM_SQUARES) - // [189] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [190] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [204] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [205] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta bsearch16u.items lda SQUARES+1 sta bsearch16u.items+1 - // [191] call bsearch16u - // [198] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [206] call bsearch16u + // [213] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u // bsearch16u(val, SQUARES, NUM_SQUARES) - // [192] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [207] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 // sqrt::@1 // found = bsearch16u(val, SQUARES, NUM_SQUARES) - // [193] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [208] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 // found-SQUARES - // [194] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [209] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda _3 sec sbc SQUARES @@ -9660,15 +10421,15 @@ sqrt: { lda _3+1 sbc SQUARES+1 sta _3+1 - // [195] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [210] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr _1+1 ror _1 // (byte)(found-SQUARES) - // [196] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [211] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda _1 // sqrt::@return // } - // [197] return + // [212] return rts } // bsearch16u @@ -9677,27 +10438,27 @@ sqrt: { // - items - Pointer to the start of the array to search in // - num - The number of items in the array // Returns pointer to an entry in the array that matches the search key -// bsearch16u(word zeropage($42) key, word* zeropage($27) items, byte register(X) num) +// bsearch16u(word zeropage($4f) key, word* zeropage($31) items, byte register(X) num) bsearch16u: { - .label _2 = $27 - .label pivot = $44 - .label result = $46 - .label return = $27 - .label items = $27 - .label key = $42 - // [199] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [199] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [199] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label _2 = $31 + .label pivot = $51 + .label result = $53 + .label return = $31 + .label items = $31 + .label key = $4f + // [214] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + // [214] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [214] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES // bsearch16u::@3 b3: // while (num > 0) - // [200] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [215] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 cpx #0 bne b4 // bsearch16u::@5 // *items<=key?items:items-1 - // [201] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [216] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp key+1 @@ -9709,7 +10470,7 @@ bsearch16u: { !: bcc b2 // bsearch16u::@1 - // [202] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [217] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -9717,26 +10478,26 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [203] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [203] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [218] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [218] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy // bsearch16u::@2 b2: - // [204] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [204] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [219] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [219] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy // bsearch16u::@return // } - // [205] return + // [220] return rts // bsearch16u::@4 b4: // num >> 1 - // [206] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [221] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [207] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [222] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [208] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [223] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc adc items sta pivot @@ -9744,7 +10505,7 @@ bsearch16u: { adc items+1 sta pivot+1 // result = (signed word)key-(signed word)*pivot - // [209] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [224] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda key ldy #0 @@ -9755,12 +10516,12 @@ bsearch16u: { sbc (pivot),y sta result+1 // if (result == 0) - // [210] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [225] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 bne b6 lda result bne b6 // bsearch16u::@8 - // [211] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [226] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda pivot sta return lda pivot+1 @@ -9769,7 +10530,7 @@ bsearch16u: { // bsearch16u::@6 b6: // if (result > 0) - // [212] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [227] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda result+1 bmi b7 bne !+ @@ -9778,7 +10539,7 @@ bsearch16u: { !: // bsearch16u::@9 // items = pivot+1 - // [213] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [228] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 lda #1*SIZEOF_WORD clc adc pivot @@ -9787,21 +10548,21 @@ bsearch16u: { adc pivot+1 sta items+1 // num--; - // [214] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [229] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex - // [215] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [215] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [215] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [230] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [230] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [230] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 b7: // num >>= 1 - // [216] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [231] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [199] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [199] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [199] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [214] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [214] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [214] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp b3 } // sqr @@ -9809,12 +10570,12 @@ bsearch16u: { // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $42 - .label return_2 = $40 + .label return = $4f + .label return_2 = $4d // return SQUARES[val]; - // [218] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [233] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [219] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [234] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -9823,24 +10584,24 @@ sqr: { sta return+1 // sqr::@return // } - // [220] return + // [235] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label squares = $2b - .label sqr = $29 + .label squares = $35 + .label sqr = $33 // malloc(NUM_SQUARES*sizeof(word)) - // [222] call malloc - // [73] phi from init_squares to malloc [phi:init_squares->malloc] - // [73] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [237] call malloc + // [88] phi from init_squares to malloc [phi:init_squares->malloc] + // [88] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta malloc.size lda #0 sta malloc.size+1 - // [73] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 + // [88] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -9848,29 +10609,29 @@ init_squares: { jsr malloc // init_squares::@2 // malloc(NUM_SQUARES*sizeof(word)) - // [223] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [238] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 // squares = SQUARES - // [224] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [239] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [225] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] - // [225] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [240] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [240] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [225] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [225] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [240] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [240] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 txa sta sqr sta sqr+1 - // [225] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] - // [225] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [225] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [225] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [240] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [240] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [240] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [240] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy // init_squares::@1 b1: // *squares++ = sqr - // [226] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [241] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y @@ -9878,7 +10639,7 @@ init_squares: { lda sqr+1 sta (squares),y // *squares++ = sqr; - // [227] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [242] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -9887,15 +10648,15 @@ init_squares: { inc squares+1 !: // i*2 - // [228] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [243] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 - // [229] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [244] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 - // [230] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [245] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr @@ -9903,14 +10664,14 @@ init_squares: { inc sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) - // [231] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [246] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [232] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [247] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne b1 // init_squares::@return // } - // [233] return + // [248] return rts } // File Data @@ -9924,6 +10685,9 @@ CORDIC_ATAN2_ANGLES_16: // = malloc(1000); // Screen containing angle to center SCREEN_ANGLE: .fill $3e8, 0 + // = malloc(1000); + // Screen containing angle to center + SCREEN_MIX: .fill $3e8, 0 // Array containing the bucket size for each of the distance buckets BUCKET_SIZES: .fill NUM_BUCKETS, 0 // Buckets containing screen indices for each distance from the center. diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym index 05669a0ab..4034c7b41 100644 --- a/src/test/ref/screen-show-spiral-buckets.sym +++ b/src/test/ref/screen-show-spiral-buckets.sym @@ -17,8 +17,8 @@ (const byte) CORDIC_ITERATIONS_16#0 CORDIC_ITERATIONS_16 = (byte) $f (byte*) HEAP_TOP (const byte*) HEAP_TOP#0 HEAP_TOP = (byte*) 40960 -(byte) NUM_BUCKETS -(const byte) NUM_BUCKETS#0 NUM_BUCKETS = (byte) $30 +(word) NUM_BUCKETS +(const word) NUM_BUCKETS#0 NUM_BUCKETS = (word) $100 (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (byte*) RASTER @@ -29,14 +29,16 @@ (const byte[$3e8]) SCREEN_DIST#0 SCREEN_DIST = { fill( $3e8, 0) } (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 +(byte[$3e8]) SCREEN_MIX +(const byte[$3e8]) SCREEN_MIX#0 SCREEN_MIX = { fill( $3e8, 0) } (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:13 0.03278688524590164 +(void*) SQUARES#1 SQUARES zp ZP_WORD:23 0.03278688524590164 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) -(signed word~) atan2_16::$2 $2 zp ZP_WORD:22 4.0 +(signed word~) atan2_16::$2 $2 zp ZP_WORD:32 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$24 reg byte a 2002.0 -(signed word~) atan2_16::$7 $7 zp ZP_WORD:24 4.0 +(signed word~) atan2_16::$7 $7 zp ZP_WORD:34 4.0 (label) atan2_16::@1 (label) atan2_16::@10 (label) atan2_16::@11 @@ -60,58 +62,58 @@ (label) atan2_16::@9 (label) atan2_16::@return (word) atan2_16::angle -(word) atan2_16::angle#1 angle zp ZP_WORD:26 3.0 -(word) atan2_16::angle#11 angle zp ZP_WORD:26 4.0 -(word) atan2_16::angle#12 angle zp ZP_WORD:26 190.66666666666666 -(word) atan2_16::angle#13 angle zp ZP_WORD:26 1334.6666666666667 -(word) atan2_16::angle#2 angle zp ZP_WORD:26 2002.0 -(word) atan2_16::angle#3 angle zp ZP_WORD:26 2002.0 -(word) atan2_16::angle#4 angle zp ZP_WORD:26 4.0 -(word) atan2_16::angle#5 angle zp ZP_WORD:26 4.0 -(word) atan2_16::angle#6 angle zp ZP_WORD:26 2004.0 +(word) atan2_16::angle#1 angle zp ZP_WORD:36 3.0 +(word) atan2_16::angle#11 angle zp ZP_WORD:36 4.0 +(word) atan2_16::angle#12 angle zp ZP_WORD:36 190.66666666666666 +(word) atan2_16::angle#13 angle zp ZP_WORD:36 1334.6666666666667 +(word) atan2_16::angle#2 angle zp ZP_WORD:36 2002.0 +(word) atan2_16::angle#3 angle zp ZP_WORD:36 2002.0 +(word) atan2_16::angle#4 angle zp ZP_WORD:36 4.0 +(word) atan2_16::angle#5 angle zp ZP_WORD:36 4.0 +(word) atan2_16::angle#6 angle zp ZP_WORD:36 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 reg byte x 1501.5 (byte) atan2_16::i#2 reg byte x 208.54166666666669 (word) atan2_16::return -(word) atan2_16::return#0 return zp ZP_WORD:26 34.99999999999999 -(word) atan2_16::return#2 return zp ZP_WORD:26 202.0 +(word) atan2_16::return#0 return zp ZP_WORD:36 34.99999999999999 +(word) atan2_16::return#2 return zp ZP_WORD:36 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 reg byte y 20002.0 (byte) atan2_16::shift#2 reg byte y 8001.25 (byte~) atan2_16::shift#5 reg byte y 667.3333333333334 (signed word) atan2_16::x -(signed word) atan2_16::x#0 x zp ZP_WORD:59 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:72 2.8684210526315796 (signed word) atan2_16::xd -(signed word) atan2_16::xd#1 xd zp ZP_WORD:30 6667.333333333333 -(signed word~) atan2_16::xd#10 xd zp ZP_WORD:30 1001.0 -(signed word) atan2_16::xd#2 xd zp ZP_WORD:30 1001.0 -(signed word) atan2_16::xd#3 xd zp ZP_WORD:30 7668.333333333332 -(signed word) atan2_16::xd#5 xd zp ZP_WORD:30 1001.0 +(signed word) atan2_16::xd#1 xd zp ZP_WORD:40 6667.333333333333 +(signed word~) atan2_16::xd#10 xd zp ZP_WORD:40 1001.0 +(signed word) atan2_16::xd#2 xd zp ZP_WORD:40 1001.0 +(signed word) atan2_16::xd#3 xd zp ZP_WORD:40 7668.333333333332 +(signed word) atan2_16::xd#5 xd zp ZP_WORD:40 1001.0 (signed word) atan2_16::xi -(signed word) atan2_16::xi#0 xi zp ZP_WORD:24 6.0 -(signed word) atan2_16::xi#1 xi zp ZP_WORD:24 500.5 -(signed word~) atan2_16::xi#13 xi zp ZP_WORD:24 4.0 -(signed word) atan2_16::xi#2 xi zp ZP_WORD:24 500.5 -(signed word) atan2_16::xi#3 xi zp ZP_WORD:24 267.0666666666667 -(signed word) atan2_16::xi#8 xi zp ZP_WORD:24 1001.0 +(signed word) atan2_16::xi#0 xi zp ZP_WORD:34 6.0 +(signed word) atan2_16::xi#1 xi zp ZP_WORD:34 500.5 +(signed word~) atan2_16::xi#13 xi zp ZP_WORD:34 4.0 +(signed word) atan2_16::xi#2 xi zp ZP_WORD:34 500.5 +(signed word) atan2_16::xi#3 xi zp ZP_WORD:34 267.0666666666667 +(signed word) atan2_16::xi#8 xi zp ZP_WORD:34 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:61 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:74 2.724999999999999 (signed word) atan2_16::yd -(signed word) atan2_16::yd#1 yd zp ZP_WORD:28 10001.0 -(signed word~) atan2_16::yd#10 yd zp ZP_WORD:28 2002.0 -(signed word) atan2_16::yd#2 yd zp ZP_WORD:28 2002.0 -(signed word) atan2_16::yd#3 yd zp ZP_WORD:28 4601.0 -(signed word) atan2_16::yd#5 yd zp ZP_WORD:28 2002.0 +(signed word) atan2_16::yd#1 yd zp ZP_WORD:38 10001.0 +(signed word~) atan2_16::yd#10 yd zp ZP_WORD:38 2002.0 +(signed word) atan2_16::yd#2 yd zp ZP_WORD:38 2002.0 +(signed word) atan2_16::yd#3 yd zp ZP_WORD:38 4601.0 +(signed word) atan2_16::yd#5 yd zp ZP_WORD:38 2002.0 (signed word) atan2_16::yi -(signed word) atan2_16::yi#0 yi zp ZP_WORD:22 1.2000000000000002 -(signed word) atan2_16::yi#1 yi zp ZP_WORD:22 667.3333333333334 -(signed word~) atan2_16::yi#16 yi zp ZP_WORD:22 4.0 -(signed word) atan2_16::yi#2 yi zp ZP_WORD:22 667.3333333333334 -(signed word) atan2_16::yi#3 yi zp ZP_WORD:22 353.4117647058823 -(signed word) atan2_16::yi#8 yi zp ZP_WORD:22 1001.0 +(signed word) atan2_16::yi#0 yi zp ZP_WORD:32 1.2000000000000002 +(signed word) atan2_16::yi#1 yi zp ZP_WORD:32 667.3333333333334 +(signed word~) atan2_16::yi#16 yi zp ZP_WORD:32 4.0 +(signed word) atan2_16::yi#2 yi zp ZP_WORD:32 667.3333333333334 +(signed word) atan2_16::yi#3 yi zp ZP_WORD:32 353.4117647058823 +(signed word) atan2_16::yi#8 yi zp ZP_WORD:32 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 reg byte a 2002.0 -(word*~) bsearch16u::$2 $2 zp ZP_WORD:39 4.0 +(word*~) bsearch16u::$2 $2 zp ZP_WORD:49 4.0 (byte~) bsearch16u::$6 reg byte a 2002.0 (label) bsearch16u::@1 (label) bsearch16u::@2 @@ -124,31 +126,31 @@ (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items -(word*) bsearch16u::items#0 items zp ZP_WORD:39 1001.0 -(word*) bsearch16u::items#1 items zp ZP_WORD:39 2.0 -(word*) bsearch16u::items#2 items zp ZP_WORD:39 334.5555555555556 -(word*) bsearch16u::items#8 items zp ZP_WORD:39 1501.5 +(word*) bsearch16u::items#0 items zp ZP_WORD:49 1001.0 +(word*) bsearch16u::items#1 items zp ZP_WORD:49 2.0 +(word*) bsearch16u::items#2 items zp ZP_WORD:49 334.5555555555556 +(word*) bsearch16u::items#8 items zp ZP_WORD:49 1501.5 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:66 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:79 0.26666666666666666 (byte) bsearch16u::num (byte) bsearch16u::num#0 reg byte x 2002.0 (byte) bsearch16u::num#1 reg byte x 2002.0 (byte) bsearch16u::num#3 reg byte x 556.1111111111111 (byte) bsearch16u::num#5 reg byte x 3003.0 (word*) bsearch16u::pivot -(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:68 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:81 501.0 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:70 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:83 1501.5 (word*) bsearch16u::return -(word*) bsearch16u::return#1 return zp ZP_WORD:39 2.0 -(word*) bsearch16u::return#2 return zp ZP_WORD:39 6.0 -(word*) bsearch16u::return#3 return zp ZP_WORD:39 4.0 -(word*~) bsearch16u::return#6 return zp ZP_WORD:39 4.0 +(word*) bsearch16u::return#1 return zp ZP_WORD:49 2.0 +(word*) bsearch16u::return#2 return zp ZP_WORD:49 6.0 +(word*) bsearch16u::return#3 return zp ZP_WORD:49 4.0 +(word*~) bsearch16u::return#6 return zp ZP_WORD:49 4.0 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:11 0.17567567567567569 -(byte*) heap_head#13 heap_head zp ZP_WORD:11 13.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:21 0.1511627906976744 +(byte*) heap_head#13 heap_head zp ZP_WORD:21 13.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) -(word~) init_angle_screen::$10 $10 zp ZP_WORD:26 202.0 +(word~) init_angle_screen::$10 $10 zp ZP_WORD:36 202.0 (byte~) init_angle_screen::$12 reg byte a 202.0 (byte~) init_angle_screen::$13 reg byte a 202.0 (byte~) init_angle_screen::$14 reg byte a 202.0 @@ -161,35 +163,39 @@ (label) init_angle_screen::@4 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w -(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:63 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:76 84.16666666666666 (word) init_angle_screen::angle_w -(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:26 202.0 +(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:36 202.0 (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen_bottomline -(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:16 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:16 8.959999999999999 +(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:26 7.333333333333333 +(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:26 8.959999999999999 (byte*) init_angle_screen::screen_topline -(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:18 5.5 -(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:18 9.333333333333334 +(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:28 5.5 +(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:28 9.333333333333334 (byte) init_angle_screen::x -(byte) init_angle_screen::x#1 x zp ZP_BYTE:20 101.0 -(byte) init_angle_screen::x#2 x zp ZP_BYTE:20 25.25 +(byte) init_angle_screen::x#1 x zp ZP_BYTE:30 101.0 +(byte) init_angle_screen::x#2 x zp ZP_BYTE:30 25.25 (byte) init_angle_screen::xb -(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:21 101.0 -(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:21 19.238095238095237 +(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:31 101.0 +(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:31 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:59 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:72 33.666666666666664 (byte) init_angle_screen::y -(byte) init_angle_screen::y#1 y zp ZP_BYTE:15 16.5 -(byte) init_angle_screen::y#4 y zp ZP_BYTE:15 4.730769230769231 +(byte) init_angle_screen::y#1 y zp ZP_BYTE:25 16.5 +(byte) init_angle_screen::y#4 y zp ZP_BYTE:25 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:61 50.5 -(void()) init_buckets() -(byte~) init_buckets::$11 reg byte a 22.0 -(byte~) init_buckets::$12 reg byte a 22.0 -(byte~) init_buckets::$13 reg byte a 22.0 -(void*~) init_buckets::$5 $5 zp ZP_WORD:13 5.5 -(word~) init_buckets::$9 $9 zp ZP_WORD:57 11.0 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:74 50.5 +(void()) init_buckets((byte*) init_buckets::screen) +(word~) init_buckets::$10 $10 zp ZP_WORD:70 11.0 +(word~) init_buckets::$12 $12 zp ZP_WORD:66 22.0 +(word~) init_buckets::$13 $13 zp ZP_WORD:68 22.0 +(byte~) init_buckets::$14 reg byte a 22.0 +(byte*~) init_buckets::$15 $15 zp ZP_WORD:23 22.0 +(word**~) init_buckets::$16 $16 zp ZP_WORD:66 22.0 +(word**~) init_buckets::$17 $17 zp ZP_WORD:68 22.0 +(void*~) init_buckets::$5 $5 zp ZP_WORD:23 3.6666666666666665 +(word~) init_buckets::$9 $9 zp ZP_WORD:68 22.0 (label) init_buckets::@1 (label) init_buckets::@2 (label) init_buckets::@3 @@ -198,29 +204,30 @@ (label) init_buckets::@6 (label) init_buckets::@return (word*) init_buckets::bucket -(word*) init_buckets::bucket#0 bucket zp ZP_WORD:55 7.333333333333333 +(word*) init_buckets::bucket#0 bucket zp ZP_WORD:68 7.333333333333333 (byte*) init_buckets::dist -(byte*) init_buckets::dist#1 dist zp ZP_WORD:3 7.333333333333333 -(byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:7 7.333333333333333 -(byte*) init_buckets::dist#4 dist zp ZP_WORD:3 22.0 -(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:7 5.5 +(byte*) init_buckets::dist#1 dist zp ZP_WORD:11 7.333333333333333 +(byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:17 7.333333333333333 +(byte*) init_buckets::dist#4 dist zp ZP_WORD:11 22.0 +(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:17 4.4 (byte) init_buckets::distance -(byte) init_buckets::distance#0 reg byte x 9.166666666666666 +(byte) init_buckets::distance#0 reg byte x 5.5 (byte) init_buckets::i (byte) init_buckets::i#1 reg byte x 16.5 (byte) init_buckets::i#2 reg byte x 16.5 (word) init_buckets::i1 -(word) init_buckets::i1#1 i1 zp ZP_WORD:5 16.5 -(word) init_buckets::i1#2 i1 zp ZP_WORD:5 7.333333333333333 -(byte) init_buckets::i2 -(byte) init_buckets::i2#1 reg byte x 16.5 -(byte) init_buckets::i2#2 reg byte x 7.333333333333333 +(word) init_buckets::i1#1 i1 zp ZP_WORD:13 16.5 +(word) init_buckets::i1#2 i1 zp ZP_WORD:13 7.333333333333333 +(word) init_buckets::i2 +(word) init_buckets::i2#1 i2 zp ZP_WORD:15 16.5 +(word) init_buckets::i2#2 i2 zp ZP_WORD:15 5.5 (byte) init_buckets::i3 (byte) init_buckets::i3#1 reg byte x 16.5 (byte) init_buckets::i3#2 reg byte x 16.5 (word) init_buckets::i4 -(word) init_buckets::i4#1 i4 zp ZP_WORD:9 16.5 -(word) init_buckets::i4#2 i4 zp ZP_WORD:9 2.4444444444444446 +(word) init_buckets::i4#1 i4 zp ZP_WORD:19 16.5 +(word) init_buckets::i4#2 i4 zp ZP_WORD:19 2.0 +(byte*) init_buckets::screen (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$13 reg byte a 202.0 (byte~) init_dist_screen::$15 reg byte a 202.0 @@ -242,35 +249,35 @@ (byte) init_dist_screen::d (byte) init_dist_screen::d#0 reg byte a 126.25 (word) init_dist_screen::ds -(word) init_dist_screen::ds#0 ds zp ZP_WORD:66 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:79 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen_bottomline -(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:35 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:35 6.787878787878788 +(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:45 7.333333333333333 +(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:45 6.787878787878788 (byte*) init_dist_screen::screen_topline -(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:33 5.5 -(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:33 7.0 +(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:43 5.5 +(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:43 7.0 (byte) init_dist_screen::x -(byte) init_dist_screen::x#1 x zp ZP_BYTE:37 101.0 -(byte) init_dist_screen::x#2 x zp ZP_BYTE:37 26.578947368421055 +(byte) init_dist_screen::x#1 x zp ZP_BYTE:47 101.0 +(byte) init_dist_screen::x#2 x zp ZP_BYTE:47 26.578947368421055 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 reg byte a 202.0 (byte) init_dist_screen::xb -(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:38 101.0 -(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:38 20.2 +(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:48 101.0 +(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:48 20.2 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 reg byte a 303.0 (word) init_dist_screen::xds -(word) init_dist_screen::xds#0 xds zp ZP_WORD:66 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:79 202.0 (byte) init_dist_screen::y -(byte) init_dist_screen::y#1 y zp ZP_BYTE:32 16.5 -(byte) init_dist_screen::y#10 y zp ZP_BYTE:32 0.9705882352941178 +(byte) init_dist_screen::y#1 y zp ZP_BYTE:42 16.5 +(byte) init_dist_screen::y#10 y zp ZP_BYTE:42 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 reg byte a 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 reg byte a 33.0 (word) init_dist_screen::yds -(word) init_dist_screen::yds#0 yds zp ZP_WORD:64 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:77 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -281,23 +288,29 @@ (byte) init_squares::i#1 reg byte x 16.5 (byte) init_squares::i#2 reg byte x 5.5 (word) init_squares::sqr -(word) init_squares::sqr#1 sqr zp ZP_WORD:41 7.333333333333333 -(word) init_squares::sqr#2 sqr zp ZP_WORD:41 6.6000000000000005 +(word) init_squares::sqr#1 sqr zp ZP_WORD:51 7.333333333333333 +(word) init_squares::sqr#2 sqr zp ZP_WORD:51 6.6000000000000005 (word*) init_squares::squares -(word*) init_squares::squares#0 squares zp ZP_WORD:43 4.0 -(word*) init_squares::squares#1 squares zp ZP_WORD:43 3.6666666666666665 -(word*) init_squares::squares#2 squares zp ZP_WORD:43 17.5 +(word*) init_squares::squares#0 squares zp ZP_WORD:53 4.0 +(word*) init_squares::squares#1 squares zp ZP_WORD:53 3.6666666666666665 +(word*) init_squares::squares#2 squares zp ZP_WORD:53 17.5 (void()) main() -(byte~) main::$15 reg byte a 22.0 -(byte~) main::$16 reg byte a 202.0 -(byte~) main::$17 reg byte a 22.0 -(byte~) main::$18 reg byte a 202.0 +(word~) main::$11 $11 zp ZP_WORD:57 22.0 +(word~) main::$16 $16 zp ZP_WORD:62 22.0 +(word~) main::$19 $19 zp ZP_WORD:57 22.0 +(byte~) main::$20 reg byte a 202.0 +(word~) main::$21 $21 zp ZP_WORD:62 22.0 +(byte~) main::$22 reg byte a 202.0 +(word**~) main::$23 $23 zp ZP_WORD:57 22.0 +(word**~) main::$24 $24 zp ZP_WORD:62 22.0 +(byte~) main::$3 $3 zp ZP_BYTE:55 11.0 +(byte~) main::$4 reg byte a 22.0 +(byte~) main::$5 reg byte a 22.0 (label) main::@1 (label) main::@10 (label) main::@11 (label) main::@12 (label) main::@13 -(label) main::@14 (label) main::@2 (label) main::@3 (label) main::@4 @@ -306,136 +319,151 @@ (label) main::@7 (label) main::@8 (label) main::@9 +(byte*) main::angle +(byte*) main::angle#1 angle zp ZP_WORD:4 7.333333333333333 +(byte*) main::angle#2 angle zp ZP_WORD:4 4.714285714285714 (word*) main::bucket -(word*) main::bucket#0 bucket zp ZP_WORD:46 16.0 +(word*) main::bucket#0 bucket zp ZP_WORD:57 16.0 (word*) main::bucket1 -(word*) main::bucket1#0 bucket1 zp ZP_WORD:51 16.0 +(word*) main::bucket1#0 bucket1 zp ZP_WORD:62 16.0 (byte) main::bucket_idx -(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0 -(byte) main::bucket_idx#11 bucket_idx zp ZP_BYTE:2 3.142857142857143 -(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 3.6666666666666665 +(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:10 2.357142857142857 +(byte) main::bucket_idx#9 bucket_idx zp ZP_BYTE:10 2.0625 (byte) main::bucket_size -(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:45 12.3 +(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:56 10.25 (byte) main::bucket_size1 -(byte) main::bucket_size1#0 bucket_size1 zp ZP_BYTE:50 12.3 -(byte) main::i -(byte) main::i#1 reg byte x 151.5 -(byte) main::i#2 reg byte x 75.75 +(byte) main::bucket_size1#0 bucket_size1 zp ZP_BYTE:61 10.25 +(byte*) main::dist +(byte*) main::dist#1 dist zp ZP_WORD:2 5.5 +(byte*) main::dist#2 dist zp ZP_WORD:2 5.5 +(word) main::i +(word) main::i#1 i zp ZP_WORD:8 16.5 +(word) main::i#2 i zp ZP_WORD:8 2.75 (byte) main::i1 (byte) main::i1#1 reg byte x 151.5 (byte) main::i1#2 reg byte x 75.75 +(byte) main::i2 +(byte) main::i2#1 reg byte x 151.5 +(byte) main::i2#2 reg byte x 75.75 +(byte*) main::mix +(byte*) main::mix#1 mix zp ZP_WORD:6 4.4 +(byte*) main::mix#2 mix zp ZP_WORD:6 6.6000000000000005 (byte*) main::sc -(byte*) main::sc#0 sc zp ZP_WORD:48 202.0 +(byte*) main::sc#0 sc zp ZP_WORD:59 202.0 (byte*) main::sc1 -(byte*) main::sc1#0 sc1 zp ZP_WORD:53 202.0 +(byte*) main::sc1#0 sc1 zp ZP_WORD:64 202.0 (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:13 0.8 +(byte*) malloc::mem#0 mem zp ZP_WORD:23 0.8 (void*) malloc::return (word) malloc::size -(word) malloc::size#1 size zp ZP_WORD:13 22.0 -(word) malloc::size#2 size zp ZP_WORD:13 13.0 +(word) malloc::size#1 size zp ZP_WORD:23 22.0 +(word) malloc::size#2 size zp ZP_WORD:23 13.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 reg byte a 4.0 (label) sqr::@return (word) sqr::return -(word) sqr::return#0 return zp ZP_WORD:66 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:64 22.0 -(word) sqr::return#3 return zp ZP_WORD:66 202.0 +(word) sqr::return#0 return zp ZP_WORD:79 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:77 22.0 +(word) sqr::return#3 return zp ZP_WORD:79 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 (byte) sqr::val#2 reg byte a 114.0 (byte()) sqrt((word) sqrt::val) -(word~) sqrt::$1 $1 zp ZP_WORD:39 2.0 -(word~) sqrt::$3 $3 zp ZP_WORD:39 4.0 +(word~) sqrt::$1 $1 zp ZP_WORD:49 2.0 +(word~) sqrt::$3 $3 zp ZP_WORD:49 4.0 (label) sqrt::@1 (label) sqrt::@return (word*) sqrt::found -(word*) sqrt::found#0 found zp ZP_WORD:39 4.0 +(word*) sqrt::found#0 found zp ZP_WORD:49 4.0 (byte) sqrt::return (byte) sqrt::return#0 reg byte a 34.33333333333333 (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:66 103.0 +(word) sqrt::val#0 val zp ZP_WORD:79 103.0 -zp ZP_BYTE:2 [ main::bucket_idx#11 main::bucket_idx#6 main::bucket_idx#1 ] -reg byte x [ main::i#2 main::i#1 ] +zp ZP_WORD:2 [ main::dist#2 main::dist#1 ] +zp ZP_WORD:4 [ main::angle#2 main::angle#1 ] +zp ZP_WORD:6 [ main::mix#2 main::mix#1 ] +zp ZP_WORD:8 [ main::i#2 main::i#1 ] +zp ZP_BYTE:10 [ main::bucket_idx#9 main::bucket_idx#1 ] reg byte x [ main::i1#2 main::i1#1 ] +reg byte x [ main::i2#2 main::i2#1 ] reg byte x [ init_buckets::i#2 init_buckets::i#1 ] -zp ZP_WORD:3 [ init_buckets::dist#4 init_buckets::dist#1 ] -zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ] -reg byte x [ init_buckets::i2#2 init_buckets::i2#1 ] +zp ZP_WORD:11 [ init_buckets::dist#4 init_buckets::dist#1 ] +zp ZP_WORD:13 [ init_buckets::i1#2 init_buckets::i1#1 ] +zp ZP_WORD:15 [ init_buckets::i2#2 init_buckets::i2#1 ] reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ] -zp ZP_WORD:7 [ init_buckets::dist#5 init_buckets::dist#3 ] -zp ZP_WORD:9 [ init_buckets::i4#2 init_buckets::i4#1 ] -zp ZP_WORD:11 [ heap_head#13 heap_head#1 ] -zp ZP_WORD:13 [ malloc::size#2 malloc::size#1 malloc::mem#0 init_buckets::$5 SQUARES#1 ] -zp ZP_BYTE:15 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -zp ZP_WORD:16 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -zp ZP_WORD:18 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -zp ZP_BYTE:20 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -zp ZP_BYTE:21 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -zp ZP_WORD:22 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] -zp ZP_WORD:24 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] +zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] +zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] +zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] +zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] +zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] +zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +zp ZP_WORD:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] +zp ZP_WORD:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] -zp ZP_WORD:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ] +zp ZP_WORD:36 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ] reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -zp ZP_WORD:28 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] -zp ZP_WORD:30 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] -zp ZP_BYTE:32 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -zp ZP_WORD:33 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -zp ZP_WORD:35 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +zp ZP_WORD:38 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] +zp ZP_WORD:40 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] +zp ZP_BYTE:42 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +zp ZP_WORD:43 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] +zp ZP_WORD:45 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -zp ZP_BYTE:37 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -zp ZP_BYTE:38 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +zp ZP_BYTE:47 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +zp ZP_BYTE:48 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] -zp ZP_WORD:39 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] +zp ZP_WORD:49 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] -zp ZP_WORD:41 [ init_squares::sqr#2 init_squares::sqr#1 ] -zp ZP_WORD:43 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] +zp ZP_WORD:51 [ init_squares::sqr#2 init_squares::sqr#1 ] +zp ZP_WORD:53 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] -zp ZP_BYTE:45 [ main::bucket_size#0 ] -reg byte a [ main::$15 ] -zp ZP_WORD:46 [ main::bucket#0 ] -reg byte a [ main::$16 ] -zp ZP_WORD:48 [ main::sc#0 ] -zp ZP_BYTE:50 [ main::bucket_size1#0 ] -reg byte a [ main::$17 ] -zp ZP_WORD:51 [ main::bucket1#0 ] -reg byte a [ main::$18 ] -zp ZP_WORD:53 [ main::sc1#0 ] -reg byte a [ init_buckets::$11 ] +zp ZP_BYTE:55 [ main::$3 ] +reg byte a [ main::$4 ] +reg byte a [ main::$5 ] +zp ZP_BYTE:56 [ main::bucket_size#0 ] +zp ZP_WORD:57 [ main::$11 main::$19 main::$23 main::bucket#0 ] +reg byte a [ main::$20 ] +zp ZP_WORD:59 [ main::sc#0 ] +zp ZP_BYTE:61 [ main::bucket_size1#0 ] +zp ZP_WORD:62 [ main::$16 main::$21 main::$24 main::bucket1#0 ] +reg byte a [ main::$22 ] +zp ZP_WORD:64 [ main::sc1#0 ] +zp ZP_WORD:66 [ init_buckets::$12 init_buckets::$16 ] reg byte x [ init_buckets::distance#0 ] -reg byte a [ init_buckets::$12 ] -zp ZP_WORD:55 [ init_buckets::bucket#0 ] -zp ZP_WORD:57 [ init_buckets::$9 ] -reg byte a [ init_buckets::$13 ] +zp ZP_WORD:68 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +zp ZP_WORD:70 [ init_buckets::$10 ] +reg byte a [ init_buckets::$14 ] reg byte a [ init_angle_screen::$2 ] reg byte a [ init_angle_screen::$3 ] -zp ZP_WORD:59 [ init_angle_screen::xw#0 atan2_16::x#0 ] +zp ZP_WORD:72 [ init_angle_screen::xw#0 atan2_16::x#0 ] reg byte a [ init_angle_screen::$6 ] -zp ZP_WORD:61 [ init_angle_screen::yw#0 atan2_16::y#0 ] -zp ZP_BYTE:63 [ init_angle_screen::ang_w#0 ] +zp ZP_WORD:74 [ init_angle_screen::yw#0 atan2_16::y#0 ] +zp ZP_BYTE:76 [ init_angle_screen::ang_w#0 ] reg byte a [ init_angle_screen::$12 ] reg byte a [ init_angle_screen::$13 ] reg byte a [ init_angle_screen::$14 ] reg byte a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte a [ init_dist_screen::y2#0 ] -zp ZP_WORD:64 [ sqr::return#2 init_dist_screen::yds#0 ] +zp ZP_WORD:77 [ sqr::return#2 init_dist_screen::yds#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:66 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] +zp ZP_WORD:79 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] reg byte a [ sqrt::return#2 ] reg byte a [ init_dist_screen::d#0 ] reg byte a [ sqrt::return#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] -zp ZP_WORD:68 [ bsearch16u::pivot#0 ] -zp ZP_WORD:70 [ bsearch16u::result#0 ] +zp ZP_WORD:81 [ bsearch16u::pivot#0 ] +zp ZP_WORD:83 [ bsearch16u::result#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ]