diff --git a/src/test/kc/screen-show-spiral-buckets.kc b/src/test/kc/screen-show-spiral-buckets.kc index 9fd4aca1e..0f2db0bfd 100644 --- a/src/test/kc/screen-show-spiral-buckets.kc +++ b/src/test/kc/screen-show-spiral-buckets.kc @@ -7,9 +7,9 @@ import "sqr" import "atan2" // Screen containing distance to center -const byte[1000] SCREEN_DIST; // = malloc(1000); +const byte[] SCREEN_DIST = malloc(1000); // Screen containing angle to center -const byte[1000] SCREEN_ANGLE; // = malloc(1000); +const byte[] SCREEN_ANGLE= malloc(1000); // Screen containing angle to center const byte* SCREEN_FILL = 0x0400; @@ -70,15 +70,15 @@ void main() { const byte NUM_BUCKETS = 0x30; // Array containing the bucket size for each of the distance buckets -const byte[NUM_BUCKETS] BUCKET_SIZES; // = malloc(NUM_BUCKETS*sizeof(byte)); +const byte[] BUCKET_SIZES = malloc(NUM_BUCKETS*sizeof(byte)); // Buckets containing screen indices for each distance from the center. // BUCKETS[dist] is an array of words containing screen indices. // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] -const word*[NUM_BUCKETS] BUCKETS; // = malloc(NUM_BUCKETS*sizeof(word*)); +const word*[] BUCKETS = malloc(NUM_BUCKETS*sizeof(word*)); // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) -const byte[NUM_BUCKETS] BUCKET_IDX; // = malloc(NUM_BUCKETS*sizeof(byte)); +const byte[] BUCKET_IDX = malloc(NUM_BUCKETS*sizeof(byte)); // Initialize buckets containing indices of chars on the screen with specific distances to the center. void init_buckets(byte* screen) { diff --git a/src/test/ref/screen-show-spiral-buckets.asm b/src/test/ref/screen-show-spiral-buckets.asm index 9f2e94c3b..98db1a967 100644 --- a/src/test/ref/screen-show-spiral-buckets.asm +++ b/src/test/ref/screen-show-spiral-buckets.asm @@ -1,9 +1,11 @@ // Fill screen using a spiral based on distance-to-center / angle-to-center // Utilizes a bucket sort for identifying the minimum angle/distance .pc = $801 "Basic" -:BasicUpstart(main) +:BasicUpstart(bbegin) .pc = $80d "Program" .const SIZEOF_WORD = 2 + .const SIZEOF_BYTE = 1 + .const SIZEOF_POINTER = 2 .label RASTER = $d012 .label BORDERCOL = $d020 // Color Ram @@ -12,7 +14,6 @@ .label HEAP_TOP = $a000 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // = malloc(1000); // Screen containing angle to center .label SCREEN_FILL = $400 // Char to fill with @@ -22,20 +23,92 @@ .const NUM_SQUARES = $30 .label heap_head = $12 .label SQUARES = $14 + // Screen containing distance to center + .label SCREEN_DIST = $34 + // Screen containing angle to center + .label SCREEN_ANGLE = $36 + // Array containing the bucket size for each of the distance buckets + .label BUCKET_SIZES = $38 + // Buckets containing screen indices for each distance from the center. + // BUCKETS[dist] is an array of words containing screen indices. + // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] + .label BUCKETS = $3a + // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) + .label BUCKET_IDX = $3c +bbegin: + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + lda #HEAP_TOP + sta heap_head+1 + jsr malloc + lda malloc.mem + sta SCREEN_DIST + lda malloc.mem+1 + sta SCREEN_DIST+1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + jsr malloc + lda malloc.mem + sta SCREEN_ANGLE + lda malloc.mem+1 + sta SCREEN_ANGLE+1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + jsr malloc + lda malloc.mem + sta BUCKET_SIZES + lda malloc.mem+1 + sta BUCKET_SIZES+1 + lda #NUM_BUCKETS*SIZEOF_POINTER + sta malloc.size + lda #0 + sta malloc.size+1 + jsr malloc + lda malloc.mem + sta BUCKETS + lda malloc.mem+1 + sta BUCKETS+1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + jsr malloc + lda malloc.mem + sta BUCKET_IDX + lda malloc.mem+1 + sta BUCKET_IDX+1 + jsr main + rts main: { - .label bucket = $34 - .label bucket_size = $36 + .label bucket = $3e + .label bucket_size = $40 .label bucket_idx = 2 .label offset = 6 - .label fill = $37 - .label angle = $39 + .label fill = $41 + .label angle = $43 .label min_angle = 3 .label fill1 = 6 .label min_offset = 6 .label min_offset_5 = 4 .label min_offset_7 = 4 sei + lda SCREEN_DIST + sta init_dist_screen.screen + lda SCREEN_DIST+1 + sta init_dist_screen.screen+1 jsr init_dist_screen + lda SCREEN_ANGLE + sta init_angle_screen.screen + lda SCREEN_ANGLE+1 + sta init_angle_screen.screen+1 jsr init_angle_screen jsr init_buckets lda #0 @@ -48,12 +121,13 @@ main: { lda bucket_idx asl tay - lda BUCKETS,y + lda (BUCKETS),y sta bucket - lda BUCKETS+1,y + iny + lda (BUCKETS),y sta bucket+1 ldy bucket_idx - lda BUCKET_SIZES,y + lda (BUCKET_SIZES),y sta bucket_size cmp #0 beq b4 @@ -84,12 +158,12 @@ main: { ldy #0 cmp (fill),y beq b18 - lda offset + lda SCREEN_ANGLE clc - adc #SCREEN_ANGLE + lda SCREEN_ANGLE+1 + adc offset+1 sta angle+1 lda (angle),y cmp min_angle @@ -154,41 +228,49 @@ main: { jmp b6 } // Initialize buckets containing indices of chars on the screen with specific distances to the center. +// init_buckets(byte* zeropage($34) screen) init_buckets: { .label _5 = $14 - .label _9 = $3d - .label _10 = $3f - .label _12 = $3b - .label _13 = $3d + .label _9 = $48 + .label _10 = $4a + .label _12 = $45 + .label _13 = $48 + .label screen = $34 .label dist = 8 .label i1 = $a .label i2 = $c - .label bucket = $3d + .label distance = $47 + .label bucket = $48 .label dist_3 = $e .label i4 = $10 .label dist_5 = $e .label _15 = $14 - .label _16 = $3b - .label _17 = $3d - ldx #0 + .label _16 = $45 + .label _17 = $48 + .label dist_8 = $e + ldy #0 // Init bucket sizes to 0 b1: lda #0 - sta BUCKET_SIZES,x - inx - cpx #NUM_BUCKETS-1+1 + sta (BUCKET_SIZES),y + iny + cpy #NUM_BUCKETS-1+1 bne b1 + lda screen + sta dist + lda screen+1 + sta dist+1 + lda #<0 sta i1 sta i1+1 - lda #SCREEN_DIST - sta dist+1 - b2: + b3: ldy #0 lda (dist),y - tax - inc BUCKET_SIZES,x + tay + lda (BUCKET_SIZES),y + clc + adc #1 + sta (BUCKET_SIZES),y inc dist bne !+ inc dist+1 @@ -199,21 +281,21 @@ init_buckets: { !: lda i1+1 cmp #>$3e8 - bne b2 + bne b3 lda i1 cmp #<$3e8 - bne b2 + bne b3 lda #<0 sta i2 sta i2+1 // Allocate the buckets - b3: - lda i2 + b4: + lda BUCKET_SIZES clc - adc #BUCKET_SIZES + lda BUCKET_SIZES+1 + adc i2+1 sta _15+1 ldy #0 lda (malloc.size),y @@ -229,12 +311,12 @@ init_buckets: { lda i2+1 rol sta _12+1 - clc lda _16 - adc #BUCKETS + adc BUCKETS+1 sta _16+1 ldy #0 lda _5 @@ -248,40 +330,40 @@ init_buckets: { !: lda i2+1 cmp #>NUM_BUCKETS-1+1 - bne b3 + bne b4 lda i2 cmp #SCREEN_DIST - sta dist_5+1 - b5: + b7: ldy #0 lda (dist_5),y - tax - txa + sta distance sta _9 tya sta _9+1 asl _13 rol _13+1 - clc lda _17 - adc #BUCKETS + adc BUCKETS+1 sta _17+1 lda (bucket),y pha @@ -292,12 +374,13 @@ init_buckets: { sta bucket lda dist_5 sec - sbc #SCREEN_DIST + sbc screen+1 sta _10+1 - lda BUCKET_IDX,x + ldy distance + lda (BUCKET_IDX),y asl tay lda _10 @@ -305,7 +388,11 @@ init_buckets: { iny lda _10+1 sta (bucket),y - inc BUCKET_IDX,x + ldy distance + lda (BUCKET_IDX),y + clc + adc #1 + sta (BUCKET_IDX),y inc dist_3 bne !+ inc dist_3+1 @@ -316,10 +403,10 @@ init_buckets: { !: lda i4+1 cmp #>$3e8 - bne b5 + bne b7 lda i4 cmp #<$3e8 - bne b5 + bne b7 rts } // Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. @@ -343,24 +430,32 @@ malloc: { } // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center +// init_angle_screen(byte* zeropage($17) screen) init_angle_screen: { .label _10 = $21 - .label xw = $41 - .label yw = $43 - .label angle_w = $21 - .label ang_w = $45 - .label x = $1b - .label xb = $1c + .label screen = $17 .label screen_topline = $19 .label screen_bottomline = $17 + .label xw = $4c + .label yw = $4e + .label angle_w = $21 + .label ang_w = $50 + .label x = $1b + .label xb = $1c .label y = $16 - lda #SCREEN_ANGLE+$28*$c + lda screen+1 + adc #>$28*$c sta screen_topline+1 - lda #SCREEN_ANGLE+$28*$c + lda screen_bottomline+1 + adc #>$28*$c sta screen_bottomline+1 lda #0 sta y @@ -435,7 +530,7 @@ 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($41) x, signed word zeropage($43) y) +// atan2_16(signed word zeropage($4c) x, signed word zeropage($4e) y) atan2_16: { .label _2 = $1d .label _7 = $1f @@ -445,8 +540,8 @@ atan2_16: { .label xd = $25 .label yd = $23 .label return = $21 - .label x = $41 - .label y = $43 + .label x = $4c + .label y = $4e lda y+1 bmi !b1+ jmp b1 @@ -624,24 +719,25 @@ atan2_16: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center +// init_dist_screen(byte* zeropage($28) screen) init_dist_screen: { - .label yds = $46 - .label xds = $48 - .label ds = $48 + .label screen = $28 + .label screen_bottomline = $2a + .label yds = $51 + .label xds = $53 + .label ds = $53 .label x = $2c .label xb = $2d .label screen_topline = $28 - .label screen_bottomline = $2a .label y = $27 jsr init_squares - lda #SCREEN_DIST+$28*$18 + lda screen+1 + adc #>$28*$18 sta screen_bottomline+1 - lda #SCREEN_DIST - sta screen_topline+1 lda #0 sta y b1: @@ -722,12 +818,12 @@ 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($48) val) +// sqrt(word zeropage($53) val) sqrt: { .label _1 = $2e .label _3 = $2e .label found = $2e - .label val = $48 + .label val = $53 lda SQUARES sta bsearch16u.items lda SQUARES+1 @@ -750,14 +846,14 @@ 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($48) key, word* zeropage($2e) items, byte register(X) num) +// bsearch16u(word zeropage($53) key, word* zeropage($2e) items, byte register(X) num) bsearch16u: { .label _2 = $2e - .label pivot = $4a - .label result = $4c + .label pivot = $55 + .label result = $57 .label return = $2e .label items = $2e - .label key = $48 + .label key = $53 ldx #NUM_SQUARES b3: cpx #0 @@ -833,8 +929,8 @@ bsearch16u: { // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $48 - .label return_2 = $46 + .label return = $53 + .label return_2 = $51 asl tay lda (SQUARES),y @@ -853,10 +949,6 @@ init_squares: { sta malloc.size lda #0 sta malloc.size+1 - lda #HEAP_TOP - sta heap_head+1 jsr malloc lda SQUARES sta squares @@ -895,21 +987,8 @@ init_squares: { bne b1 rts } - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... +// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i(byte) main::min_angle#2) goto main::@17 + [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 + [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 to:main::@8 main::@8: scope:[main] from main::@7 - [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) + [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) to:main::@6 main::@6: scope:[main] from main::@17 main::@18 main::@8 - [25] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) - [25] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 ) - [26] (byte) main::i#1 ← ++ (byte) main::i#2 - [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 + [38] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) + [38] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 ) + [39] (byte) main::i#1 ← ++ (byte) main::i#2 + [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 to:main::@9 main::@9: scope:[main] from main::@6 - [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 + [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 to:main::@10 main::@10: scope:[main] from main::@9 - [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 - [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 - [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 + [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 + [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) to:main::@1 main::@4: scope:[main] from main::@3 main::@9 - [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 - [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 + [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 + [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 to:main::@12 main::@12: scope:[main] from main::@4 - [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) to:main::@13 main::@13: scope:[main] from main::@12 main::@13 - [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) + [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) to:main::@13 main::@11: scope:[main] from main::@4 - [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) to:main::@1 main::@16: scope:[main] from main::@6 - [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 + [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 to:main::@5 main::@17: scope:[main] from main::@7 - [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 + [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 to:main::@6 main::@18: scope:[main] from main::@5 - [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 + [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 to:main::@6 init_buckets: scope:[init_buckets] from main::@15 - [40] phi() + [53] phi() to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - [41] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) - [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 - [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 - [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 + [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) + [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 + [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 + [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 to:init_buckets::@2 -init_buckets::@2: scope:[init_buckets] from init_buckets::@1 init_buckets::@2 - [45] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 ) - [45] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@2/(byte*) init_buckets::dist#1 ) - [46] *((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)) - [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 - [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 - [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 +init_buckets::@2: scope:[init_buckets] from init_buckets::@1 + [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 to:init_buckets::@3 -init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@6 - [50] (word) init_buckets::i2#2 ← phi( init_buckets::@6/(word) init_buckets::i2#1 init_buckets::@2/(word) 0 ) - [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 - [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 - [53] call malloc - to:init_buckets::@6 -init_buckets::@6: scope:[init_buckets] from init_buckets::@3 - [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 - [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 - [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 - [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 - [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 - [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 +init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 + [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 ) + [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*~) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 ) + [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) + [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 + [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 + [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 to:init_buckets::@4 -init_buckets::@4: scope:[init_buckets] from init_buckets::@4 init_buckets::@6 - [60] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 ) - [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 - [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 - [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 +init_buckets::@4: scope:[init_buckets] from init_buckets::@3 init_buckets::@8 + [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 ) + [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 + [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 + [67] call malloc + to:init_buckets::@8 +init_buckets::@8: scope:[init_buckets] from init_buckets::@4 + [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 + [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 + [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 + [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 + [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 to:init_buckets::@5 -init_buckets::@5: scope:[init_buckets] from init_buckets::@4 init_buckets::@5 - [64] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 ) - [64] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@5/(byte*) init_buckets::dist#3 ) - [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 - [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 - [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 - [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) - [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 - [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 - [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 - [73] *((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) - [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 - [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 - [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 +init_buckets::@5: scope:[init_buckets] from init_buckets::@5 init_buckets::@8 + [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 ) + [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 + [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 + [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 + to:init_buckets::@6 +init_buckets::@6: scope:[init_buckets] from init_buckets::@5 + [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 + to:init_buckets::@7 +init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 + [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 ) + [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*~) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 ) + [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) + [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 + [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 + [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 + [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) + [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 + [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 + [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 + [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) + [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 + [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 + [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 to:init_buckets::@return -init_buckets::@return: scope:[init_buckets] from init_buckets::@5 - [77] return +init_buckets::@return: scope:[init_buckets] from init_buckets::@7 + [92] return to:@return -malloc: scope:[malloc] from init_buckets::@3 init_squares - [78] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [78] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 ) - [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 - [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 +malloc: scope:[malloc] from @1 @2 @4 @6 @7 init_buckets::@4 init_squares + [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP#0 @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) + [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 + [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [81] return + [96] return to:@return init_angle_screen: scope:[init_angle_screen] from main::@14 - [82] phi() + [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@3 - [83] (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 ) - [83] (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 ) - [83] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 ) + [99] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 ) + [99] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 ) + [99] (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 - [84] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) - [84] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) - [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 - [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 - [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 - [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 - [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 - [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [92] call atan2_16 - [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) + [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) + [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 + [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 + [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 + [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 + [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 + [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [108] call atan2_16 + [109] (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 - [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 - [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 - [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 - [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 - [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 - [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 + [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 + [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 + [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 + [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 + [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [122] 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 - [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 - [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 - [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 - [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 + [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 + [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 + [126] 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 - [111] return + [127] return to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@2 - [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [128] 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 - [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [129] (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 - [114] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [131] 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 - [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [132] (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 - [117] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [133] (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 - [118] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [118] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [118] (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 ) - [118] (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 ) - [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [134] (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 ) + [134] (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 ) + [135] 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 - [120] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [138] 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 - [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [139] (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 - [124] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [141] 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 - [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [142] (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 - [127] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [143] (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 - [128] return + [144] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [147] (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 - [132] (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 ) - [132] (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 ) - [132] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [148] (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 ) + [148] (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 ) + [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [149] 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 - [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [150] 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 - [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [152] (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 - [137] (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 ) - [137] (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 ) - [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [153] (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 ) + [153] (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 ) + [154] 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 - [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 - [142] (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) + [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 + [158] (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 - [143] (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 ) - [143] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [143] (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 ) - [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 + [159] (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 ) + [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [159] (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 ) + [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [161] 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 - [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [149] (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) + [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [165] (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 - [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [168] (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 - [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [169] (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 - [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [170] (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 - [155] phi() - [156] call init_squares + [171] phi() + [172] call init_squares + to:init_dist_screen::@10 +init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen + [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 -init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen init_dist_screen::@9 - [157] (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 ) - [157] (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 ) - [157] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 ) - [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 +init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@9 + [174] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#0 ) + [174] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen#0 ) + [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 ) + [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [176] 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 - [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [177] (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 - [161] (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 ) - [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [163] call sqr - [164] (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 - [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + [178] (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 ) + [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [180] call sqr + [181] (word) sqr::return#2 ← (word) sqr::return#0 + to:init_dist_screen::@11 +init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@4 + [182] (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 - [166] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 ) - [166] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 ) - [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@13 + [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 ) + [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 ) + [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 + [185] 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 - [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [186] (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 - [170] (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 ) - [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [172] call sqr - [173] (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 - [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [177] call sqrt - [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [187] (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 ) + [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [189] call sqr + [190] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@12 -init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@11 - [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 - [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 +init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@8 + [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [194] call sqrt + [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + to:init_dist_screen::@13 +init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@12 + [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 + [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [203] 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 - [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 - [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 - [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 +init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@13 + [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 + [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 + [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [207] 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 - [191] return + [208] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [209] (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 - [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [210] (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 - [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [196] call bsearch16u - [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 +sqrt: scope:[sqrt] from init_dist_screen::@12 + [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [213] call bsearch16u + [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [202] return + [219] return to:@return bsearch16u: scope:[bsearch16u] from sqrt - [203] phi() + [220] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [204] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [204] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 + [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) + [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) + [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [224] (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 - [208] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [225] (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 - [209] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [210] return + [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [227] return to:@return bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 + [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 + [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@8 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 + [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 + [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 to:bsearch16u::@9 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 to:bsearch16u::@7 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [220] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [220] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 + [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) + [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) + [238] (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 - [222] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) - [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [239] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) + [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [225] return + [242] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [226] phi() - [227] call malloc + [243] phi() + [244] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [246] (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 - [230] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [230] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [230] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [254] 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 - [238] return + [255] return to:@return diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index e913fa468..c11288bd1 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -1,5 +1,5 @@ -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*[]) BUCKETS +Resolved forward reference BUCKET_SIZES to (byte[]) BUCKET_SIZES Resolved forward reference NUM_BUCKETS to (byte) NUM_BUCKETS Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 @@ -9,11 +9,11 @@ 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*[]) BUCKETS + (byte) main::bucket_idx) Fixing pointer array-indexing *((word[]) main::bucket + (byte) main::i) -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)) +Fixing pointer array-indexing *((word*[]) BUCKETS + (word) init_buckets::i2) +Fixing pointer array-indexing *((word*[]) BUCKETS + (word~) init_buckets::$9) +Fixing pointer array-indexing *((word*) init_buckets::bucket + *((byte[]) 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 Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx @@ -82,19 +82,19 @@ CONTROL FLOW GRAPH SSA (byte*) HEAP_TOP#0 ← ((byte*)) (number) $a000 (byte*) heap_head#0 ← (byte*) HEAP_TOP#0 to:@7 -malloc: scope:[malloc] from init_buckets::@5 init_squares - (word) malloc::size#2 ← phi( init_buckets::@5/(word) malloc::size#1 init_squares/(word) malloc::size#0 ) - (byte*) heap_head#13 ← phi( init_buckets::@5/(byte*) heap_head#25 init_squares/(byte*) heap_head#26 ) - (byte*~) malloc::$0 ← (byte*) heap_head#13 - (word) malloc::size#2 +malloc: scope:[malloc] from @12 @13 @17 @19 @20 init_buckets::@5 init_squares + (word) malloc::size#7 ← phi( @12/(word) malloc::size#1 @13/(word) malloc::size#3 @17/(word) malloc::size#2 @19/(word) malloc::size#4 @20/(word) malloc::size#5 init_buckets::@5/(word) malloc::size#6 init_squares/(word) malloc::size#0 ) + (byte*) heap_head#18 ← phi( @12/(byte*) heap_head#35 @13/(byte*) heap_head#36 @17/(byte*) heap_head#5 @19/(byte*) heap_head#10 @20/(byte*) heap_head#11 init_buckets::@5/(byte*) heap_head#37 init_squares/(byte*) heap_head#38 ) + (byte*~) malloc::$0 ← (byte*) heap_head#18 - (word) malloc::size#7 (byte*) malloc::mem#0 ← (byte*~) malloc::$0 (byte*) heap_head#1 ← (byte*) malloc::mem#0 (void*) malloc::return#0 ← ((void*)) (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - (byte*) heap_head#14 ← phi( malloc/(byte*) heap_head#1 ) - (void*) malloc::return#4 ← phi( malloc/(void*) malloc::return#0 ) - (void*) malloc::return#1 ← (void*) malloc::return#4 - (byte*) heap_head#2 ← (byte*) heap_head#14 + (byte*) heap_head#19 ← phi( malloc/(byte*) heap_head#1 ) + (void*) malloc::return#9 ← phi( malloc/(void*) malloc::return#0 ) + (void*) malloc::return#1 ← (void*) malloc::return#9 + (byte*) heap_head#2 ← (byte*) heap_head#19 return to:@return bsearch16u: scope:[bsearch16u] from sqrt @@ -180,12 +180,12 @@ 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#55 ← phi( @4/(byte*) heap_head#0 ) + (byte*) heap_head#54 ← phi( @4/(byte*) heap_head#0 ) (byte) NUM_SQUARES#0 ← (number) $ff (word*) SQUARES#0 ← (word*) 0 to:@10 init_squares: scope:[init_squares] from init_dist_screen - (byte*) heap_head#26 ← phi( init_dist_screen/(byte*) heap_head#32 ) + (byte*) heap_head#38 ← phi( init_dist_screen/(byte*) heap_head#44 ) (byte) NUM_SQUARES#6 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 ) (byte~) init_squares::$0 ← (byte) NUM_SQUARES#6 * (const byte) SIZEOF_WORD (word) malloc::size#0 ← (byte~) init_squares::$0 @@ -194,10 +194,10 @@ init_squares: scope:[init_squares] from init_dist_screen to:init_squares::@3 init_squares::@3: scope:[init_squares] from init_squares (byte) NUM_SQUARES#7 ← phi( init_squares/(byte) NUM_SQUARES#6 ) - (byte*) heap_head#15 ← phi( init_squares/(byte*) heap_head#2 ) - (void*) malloc::return#5 ← phi( init_squares/(void*) malloc::return#2 ) - (void*~) init_squares::$1 ← (void*) malloc::return#5 - (byte*) heap_head#3 ← (byte*) heap_head#15 + (byte*) heap_head#20 ← phi( init_squares/(byte*) heap_head#2 ) + (void*) malloc::return#10 ← phi( init_squares/(void*) malloc::return#2 ) + (void*~) init_squares::$1 ← (void*) malloc::return#10 + (byte*) heap_head#3 ← (byte*) heap_head#20 (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1 (word*) init_squares::squares#0 ← (word*) SQUARES#1 (word) init_squares::sqr#0 ← (number) 0 @@ -206,7 +206,7 @@ init_squares::@3: scope:[init_squares] from init_squares to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@3 (word*) SQUARES#17 ← phi( init_squares::@1/(word*) SQUARES#17 init_squares::@3/(word*) SQUARES#1 ) - (byte*) heap_head#27 ← phi( init_squares::@1/(byte*) heap_head#27 init_squares::@3/(byte*) heap_head#3 ) + (byte*) heap_head#39 ← phi( init_squares::@1/(byte*) heap_head#39 init_squares::@3/(byte*) heap_head#3 ) (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@3/(byte) init_squares::i#0 ) (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 ) (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@3/(word) init_squares::sqr#0 ) @@ -221,8 +221,8 @@ init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@3 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 ) - (byte*) heap_head#16 ← phi( init_squares::@1/(byte*) heap_head#27 ) - (byte*) heap_head#4 ← (byte*) heap_head#16 + (byte*) heap_head#21 ← phi( init_squares::@1/(byte*) heap_head#39 ) + (byte*) heap_head#4 ← (byte*) heap_head#21 (word*) SQUARES#2 ← (word*) SQUARES#8 return to:@return @@ -264,9 +264,9 @@ sqrt::@return: scope:[sqrt] from sqrt::@2 return to:@return @10: scope:[] from @7 - (word*) SQUARES#42 ← phi( @7/(word*) SQUARES#0 ) - (byte*) heap_head#49 ← phi( @7/(byte*) heap_head#55 ) - (byte) NUM_SQUARES#31 ← phi( @7/(byte) NUM_SQUARES#0 ) + (word*) SQUARES#57 ← phi( @7/(word*) SQUARES#0 ) + (byte) NUM_SQUARES#51 ← phi( @7/(byte) NUM_SQUARES#0 ) + (byte*) heap_head#47 ← phi( @7/(byte*) heap_head#54 ) (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::$5 ← ! (bool~) main::$4 if((bool~) main::$5) goto main::@7 to:main::@6 main::@7: scope:[main] from main::@13 main::@5 - (word*) SQUARES#38 ← phi( main::@13/(word*) SQUARES#44 main::@5/(word*) SQUARES#45 ) - (byte*) heap_head#44 ← phi( main::@13/(byte*) heap_head#50 main::@5/(byte*) heap_head#51 ) - (byte) NUM_SQUARES#27 ← phi( main::@13/(byte) NUM_SQUARES#33 main::@5/(byte) NUM_SQUARES#34 ) + (word*) SQUARES#38 ← phi( main::@13/(word*) SQUARES#43 main::@5/(word*) SQUARES#44 ) + (byte*) heap_head#57 ← phi( main::@13/(byte*) heap_head#61 main::@5/(byte*) heap_head#62 ) + (byte) NUM_SQUARES#27 ← phi( main::@13/(byte) NUM_SQUARES#32 main::@5/(byte) NUM_SQUARES#33 ) (byte) main::bucket_idx#3 ← phi( main::@13/(byte) main::bucket_idx#5 main::@5/(byte) main::bucket_idx#2 ) (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#3 (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0 @@ -562,9 +584,9 @@ main::@7: scope:[main] from main::@13 main::@5 if((bool~) main::$17) goto main::@17 to:main::@21 main::@6: scope:[main] from main::@5 - (word*) SQUARES#52 ← phi( main::@5/(word*) SQUARES#45 ) - (byte*) heap_head#66 ← phi( main::@5/(byte*) heap_head#51 ) - (byte) NUM_SQUARES#43 ← phi( main::@5/(byte) NUM_SQUARES#34 ) + (word*) SQUARES#55 ← phi( main::@5/(word*) SQUARES#44 ) + (byte*) heap_head#76 ← phi( main::@5/(byte*) heap_head#62 ) + (byte) NUM_SQUARES#46 ← phi( main::@5/(byte) NUM_SQUARES#33 ) (byte) main::bucket_idx#13 ← phi( main::@5/(byte) main::bucket_idx#2 ) (byte) main::bucket_size#5 ← phi( main::@5/(byte) main::bucket_size#0 ) (byte) main::min_angle#0 ← (number) $ff @@ -572,9 +594,9 @@ main::@6: scope:[main] from main::@5 (byte) main::i#0 ← (number) 0 to:main::@8 main::@8: scope:[main] from main::@6 main::@9 - (word*) SQUARES#51 ← phi( main::@6/(word*) SQUARES#52 main::@9/(word*) SQUARES#48 ) - (byte*) heap_head#63 ← phi( main::@6/(byte*) heap_head#66 main::@9/(byte*) heap_head#57 ) - (byte) NUM_SQUARES#41 ← phi( main::@6/(byte) NUM_SQUARES#43 main::@9/(byte) NUM_SQUARES#37 ) + (word*) SQUARES#52 ← phi( main::@6/(word*) SQUARES#55 main::@9/(word*) SQUARES#48 ) + (byte*) heap_head#73 ← phi( main::@6/(byte*) heap_head#76 main::@9/(byte*) heap_head#67 ) + (byte) NUM_SQUARES#42 ← phi( main::@6/(byte) NUM_SQUARES#46 main::@9/(byte) NUM_SQUARES#37 ) (byte) main::bucket_idx#12 ← phi( main::@6/(byte) main::bucket_idx#13 main::@9/(byte) main::bucket_idx#7 ) (word) main::min_offset#6 ← phi( main::@6/(word) main::min_offset#0 main::@9/(word) main::min_offset#4 ) (byte) main::min_angle#3 ← phi( main::@6/(byte) main::min_angle#0 main::@9/(byte) main::min_angle#4 ) @@ -589,9 +611,9 @@ main::@8: scope:[main] from main::@6 main::@9 if((bool~) main::$8) goto main::@9 to:main::@11 main::@9: scope:[main] from main::@11 main::@12 main::@8 - (word*) SQUARES#48 ← phi( main::@11/(word*) SQUARES#49 main::@12/(word*) SQUARES#50 main::@8/(word*) SQUARES#51 ) - (byte*) heap_head#57 ← phi( main::@11/(byte*) heap_head#61 main::@12/(byte*) heap_head#62 main::@8/(byte*) heap_head#63 ) - (byte) NUM_SQUARES#37 ← phi( main::@11/(byte) NUM_SQUARES#39 main::@12/(byte) NUM_SQUARES#40 main::@8/(byte) NUM_SQUARES#41 ) + (word*) SQUARES#48 ← phi( main::@11/(word*) SQUARES#50 main::@12/(word*) SQUARES#51 main::@8/(word*) SQUARES#52 ) + (byte*) heap_head#67 ← phi( main::@11/(byte*) heap_head#71 main::@12/(byte*) heap_head#72 main::@8/(byte*) heap_head#73 ) + (byte) NUM_SQUARES#37 ← phi( main::@11/(byte) NUM_SQUARES#40 main::@12/(byte) NUM_SQUARES#41 main::@8/(byte) NUM_SQUARES#42 ) (byte) main::bucket_idx#7 ← phi( main::@11/(byte) main::bucket_idx#10 main::@12/(byte) main::bucket_idx#11 main::@8/(byte) main::bucket_idx#12 ) (byte) main::min_angle#4 ← phi( main::@11/(byte) main::min_angle#2 main::@12/(byte) main::min_angle#1 main::@8/(byte) main::min_angle#3 ) (word) main::min_offset#4 ← phi( main::@11/(word) main::min_offset#5 main::@12/(word) main::min_offset#1 main::@8/(word) main::min_offset#6 ) @@ -602,25 +624,25 @@ main::@9: scope:[main] from main::@11 main::@12 main::@8 if((bool~) main::$12) goto main::@8 to:main::@13 main::@11: scope:[main] from main::@8 - (word*) SQUARES#49 ← phi( main::@8/(word*) SQUARES#51 ) - (byte*) heap_head#61 ← phi( main::@8/(byte*) heap_head#63 ) - (byte) NUM_SQUARES#39 ← phi( main::@8/(byte) NUM_SQUARES#41 ) + (word*) SQUARES#50 ← phi( main::@8/(word*) SQUARES#52 ) + (byte*) heap_head#71 ← phi( main::@8/(byte*) heap_head#73 ) + (byte) NUM_SQUARES#40 ← phi( main::@8/(byte) NUM_SQUARES#42 ) (byte) main::bucket_idx#10 ← phi( main::@8/(byte) main::bucket_idx#12 ) (word) main::min_offset#5 ← phi( main::@8/(word) main::min_offset#6 ) (byte) main::bucket_size#2 ← phi( main::@8/(byte) main::bucket_size#4 ) (byte) main::i#4 ← phi( main::@8/(byte) main::i#2 ) (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#3 ) (word) main::offset#1 ← phi( main::@8/(word) main::offset#0 ) - (byte*~) main::$9 ← (byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#1 + (byte*~) main::$9 ← (byte[]) SCREEN_ANGLE#0 + (word) main::offset#1 (byte*) main::angle#0 ← (byte*~) main::$9 (bool~) main::$10 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2 (bool~) main::$11 ← ! (bool~) main::$10 if((bool~) main::$11) goto main::@9 to:main::@12 main::@12: scope:[main] from main::@11 - (word*) SQUARES#50 ← phi( main::@11/(word*) SQUARES#49 ) - (byte*) heap_head#62 ← phi( main::@11/(byte*) heap_head#61 ) - (byte) NUM_SQUARES#40 ← phi( main::@11/(byte) NUM_SQUARES#39 ) + (word*) SQUARES#51 ← phi( main::@11/(word*) SQUARES#50 ) + (byte*) heap_head#72 ← phi( main::@11/(byte*) heap_head#71 ) + (byte) NUM_SQUARES#41 ← phi( main::@11/(byte) NUM_SQUARES#40 ) (byte) main::bucket_idx#11 ← phi( main::@11/(byte) main::bucket_idx#10 ) (byte) main::bucket_size#3 ← phi( main::@11/(byte) main::bucket_size#2 ) (byte) main::i#5 ← phi( main::@11/(byte) main::i#4 ) @@ -630,9 +652,9 @@ main::@12: scope:[main] from main::@11 (word) main::min_offset#1 ← (word) main::offset#2 to:main::@9 main::@13: scope:[main] from main::@9 - (word*) SQUARES#44 ← phi( main::@9/(word*) SQUARES#48 ) - (byte*) heap_head#50 ← phi( main::@9/(byte*) heap_head#57 ) - (byte) NUM_SQUARES#33 ← phi( main::@9/(byte) NUM_SQUARES#37 ) + (word*) SQUARES#43 ← phi( main::@9/(word*) SQUARES#48 ) + (byte*) heap_head#61 ← phi( main::@9/(byte*) heap_head#67 ) + (byte) NUM_SQUARES#32 ← phi( main::@9/(byte) NUM_SQUARES#37 ) (byte) main::bucket_idx#5 ← phi( main::@9/(byte) main::bucket_idx#7 ) (word) main::min_offset#2 ← phi( main::@9/(word) main::min_offset#4 ) (bool~) main::$13 ← (word) main::min_offset#2 != (number) $ffff @@ -640,9 +662,9 @@ main::@13: scope:[main] from main::@9 if((bool~) main::$14) goto main::@7 to:main::@14 main::@14: scope:[main] from main::@13 - (word*) SQUARES#35 ← phi( main::@13/(word*) SQUARES#44 ) - (byte*) heap_head#42 ← phi( main::@13/(byte*) heap_head#50 ) - (byte) NUM_SQUARES#24 ← phi( main::@13/(byte) NUM_SQUARES#33 ) + (word*) SQUARES#35 ← phi( main::@13/(word*) SQUARES#43 ) + (byte*) heap_head#55 ← phi( main::@13/(byte*) heap_head#61 ) + (byte) NUM_SQUARES#24 ← phi( main::@13/(byte) NUM_SQUARES#32 ) (byte) main::bucket_idx#8 ← phi( main::@13/(byte) main::bucket_idx#5 ) (word) main::min_offset#3 ← phi( main::@13/(word) main::min_offset#2 ) (byte*~) main::$15 ← (byte*) SCREEN_FILL#0 + (word) main::min_offset#3 @@ -652,75 +674,111 @@ main::@14: scope:[main] from main::@13 to:main::@1 main::@17: scope:[main] from main::@7 (word*) SQUARES#36 ← phi( main::@7/(word*) SQUARES#38 ) - (byte*) heap_head#43 ← phi( main::@7/(byte*) heap_head#44 ) + (byte*) heap_head#56 ← phi( main::@7/(byte*) heap_head#57 ) (byte) NUM_SQUARES#25 ← phi( main::@7/(byte) NUM_SQUARES#27 ) (byte) main::bucket_idx#9 ← phi( main::@7/(byte) main::bucket_idx#1 ) *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0) to:main::@1 main::@21: scope:[main] from main::@7 (word*) SQUARES#27 ← phi( main::@7/(word*) SQUARES#38 ) - (byte*) heap_head#36 ← phi( main::@7/(byte*) heap_head#44 ) + (byte*) heap_head#49 ← phi( main::@7/(byte*) heap_head#57 ) (byte) NUM_SQUARES#19 ← phi( main::@7/(byte) NUM_SQUARES#27 ) *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0) to:main::@24 main::@24: scope:[main] from main::@1 main::@21 main::@25 (word*) SQUARES#22 ← phi( main::@1/(word*) SQUARES#26 main::@21/(word*) SQUARES#27 main::@25/(word*) SQUARES#28 ) - (byte*) heap_head#30 ← phi( main::@1/(byte*) heap_head#35 main::@21/(byte*) heap_head#36 main::@25/(byte*) heap_head#37 ) + (byte*) heap_head#42 ← phi( main::@1/(byte*) heap_head#48 main::@21/(byte*) heap_head#49 main::@25/(byte*) heap_head#50 ) (byte) NUM_SQUARES#15 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@21/(byte) NUM_SQUARES#19 main::@25/(byte) NUM_SQUARES#20 ) if(true) goto main::@25 to:main::@return main::@25: scope:[main] from main::@24 (word*) SQUARES#28 ← phi( main::@24/(word*) SQUARES#22 ) - (byte*) heap_head#37 ← phi( main::@24/(byte*) heap_head#30 ) + (byte*) heap_head#50 ← phi( main::@24/(byte*) heap_head#42 ) (byte) NUM_SQUARES#20 ← phi( main::@24/(byte) NUM_SQUARES#15 ) (byte*~) main::$20 ← (byte*) COLS#0 + (number) $3e7 *((byte*~) main::$20) ← ++ *((byte*~) main::$20) to:main::@24 main::@return: scope:[main] from main::@24 (word*) SQUARES#13 ← phi( main::@24/(word*) SQUARES#22 ) - (byte*) heap_head#19 ← phi( main::@24/(byte*) heap_head#30 ) + (byte*) heap_head#26 ← phi( main::@24/(byte*) heap_head#42 ) (byte) NUM_SQUARES#10 ← phi( main::@24/(byte) NUM_SQUARES#15 ) (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10 - (byte*) heap_head#7 ← (byte*) heap_head#19 + (byte*) heap_head#9 ← (byte*) heap_head#26 (word*) SQUARES#4 ← (word*) SQUARES#13 return to:@return -@13: scope:[] from @12 - (word*) SQUARES#34 ← phi( @12/(word*) SQUARES#39 ) - (byte*) heap_head#41 ← phi( @12/(byte*) heap_head#45 ) - (byte) NUM_SQUARES#23 ← phi( @12/(byte) NUM_SQUARES#28 ) +@13: scope:[] from @18 + (word*) SQUARES#49 ← phi( @18/(word*) SQUARES#53 ) + (byte) NUM_SQUARES#38 ← phi( @18/(byte) NUM_SQUARES#43 ) + (byte*) heap_head#36 ← phi( @18/(byte*) heap_head#6 ) (byte) NUM_BUCKETS#0 ← (number) $30 - (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) } + (byte~) $2 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE + (word) malloc::size#3 ← (byte~) $2 + call malloc + (void*) malloc::return#5 ← (void*) malloc::return#1 + to:@19 +@19: scope:[] from @13 + (word*) SQUARES#45 ← phi( @13/(word*) SQUARES#49 ) + (byte) NUM_SQUARES#34 ← phi( @13/(byte) NUM_SQUARES#38 ) + (byte*) heap_head#27 ← phi( @13/(byte*) heap_head#2 ) + (void*) malloc::return#13 ← phi( @13/(void*) malloc::return#5 ) + (void*~) $3 ← (void*) malloc::return#13 + (byte*) heap_head#10 ← (byte*) heap_head#27 + (byte[]) BUCKET_SIZES#0 ← ((byte*)) (void*~) $3 + (byte~) $4 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER + (word) malloc::size#4 ← (byte~) $4 + call malloc + (void*) malloc::return#6 ← (void*) malloc::return#1 + to:@20 +@20: scope:[] from @19 + (word*) SQUARES#39 ← phi( @19/(word*) SQUARES#45 ) + (byte) NUM_SQUARES#28 ← phi( @19/(byte) NUM_SQUARES#34 ) + (byte*) heap_head#28 ← phi( @19/(byte*) heap_head#2 ) + (void*) malloc::return#14 ← phi( @19/(void*) malloc::return#6 ) + (void*~) $5 ← (void*) malloc::return#14 + (byte*) heap_head#11 ← (byte*) heap_head#28 + (word*[]) BUCKETS#0 ← ((word**)) (void*~) $5 + (byte~) $6 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE + (word) malloc::size#5 ← (byte~) $6 + call malloc + (void*) malloc::return#7 ← (void*) malloc::return#1 + to:@21 +@21: scope:[] from @20 + (word*) SQUARES#34 ← phi( @20/(word*) SQUARES#39 ) + (byte) NUM_SQUARES#23 ← phi( @20/(byte) NUM_SQUARES#28 ) + (byte*) heap_head#29 ← phi( @20/(byte*) heap_head#2 ) + (void*) malloc::return#15 ← phi( @20/(void*) malloc::return#7 ) + (void*~) $7 ← (void*) malloc::return#15 + (byte*) heap_head#12 ← (byte*) heap_head#29 + (byte[]) BUCKET_IDX#0 ← ((byte*)) (void*~) $7 to:@16 init_buckets: scope:[init_buckets] from main::@31 - (byte*) heap_head#64 ← phi( main::@31/(byte*) heap_head#29 ) + (byte*) heap_head#74 ← phi( main::@31/(byte*) heap_head#41 ) (byte*) init_buckets::screen#6 ← phi( main::@31/(byte*) init_buckets::screen#0 ) (number~) init_buckets::$0 ← (byte) 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#58 ← phi( init_buckets/(byte*) heap_head#64 init_buckets::@1/(byte*) heap_head#58 ) + (byte*) heap_head#68 ← phi( init_buckets/(byte*) heap_head#74 init_buckets::@1/(byte*) heap_head#68 ) (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[]) 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) (bool~) init_buckets::$1 ← (byte) init_buckets::i#1 != rangelast(0,init_buckets::$0) 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#52 ← phi( init_buckets::@1/(byte*) heap_head#58 ) + (byte*) heap_head#63 ← phi( init_buckets::@1/(byte*) heap_head#68 ) (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*) init_buckets::screen#11 ← phi( init_buckets::@2/(byte*) init_buckets::screen#1 init_buckets::@3/(byte*) init_buckets::screen#11 ) - (byte*) heap_head#46 ← phi( init_buckets::@2/(byte*) heap_head#52 init_buckets::@3/(byte*) heap_head#46 ) + (byte*) heap_head#58 ← phi( init_buckets::@2/(byte*) heap_head#63 init_buckets::@3/(byte*) heap_head#58 ) (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)) + *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 (word) init_buckets::i1#1 ← (word) init_buckets::i1#2 + rangenext(0,$3e7) (bool~) init_buckets::$2 ← (word) init_buckets::i1#1 != rangelast(0,$3e7) @@ -728,74 +786,74 @@ init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 to:init_buckets::@4 init_buckets::@4: scope:[init_buckets] from init_buckets::@3 (byte*) init_buckets::screen#10 ← phi( init_buckets::@3/(byte*) init_buckets::screen#11 ) - (byte*) heap_head#38 ← phi( init_buckets::@3/(byte*) heap_head#46 ) + (byte*) heap_head#51 ← phi( init_buckets::@3/(byte*) heap_head#58 ) (number~) init_buckets::$3 ← (byte) 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*) 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#38 ) + (byte*) heap_head#37 ← phi( init_buckets::@11/(byte*) heap_head#13 init_buckets::@4/(byte*) heap_head#51 ) (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 + (byte~) init_buckets::$4 ← *((byte[]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER + (word) malloc::size#6 ← (byte~) init_buckets::$4 call malloc - (void*) malloc::return#3 ← (void*) malloc::return#1 + (void*) malloc::return#8 ← (void*) malloc::return#1 to:init_buckets::@11 init_buckets::@11: scope:[init_buckets] from init_buckets::@5 (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*) heap_head#30 ← phi( init_buckets::@5/(byte*) heap_head#2 ) + (void*) malloc::return#16 ← phi( init_buckets::@5/(void*) malloc::return#8 ) + (void*~) init_buckets::$5 ← (void*) malloc::return#16 + (byte*) heap_head#13 ← (byte*) heap_head#30 (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*[]) 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#53 ← phi( init_buckets::@11/(byte*) heap_head#8 ) + (byte*) heap_head#64 ← phi( init_buckets::@11/(byte*) heap_head#13 ) (byte*) init_buckets::screen#7 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 ) (number~) init_buckets::$7 ← (byte) 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#47 ← phi( init_buckets::@6/(byte*) heap_head#53 init_buckets::@7/(byte*) heap_head#47 ) + (byte*) heap_head#59 ← phi( init_buckets::@6/(byte*) heap_head#64 init_buckets::@7/(byte*) heap_head#59 ) (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[]) 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) (bool~) init_buckets::$8 ← (byte) init_buckets::i3#1 != rangelast(0,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#39 ← phi( init_buckets::@7/(byte*) heap_head#47 ) + (byte*) heap_head#52 ← phi( init_buckets::@7/(byte*) heap_head#59 ) (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#39 init_buckets::@9/(byte*) heap_head#31 ) + (byte*) heap_head#43 ← phi( init_buckets::@8/(byte*) heap_head#52 init_buckets::@9/(byte*) heap_head#43 ) (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) (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::bucket#0 ← *((word*[]) 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 + (byte~) init_buckets::$14 ← *((byte[]) 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[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[]) 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::$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 ) - (byte*) heap_head#9 ← (byte*) heap_head#21 + (byte*) heap_head#31 ← phi( init_buckets::@9/(byte*) heap_head#43 ) + (byte*) heap_head#14 ← (byte*) heap_head#31 return to:@return init_angle_screen: scope:[init_angle_screen] from main::@30 @@ -873,16 +931,16 @@ init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@ init_dist_screen: scope:[init_dist_screen] from main (byte*) init_dist_screen::screen#2 ← phi( main/(byte*) init_dist_screen::screen#0 ) (word*) SQUARES#23 ← phi( main/(word*) SQUARES#21 ) - (byte*) heap_head#32 ← phi( main/(byte*) heap_head#28 ) + (byte*) heap_head#44 ← phi( main/(byte*) heap_head#40 ) (byte) NUM_SQUARES#3 ← (number) $30 call init_squares to:init_dist_screen::@15 init_dist_screen::@15: scope:[init_dist_screen] from init_dist_screen - (byte) NUM_SQUARES#47 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 ) + (byte) NUM_SQUARES#52 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 ) (byte*) init_dist_screen::screen#1 ← phi( init_dist_screen/(byte*) init_dist_screen::screen#2 ) (word*) SQUARES#14 ← phi( init_dist_screen/(word*) SQUARES#2 ) - (byte*) heap_head#22 ← phi( init_dist_screen/(byte*) heap_head#4 ) - (byte*) heap_head#10 ← (byte*) heap_head#22 + (byte*) heap_head#32 ← phi( init_dist_screen/(byte*) heap_head#4 ) + (byte*) heap_head#15 ← (byte*) heap_head#32 (word*) SQUARES#5 ← (word*) SQUARES#14 (byte*) init_dist_screen::screen_topline#0 ← (byte*) init_dist_screen::screen#1 (byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18 @@ -890,10 +948,10 @@ init_dist_screen::@15: scope:[init_dist_screen] from init_dist_screen (byte) init_dist_screen::y#0 ← (byte) 0 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@15 - (byte*) heap_head#71 ← phi( init_dist_screen::@11/(byte*) heap_head#33 init_dist_screen::@15/(byte*) heap_head#10 ) + (byte*) heap_head#81 ← phi( init_dist_screen::@11/(byte*) heap_head#45 init_dist_screen::@15/(byte*) heap_head#15 ) (byte*) init_dist_screen::screen_bottomline#13 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@15/(byte*) init_dist_screen::screen_bottomline#0 ) (byte*) init_dist_screen::screen_topline#13 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@15/(byte*) init_dist_screen::screen_topline#0 ) - (byte) NUM_SQUARES#46 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 init_dist_screen::@15/(byte) NUM_SQUARES#47 ) + (byte) NUM_SQUARES#50 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 init_dist_screen::@15/(byte) NUM_SQUARES#52 ) (word*) SQUARES#40 ← phi( init_dist_screen::@11/(word*) SQUARES#24 init_dist_screen::@15/(word*) SQUARES#5 ) (byte) init_dist_screen::y#2 ← phi( init_dist_screen::@11/(byte) init_dist_screen::y#1 init_dist_screen::@15/(byte) init_dist_screen::y#0 ) (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2 @@ -902,33 +960,33 @@ init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_ if((bool~) init_dist_screen::$3) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - (byte*) heap_head#69 ← phi( init_dist_screen::@1/(byte*) heap_head#71 ) + (byte*) heap_head#79 ← phi( init_dist_screen::@1/(byte*) heap_head#81 ) (byte) init_dist_screen::y#12 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 ) (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#13 ) (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#13 ) - (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#46 ) + (byte) NUM_SQUARES#47 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#50 ) (word*) SQUARES#29 ← phi( init_dist_screen::@1/(word*) SQUARES#40 ) (byte) init_dist_screen::y2#1 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 ) (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18 (number~) init_dist_screen::$7 ← (number~) init_dist_screen::$6 to:init_dist_screen::@4 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - (byte*) heap_head#70 ← phi( init_dist_screen::@1/(byte*) heap_head#71 ) + (byte*) heap_head#80 ← phi( init_dist_screen::@1/(byte*) heap_head#81 ) (byte) init_dist_screen::y#13 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 ) (byte*) init_dist_screen::screen_bottomline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#13 ) (byte*) init_dist_screen::screen_topline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#13 ) - (byte) NUM_SQUARES#45 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#46 ) + (byte) NUM_SQUARES#48 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#50 ) (word*) SQUARES#30 ← phi( init_dist_screen::@1/(word*) SQUARES#40 ) (byte) init_dist_screen::y2#2 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 ) (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2 (number~) init_dist_screen::$5 ← (number~) init_dist_screen::$4 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - (byte*) heap_head#68 ← phi( init_dist_screen::@2/(byte*) heap_head#69 init_dist_screen::@3/(byte*) heap_head#70 ) + (byte*) heap_head#78 ← phi( init_dist_screen::@2/(byte*) heap_head#79 init_dist_screen::@3/(byte*) heap_head#80 ) (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#42 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#44 init_dist_screen::@3/(byte) NUM_SQUARES#45 ) + (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#47 init_dist_screen::@3/(byte) NUM_SQUARES#48 ) (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 ) (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 @@ -937,11 +995,11 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d (word) sqr::return#2 ← (word) sqr::return#1 to:init_dist_screen::@16 init_dist_screen::@16: scope:[init_dist_screen] from init_dist_screen::@4 - (byte*) heap_head#67 ← phi( init_dist_screen::@4/(byte*) heap_head#68 ) + (byte*) heap_head#77 ← phi( init_dist_screen::@4/(byte*) heap_head#78 ) (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#38 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#42 ) + (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#44 ) (word*) SQUARES#46 ← 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 @@ -950,12 +1008,12 @@ 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#65 ← phi( init_dist_screen::@16/(byte*) heap_head#67 init_dist_screen::@18/(byte*) heap_head#40 ) + (byte*) heap_head#75 ← phi( init_dist_screen::@16/(byte*) heap_head#77 init_dist_screen::@18/(byte*) heap_head#53 ) (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#35 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#38 init_dist_screen::@18/(byte) NUM_SQUARES#22 ) + (byte) NUM_SQUARES#35 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#39 init_dist_screen::@18/(byte) NUM_SQUARES#22 ) (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#41 ← phi( init_dist_screen::@16/(word*) SQUARES#46 init_dist_screen::@18/(word*) SQUARES#33 ) (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 ) @@ -965,7 +1023,7 @@ 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#59 ← phi( init_dist_screen::@5/(byte*) heap_head#65 ) + (byte*) heap_head#69 ← phi( init_dist_screen::@5/(byte*) heap_head#75 ) (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 ) @@ -979,7 +1037,7 @@ 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#60 ← phi( init_dist_screen::@5/(byte*) heap_head#65 ) + (byte*) heap_head#70 ← phi( init_dist_screen::@5/(byte*) heap_head#75 ) (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 ) @@ -993,7 +1051,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#54 ← phi( init_dist_screen::@6/(byte*) heap_head#59 init_dist_screen::@7/(byte*) heap_head#60 ) + (byte*) heap_head#65 ← phi( init_dist_screen::@6/(byte*) heap_head#69 init_dist_screen::@7/(byte*) heap_head#70 ) (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 ) @@ -1009,7 +1067,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#48 ← phi( init_dist_screen::@8/(byte*) heap_head#54 ) + (byte*) heap_head#60 ← phi( init_dist_screen::@8/(byte*) heap_head#65 ) (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 ) @@ -1030,7 +1088,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#33 ← phi( init_dist_screen::@17/(word*) SQUARES#20 ) - (byte*) heap_head#40 ← phi( init_dist_screen::@17/(byte*) heap_head#48 ) + (byte*) heap_head#53 ← phi( init_dist_screen::@17/(byte*) heap_head#60 ) (byte) NUM_SQUARES#22 ← 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 ) @@ -1051,7 +1109,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#33 ) - (byte*) heap_head#33 ← phi( init_dist_screen::@18/(byte*) heap_head#40 ) + (byte*) heap_head#45 ← phi( init_dist_screen::@18/(byte*) heap_head#53 ) (byte) NUM_SQUARES#16 ← phi( init_dist_screen::@18/(byte) NUM_SQUARES#22 ) (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 ) @@ -1064,47 +1122,60 @@ init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@18 to:init_dist_screen::@return init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@11 (word*) SQUARES#15 ← phi( init_dist_screen::@11/(word*) SQUARES#24 ) - (byte*) heap_head#23 ← phi( init_dist_screen::@11/(byte*) heap_head#33 ) + (byte*) heap_head#33 ← phi( init_dist_screen::@11/(byte*) heap_head#45 ) (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 ) (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11 - (byte*) heap_head#11 ← (byte*) heap_head#23 + (byte*) heap_head#16 ← (byte*) heap_head#33 (word*) SQUARES#6 ← (word*) SQUARES#15 return to:@return -@16: scope:[] from @13 - (word*) SQUARES#25 ← phi( @13/(word*) SQUARES#34 ) - (byte*) heap_head#34 ← phi( @13/(byte*) heap_head#41 ) - (byte) NUM_SQUARES#17 ← phi( @13/(byte) NUM_SQUARES#23 ) +@16: scope:[] from @21 + (word*) SQUARES#25 ← phi( @21/(word*) SQUARES#34 ) + (byte*) heap_head#46 ← phi( @21/(byte*) heap_head#12 ) + (byte) NUM_SQUARES#17 ← phi( @21/(byte) NUM_SQUARES#23 ) call main - to:@17 -@17: scope:[] from @16 + to:@22 +@22: scope:[] from @16 (word*) SQUARES#16 ← phi( @16/(word*) SQUARES#4 ) - (byte*) heap_head#24 ← phi( @16/(byte*) heap_head#7 ) + (byte*) heap_head#34 ← phi( @16/(byte*) heap_head#9 ) (byte) NUM_SQUARES#12 ← phi( @16/(byte) NUM_SQUARES#2 ) (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12 - (byte*) heap_head#12 ← (byte*) heap_head#24 + (byte*) heap_head#17 ← (byte*) heap_head#34 (word*) SQUARES#7 ← (word*) SQUARES#16 to:@end -@end: scope:[] from @17 +@end: scope:[] from @22 SYMBOL TABLE SSA +(void*~) $0 +(void*~) $1 +(byte~) $2 +(void*~) $3 +(byte~) $4 +(void*~) $5 +(byte~) $6 +(void*~) $7 (label) @10 (label) @12 (label) @13 (label) @16 (label) @17 +(label) @18 +(label) @19 +(label) @20 +(label) @21 +(label) @22 (label) @4 (label) @7 (label) @begin (label) @end (byte*) BORDERCOL (byte*) BORDERCOL#0 -(word*[NUM_BUCKETS#0]) BUCKETS -(word*[NUM_BUCKETS#0]) BUCKETS#0 -(byte[NUM_BUCKETS#0]) BUCKET_IDX -(byte[NUM_BUCKETS#0]) BUCKET_IDX#0 -(byte[NUM_BUCKETS#0]) BUCKET_SIZES -(byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 +(word*[]) BUCKETS +(word*[]) BUCKETS#0 +(byte[]) BUCKET_IDX +(byte[]) BUCKET_IDX#0 +(byte[]) BUCKET_SIZES +(byte[]) BUCKET_SIZES#0 (byte*) COLS (byte*) COLS#0 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16 @@ -1161,19 +1232,25 @@ SYMBOL TABLE SSA (byte) NUM_SQUARES#45 (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#47 +(byte) NUM_SQUARES#48 +(byte) NUM_SQUARES#49 (byte) NUM_SQUARES#5 +(byte) NUM_SQUARES#50 +(byte) NUM_SQUARES#51 +(byte) NUM_SQUARES#52 (byte) NUM_SQUARES#6 (byte) NUM_SQUARES#7 (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#9 (byte*) RASTER (byte*) RASTER#0 -(byte[$3e8]) SCREEN_ANGLE -(byte[$3e8]) SCREEN_ANGLE#0 -(byte[$3e8]) SCREEN_DIST -(byte[$3e8]) SCREEN_DIST#0 +(byte[]) SCREEN_ANGLE +(byte[]) SCREEN_ANGLE#0 +(byte[]) SCREEN_DIST +(byte[]) SCREEN_DIST#0 (byte*) SCREEN_FILL (byte*) SCREEN_FILL#0 +(const byte) SIZEOF_BYTE = (byte) 1 (const byte) SIZEOF_POINTER = (byte) 2 (const byte) SIZEOF_WORD = (byte) 2 (word*) SQUARES @@ -1226,6 +1303,11 @@ SYMBOL TABLE SSA (word*) SQUARES#50 (word*) SQUARES#51 (word*) SQUARES#52 +(word*) SQUARES#53 +(word*) SQUARES#54 +(word*) SQUARES#55 +(word*) SQUARES#56 +(word*) SQUARES#57 (word*) SQUARES#6 (word*) SQUARES#7 (word*) SQUARES#8 @@ -1568,7 +1650,17 @@ SYMBOL TABLE SSA (byte*) heap_head#7 (byte*) heap_head#70 (byte*) heap_head#71 +(byte*) heap_head#72 +(byte*) heap_head#73 +(byte*) heap_head#74 +(byte*) heap_head#75 +(byte*) heap_head#76 +(byte*) heap_head#77 +(byte*) heap_head#78 +(byte*) heap_head#79 (byte*) heap_head#8 +(byte*) heap_head#80 +(byte*) heap_head#81 (byte*) heap_head#9 (void()) init_angle_screen((byte*) init_angle_screen::screen) (byte*~) init_angle_screen::$0 @@ -1960,15 +2052,30 @@ SYMBOL TABLE SSA (void*) malloc::return (void*) malloc::return#0 (void*) malloc::return#1 +(void*) malloc::return#10 +(void*) malloc::return#11 +(void*) malloc::return#12 +(void*) malloc::return#13 +(void*) malloc::return#14 +(void*) malloc::return#15 +(void*) malloc::return#16 (void*) malloc::return#2 (void*) malloc::return#3 (void*) malloc::return#4 (void*) malloc::return#5 (void*) malloc::return#6 +(void*) malloc::return#7 +(void*) malloc::return#8 +(void*) malloc::return#9 (word) malloc::size (word) malloc::size#0 (word) malloc::size#1 (word) malloc::size#2 +(word) malloc::size#3 +(word) malloc::size#4 +(word) malloc::size#5 +(word) malloc::size#6 +(word) malloc::size#7 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 (label) sqr::@return @@ -2045,6 +2152,8 @@ 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) $3e8 in (word) malloc::size#1 ← (number) $3e8 +Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8 Adding number conversion cast (unumber) 0 in (byte) main::bucket_idx#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (unumber) 0 in (bool~) main::$4 ← (byte) main::bucket_size#0 > (number) 0 @@ -2056,12 +2165,12 @@ Adding number conversion cast (unumber) $3e7 in (byte*~) main::$20 ← (byte*) C 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[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte[]) 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) 0 in *((byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((byte[]) 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 Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 @@ -2093,11 +2202,11 @@ Adding number conversion cast (unumber) init_dist_screen::$7 in (number~) init_d Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2 Adding number conversion cast (unumber) init_dist_screen::$4 in (number~) init_dist_screen::$4 ← (unumber)(number) $18 - (byte) init_dist_screen::y2#2 Adding number conversion cast (unumber) init_dist_screen::$5 in (number~) init_dist_screen::$5 ← (unumber~) init_dist_screen::$4 -Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#68 ← phi( init_dist_screen::@2/(byte*) heap_head#69 init_dist_screen::@3/(byte*) heap_head#70 ) +Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#78 ← phi( init_dist_screen::@2/(byte*) heap_head#79 init_dist_screen::@3/(byte*) heap_head#80 ) (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#42 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#44 init_dist_screen::@3/(byte) NUM_SQUARES#45 ) + (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#47 init_dist_screen::@3/(byte) NUM_SQUARES#48 ) (word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 ) (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 @@ -2111,7 +2220,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#54 ← phi( init_dist_screen::@6/(byte*) heap_head#59 init_dist_screen::@7/(byte*) heap_head#60 ) +Adding number conversion cast (unumber) init_dist_screen::$16 in (byte*) heap_head#65 ← phi( init_dist_screen::@6/(byte*) heap_head#69 init_dist_screen::@7/(byte*) heap_head#70 ) (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 ) @@ -2138,15 +2247,22 @@ Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0 Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1 Inlining cast (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 +Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 +Inlining cast (byte[]) SCREEN_DIST#0 ← (byte*)(void*~) $0 +Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8 +Inlining cast (byte[]) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 Inlining cast (byte*) SCREEN_FILL#0 ← (byte*)(number) $400 Inlining cast (byte) main::bucket_idx#0 ← (unumber)(number) 0 Inlining cast (byte) main::min_angle#0 ← (unumber)(number) $ff Inlining cast (word) main::min_offset#0 ← (unumber)(number) $ffff Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) NUM_BUCKETS#0 ← (unumber)(number) $30 -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 + (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 (byte[]) BUCKET_SIZES#0 ← (byte*)(void*~) $3 +Inlining cast (word*[]) BUCKETS#0 ← (word**)(void*~) $5 +Inlining cast (byte[]) BUCKET_IDX#0 ← (byte*)(void*~) $7 +Inlining cast *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (unumber)(number) 0 +Inlining cast *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5 +Inlining cast *((byte[]) 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 @@ -2190,6 +2306,8 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $8000 +Simplifying constant integer cast $3e8 +Simplifying constant integer cast $3e8 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast $ff @@ -2263,6 +2381,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 (word) $3e8 +Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 @@ -2338,16 +2458,16 @@ Inversing boolean not [136] (bool~) atan2_16::$18 ← (signed word) atan2_16::yi Inversing boolean not [145] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [144] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 Inversing boolean not [156] (bool~) atan2_16::$20 ← (byte) 0 == (byte) atan2_16::shift#4 from [155] (bool~) atan2_16::$25 ← (byte) 0 != (byte) atan2_16::shift#4 Inversing boolean not [180] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [179] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 -Inversing boolean not [225] (bool~) main::$5 ← (byte) main::bucket_size#0 <= (byte) 0 from [224] (bool~) main::$4 ← (byte) main::bucket_size#0 > (byte) 0 -Inversing boolean not [230] (bool~) main::$17 ← (byte) main::bucket_idx#1 != (byte) NUM_BUCKETS#0 from [229] (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0 -Inversing boolean not [242] (bool~) main::$8 ← *((byte*) main::fill#0) == (byte) FILL_CHAR#0 from [241] (bool~) main::$7 ← *((byte*) main::fill#0) != (byte) FILL_CHAR#0 -Inversing boolean not [252] (bool~) main::$11 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [251] (bool~) main::$10 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2 -Inversing boolean not [259] (bool~) main::$14 ← (word) main::min_offset#2 == (word) $ffff from [258] (bool~) main::$13 ← (word) main::min_offset#2 != (word) $ffff +Inversing boolean not [237] (bool~) main::$5 ← (byte) main::bucket_size#0 <= (byte) 0 from [236] (bool~) main::$4 ← (byte) main::bucket_size#0 > (byte) 0 +Inversing boolean not [242] (bool~) main::$17 ← (byte) main::bucket_idx#1 != (byte) NUM_BUCKETS#0 from [241] (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0 +Inversing boolean not [254] (bool~) main::$8 ← *((byte*) main::fill#0) == (byte) FILL_CHAR#0 from [253] (bool~) main::$7 ← *((byte*) main::fill#0) != (byte) FILL_CHAR#0 +Inversing boolean not [264] (bool~) main::$11 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [263] (bool~) main::$10 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2 +Inversing boolean not [271] (bool~) main::$14 ← (word) main::min_offset#2 == (word) $ffff from [270] (bool~) main::$13 ← (word) main::min_offset#2 != (word) $ffff Successful SSA optimization Pass2UnaryNotSimplification -Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#55 (byte*) heap_head#49 (byte*) heap_head#45 (byte*) heap_head#41 (byte*) heap_head#34 +Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#54 (byte*) heap_head#47 (byte*) heap_head#35 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 +Alias (void*) malloc::return#0 = (void*) malloc::return#9 (void*) malloc::return#1 +Alias (byte*) heap_head#1 = (byte*) heap_head#19 (byte*) heap_head#2 Alias (byte) bsearch16u::num#3 = (byte) bsearch16u::num#4 (byte) bsearch16u::num#8 (byte) bsearch16u::num#6 Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#6 (word*) bsearch16u::items#3 (word*) bsearch16u::items#9 (word*) bsearch16u::items#4 (word*~) bsearch16u::$3 (word*) bsearch16u::items#5 Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#3 (word) bsearch16u::key#2 (word) bsearch16u::key#7 (word) bsearch16u::key#6 @@ -2358,18 +2478,18 @@ Alias (word*) bsearch16u::items#0 = (word*~) bsearch16u::$15 Alias (word*~) bsearch16u::$2 = (word*~) bsearch16u::$1 Alias (word*) bsearch16u::return#2 = (word*~) bsearch16u::$4 Alias (word) malloc::size#0 = (byte~) init_squares::$0 -Alias (void*) malloc::return#2 = (void*) malloc::return#5 +Alias (void*) malloc::return#10 = (void*) malloc::return#2 Alias (byte) NUM_SQUARES#6 = (byte) NUM_SQUARES#7 -Alias (byte*) heap_head#15 = (byte*) heap_head#3 -Alias (byte*) heap_head#16 = (byte*) heap_head#27 (byte*) heap_head#4 +Alias (byte*) heap_head#20 = (byte*) heap_head#3 +Alias (byte*) heap_head#21 = (byte*) heap_head#39 (byte*) heap_head#4 Alias (word*) SQUARES#17 = (word*) SQUARES#8 (word*) SQUARES#2 Alias (word) sqr::return#0 = (word) sqr::return#4 (word) sqr::return#1 Alias (word*) bsearch16u::return#3 = (word*) bsearch16u::return#5 Alias (word*) SQUARES#10 = (word*) SQUARES#11 Alias (word*) sqrt::found#0 = (word*~) sqrt::$0 Alias (byte) sqrt::return#0 = (byte) sqrt::sq#0 (byte~) sqrt::$2 (byte) sqrt::return#3 (byte) sqrt::return#1 -Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 -Alias (word*) SQUARES#0 = (word*) SQUARES#42 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#25 +Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#51 (byte) NUM_SQUARES#49 (byte) NUM_SQUARES#45 (byte) NUM_SQUARES#43 (byte) NUM_SQUARES#38 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 +Alias (word*) SQUARES#0 = (word*) SQUARES#57 (word*) SQUARES#56 (word*) SQUARES#54 (word*) SQUARES#53 (word*) SQUARES#49 (word*) SQUARES#45 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#25 Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#2 (signed word~) atan2_16::$3 (signed word) atan2_16::y#3 Alias (signed word) atan2_16::x#5 = (signed word) atan2_16::x#9 (signed word) atan2_16::x#6 Alias (signed word~) atan2_16::$2 = (signed word~) atan2_16::$1 @@ -2407,14 +2527,18 @@ 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#32 (byte) NUM_SQUARES#26 -Alias (byte*) heap_head#17 = (byte*) heap_head#5 (byte*) heap_head#29 -Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#43 (word*) SQUARES#37 -Alias (byte*) heap_head#18 = (byte*) heap_head#6 +Alias (void*) malloc::return#11 = (void*) malloc::return#3 +Alias (byte*) heap_head#22 = (byte*) heap_head#5 +Alias (void*) malloc::return#12 = (void*) malloc::return#4 +Alias (byte*) heap_head#23 = (byte*) heap_head#6 (byte*) heap_head#36 +Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#26 +Alias (byte*) heap_head#24 = (byte*) heap_head#7 (byte*) heap_head#41 +Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#42 (word*) SQUARES#37 +Alias (byte*) heap_head#25 = (byte*) heap_head#8 Alias (byte) main::bucket_idx#13 = (byte) main::bucket_idx#2 (byte) main::bucket_idx#4 -Alias (byte) NUM_SQUARES#34 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#43 -Alias (byte*) heap_head#51 = (byte*) heap_head#56 (byte*) heap_head#66 -Alias (word*) SQUARES#45 = (word*) SQUARES#47 (word*) SQUARES#52 +Alias (byte) NUM_SQUARES#33 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#46 +Alias (byte*) heap_head#62 = (byte*) heap_head#66 (byte*) heap_head#76 +Alias (word*) SQUARES#44 = (word*) SQUARES#47 (word*) SQUARES#55 Alias (byte) main::bucket_size#0 = (byte) main::bucket_size#5 Alias (byte*) main::fill#0 = (byte*~) main::$6 Alias (word) main::offset#0 = (word) main::offset#1 (word) main::offset#2 (word) main::min_offset#1 @@ -2423,35 +2547,44 @@ Alias (byte) main::i#2 = (byte) main::i#4 (byte) main::i#5 Alias (byte) main::bucket_size#2 = (byte) main::bucket_size#4 (byte) main::bucket_size#3 Alias (word) main::min_offset#5 = (word) main::min_offset#6 Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#12 (byte) main::bucket_idx#11 -Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#40 -Alias (byte*) heap_head#61 = (byte*) heap_head#63 (byte*) heap_head#62 -Alias (word*) SQUARES#49 = (word*) SQUARES#51 (word*) SQUARES#50 +Alias (byte) NUM_SQUARES#40 = (byte) NUM_SQUARES#42 (byte) NUM_SQUARES#41 +Alias (byte*) heap_head#71 = (byte*) heap_head#73 (byte*) heap_head#72 +Alias (word*) SQUARES#50 = (word*) SQUARES#52 (word*) SQUARES#51 Alias (byte*) main::angle#0 = (byte*~) main::$9 (byte*) main::angle#1 Alias (word) main::min_offset#2 = (word) main::min_offset#4 (word) main::min_offset#3 Alias (byte) main::bucket_idx#5 = (byte) main::bucket_idx#7 (byte) main::bucket_idx#8 -Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#37 -Alias (byte*) heap_head#42 = (byte*) heap_head#50 (byte*) heap_head#57 -Alias (word*) SQUARES#35 = (word*) SQUARES#44 (word*) SQUARES#48 +Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#37 +Alias (byte*) heap_head#55 = (byte*) heap_head#61 (byte*) heap_head#67 +Alias (word*) SQUARES#35 = (word*) SQUARES#43 (word*) SQUARES#48 Alias (byte*) main::fill1#0 = (byte*~) main::$15 Alias (byte) main::bucket_idx#1 = (byte) main::bucket_idx#9 Alias (byte) NUM_SQUARES#19 = (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#27 -Alias (byte*) heap_head#36 = (byte*) heap_head#43 (byte*) heap_head#44 +Alias (byte*) heap_head#49 = (byte*) heap_head#56 (byte*) heap_head#57 Alias (word*) SQUARES#27 = (word*) SQUARES#36 (word*) SQUARES#38 Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#2 -Alias (byte*) heap_head#19 = (byte*) heap_head#37 (byte*) heap_head#30 (byte*) heap_head#7 +Alias (byte*) heap_head#26 = (byte*) heap_head#50 (byte*) heap_head#42 (byte*) heap_head#9 Alias (word*) SQUARES#13 = (word*) SQUARES#28 (word*) SQUARES#22 (word*) SQUARES#4 +Alias (word) malloc::size#3 = (byte~) $2 +Alias (void*) malloc::return#13 = (void*) malloc::return#5 +Alias (byte*) heap_head#10 = (byte*) heap_head#27 +Alias (word) malloc::size#4 = (byte~) $4 +Alias (void*) malloc::return#14 = (void*) malloc::return#6 +Alias (byte*) heap_head#11 = (byte*) heap_head#28 +Alias (word) malloc::size#5 = (byte~) $6 +Alias (void*) malloc::return#15 = (void*) malloc::return#7 +Alias (byte*) heap_head#12 = (byte*) heap_head#29 (byte*) heap_head#46 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#38 = (byte*) heap_head#46 +Alias (byte*) heap_head#63 = (byte*) heap_head#68 +Alias (byte*) heap_head#51 = (byte*) heap_head#58 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 (word) malloc::size#6 = (byte~) init_buckets::$4 +Alias (void*) malloc::return#16 = (void*) malloc::return#8 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*) heap_head#13 = (byte*) heap_head#30 (byte*) heap_head#64 Alias (byte*) init_buckets::screen#2 = (byte*) init_buckets::screen#5 (byte*) init_buckets::dist#2 -Alias (byte*) heap_head#39 = (byte*) heap_head#47 -Alias (byte*) heap_head#21 = (byte*) heap_head#31 (byte*) heap_head#9 +Alias (byte*) heap_head#52 = (byte*) heap_head#59 +Alias (byte*) heap_head#14 = (byte*) heap_head#31 (byte*) heap_head#43 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 Alias (word~) init_angle_screen::$4 = (word~) init_angle_screen::$17 @@ -2467,27 +2600,27 @@ Alias (byte) init_angle_screen::y#2 = (byte) init_angle_screen::y#5 (byte) init_ Alias (word) init_angle_screen::angle_w#0 = (word~) init_angle_screen::$9 Alias (byte) init_angle_screen::ang_w#0 = (byte~) init_angle_screen::$11 Alias (byte*) init_dist_screen::screen#1 = (byte*) init_dist_screen::screen#2 (byte*) init_dist_screen::screen_topline#0 -Alias (byte) NUM_SQUARES#3 = (byte) NUM_SQUARES#47 -Alias (byte*) heap_head#10 = (byte*) heap_head#22 +Alias (byte) NUM_SQUARES#3 = (byte) NUM_SQUARES#52 +Alias (byte*) heap_head#15 = (byte*) heap_head#32 Alias (word*) SQUARES#14 = (word*) SQUARES#5 Alias (byte*) init_dist_screen::screen_bottomline#0 = (byte*~) init_dist_screen::$1 Alias (byte) init_dist_screen::y2#0 = (byte~) init_dist_screen::$2 (byte) init_dist_screen::y2#1 (byte) init_dist_screen::y2#2 Alias (word*) SQUARES#29 = (word*) SQUARES#40 (word*) SQUARES#30 -Alias (byte) NUM_SQUARES#44 = (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#45 +Alias (byte) NUM_SQUARES#47 = (byte) NUM_SQUARES#50 (byte) NUM_SQUARES#48 Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#13 (byte*) init_dist_screen::screen_topline#12 Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#12 Alias (byte) init_dist_screen::y#12 = (byte) init_dist_screen::y#2 (byte) init_dist_screen::y#13 -Alias (byte*) heap_head#69 = (byte*) heap_head#71 (byte*) heap_head#70 +Alias (byte*) heap_head#79 = (byte*) heap_head#81 (byte*) heap_head#80 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#46 -Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#42 +Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#44 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 -Alias (byte*) heap_head#67 = (byte*) heap_head#68 +Alias (byte*) heap_head#77 = (byte*) heap_head#78 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#31 = (word*) SQUARES#41 (word*) SQUARES#32 @@ -2498,7 +2631,7 @@ Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#6 (byte) init_di 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#59 = (byte*) heap_head#65 (byte*) heap_head#60 +Alias (byte*) heap_head#69 = (byte*) heap_head#75 (byte*) heap_head#70 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 @@ -2511,13 +2644,13 @@ 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#48 (byte*) heap_head#54 (byte*) heap_head#40 (byte*) heap_head#33 (byte*) heap_head#23 +Alias (byte*) heap_head#16 = (byte*) heap_head#60 (byte*) heap_head#65 (byte*) heap_head#53 (byte*) heap_head#45 (byte*) heap_head#33 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 Alias (byte) init_dist_screen::d#0 = (byte~) init_dist_screen::$19 Alias (byte) NUM_SQUARES#12 = (byte) NUM_SQUARES#5 -Alias (byte*) heap_head#12 = (byte*) heap_head#24 +Alias (byte*) heap_head#17 = (byte*) heap_head#34 Alias (word*) SQUARES#16 = (word*) SQUARES#7 Successful SSA optimization Pass2AliasElimination Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#5 @@ -2534,15 +2667,15 @@ Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::bucket_size#1 = (byte) main::bucket_size#2 Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#5 -Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#39 -Alias (byte*) heap_head#42 = (byte*) heap_head#61 -Alias (word*) SQUARES#35 = (word*) SQUARES#49 +Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#40 +Alias (byte*) heap_head#55 = (byte*) heap_head#71 +Alias (word*) SQUARES#35 = (word*) SQUARES#50 Alias (word*) SQUARES#18 = (word*) SQUARES#29 -Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#44 +Alias (byte) NUM_SQUARES#39 = (byte) NUM_SQUARES#47 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 -Alias (byte*) heap_head#67 = (byte*) heap_head#69 +Alias (byte*) heap_head#77 = (byte*) heap_head#79 Alias (word*) SQUARES#15 = (word*) SQUARES#31 Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3 Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#29 @@ -2551,10 +2684,10 @@ 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#59 +Alias (byte*) heap_head#16 = (byte*) heap_head#69 Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) bsearch16u::key#1 -Self Phi Eliminated (byte*) heap_head#16 +Self Phi Eliminated (byte*) heap_head#21 Self Phi Eliminated (word*) SQUARES#17 Self Phi Eliminated (signed word) atan2_16::yi#10 Self Phi Eliminated (signed word) atan2_16::xi#10 @@ -2563,26 +2696,26 @@ 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#13 -Self Phi Eliminated (byte) NUM_SQUARES#34 -Self Phi Eliminated (byte*) heap_head#51 -Self Phi Eliminated (word*) SQUARES#45 +Self Phi Eliminated (byte) NUM_SQUARES#33 +Self Phi Eliminated (byte*) heap_head#62 +Self Phi Eliminated (word*) SQUARES#44 Self Phi Eliminated (byte) main::bucket_size#1 Self Phi Eliminated (byte) main::bucket_idx#10 Self Phi Eliminated (byte) NUM_SQUARES#24 -Self Phi Eliminated (byte*) heap_head#42 +Self Phi Eliminated (byte*) heap_head#55 Self Phi Eliminated (word*) SQUARES#35 Self Phi Eliminated (byte) NUM_SQUARES#10 -Self Phi Eliminated (byte*) heap_head#19 +Self Phi Eliminated (byte*) heap_head#26 Self Phi Eliminated (word*) SQUARES#13 Self Phi Eliminated (byte*) init_buckets::screen#1 -Self Phi Eliminated (byte*) heap_head#52 -Self Phi Eliminated (byte*) heap_head#38 +Self Phi Eliminated (byte*) heap_head#63 +Self Phi Eliminated (byte*) heap_head#51 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#39 +Self Phi Eliminated (byte*) heap_head#52 Self Phi Eliminated (byte*) init_buckets::screen#3 -Self Phi Eliminated (byte*) heap_head#21 +Self Phi Eliminated (byte*) heap_head#14 Self Phi Eliminated (byte) init_angle_screen::y#2 Self Phi Eliminated (byte*) init_angle_screen::screen_bottomline#2 Self Phi Eliminated (byte*) init_angle_screen::screen_topline#2 @@ -2592,16 +2725,16 @@ Self Phi Eliminated (byte) NUM_SQUARES#11 Self Phi Eliminated (byte*) init_dist_screen::screen_topline#2 Self Phi Eliminated (byte*) init_dist_screen::screen_bottomline#2 Self Phi Eliminated (byte) init_dist_screen::y#3 -Self Phi Eliminated (byte*) heap_head#11 +Self Phi Eliminated (byte*) heap_head#16 Successful SSA optimization Pass2SelfPhiElimination Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2 Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1 Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0 Identical Phi Values (word) bsearch16u::key#1 (word) bsearch16u::key#4 Identical Phi Values (byte) NUM_SQUARES#6 (byte) NUM_SQUARES#3 -Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#32 -Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#1 -Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#15 +Identical Phi Values (byte*) heap_head#38 (byte*) heap_head#44 +Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#20 Identical Phi Values (word*) SQUARES#17 (word*) SQUARES#1 Identical Phi Values (word) sqrt::val#1 (word) sqrt::val#0 Identical Phi Values (word*) SQUARES#10 (word*) SQUARES#15 @@ -2614,52 +2747,57 @@ Identical Phi Values (byte) atan2_16::i#10 (byte) atan2_16::i#2 Identical Phi Values (word) atan2_16::angle#14 (word) atan2_16::angle#12 Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19 +Identical Phi Values (byte*) heap_head#22 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#23 (byte*) heap_head#1 Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0 -Identical Phi Values (byte*) heap_head#28 (byte*) HEAP_TOP#0 +Identical Phi Values (byte*) heap_head#40 (byte*) heap_head#12 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 (byte*) heap_head#24 (byte*) heap_head#16 Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15 -Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#21 +Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#14 Identical Phi Values (byte) main::bucket_idx#13 (byte) main::bucket_idx#6 -Identical Phi Values (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#18 -Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#35 -Identical Phi Values (word*) SQUARES#45 (word*) SQUARES#26 +Identical Phi Values (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#18 +Identical Phi Values (byte*) heap_head#62 (byte*) heap_head#48 +Identical Phi Values (word*) SQUARES#44 (word*) SQUARES#26 Identical Phi Values (byte) main::bucket_size#1 (byte) main::bucket_size#0 Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#13 -Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#34 -Identical Phi Values (byte*) heap_head#42 (byte*) heap_head#51 -Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#45 +Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#33 +Identical Phi Values (byte*) heap_head#55 (byte*) heap_head#62 +Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#44 +Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#1 Identical Phi Values (byte*) init_buckets::screen#6 (byte*) init_buckets::screen#0 -Identical Phi Values (byte*) heap_head#64 (byte*) heap_head#17 +Identical Phi Values (byte*) heap_head#74 (byte*) heap_head#24 Identical Phi Values (byte*) init_buckets::screen#1 (byte*) init_buckets::screen#6 -Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#64 -Identical Phi Values (byte*) heap_head#38 (byte*) heap_head#52 +Identical Phi Values (byte*) heap_head#63 (byte*) heap_head#74 +Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#63 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#13 (byte*) heap_head#1 Identical Phi Values (byte*) init_buckets::screen#2 (byte*) init_buckets::screen#7 -Identical Phi Values (byte*) heap_head#39 (byte*) heap_head#20 +Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#13 Identical Phi Values (byte*) init_buckets::screen#3 (byte*) init_buckets::screen#2 -Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#39 +Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#52 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 Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#5 -Identical Phi Values (byte*) heap_head#32 (byte*) heap_head#28 +Identical Phi Values (byte*) heap_head#44 (byte*) heap_head#40 Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#21 Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0 -Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#16 +Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#21 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#38 +Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#39 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 -Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#67 +Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#77 Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#10 -Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#19 +Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#26 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18 @@ -2667,11 +2805,11 @@ 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#3 (byte) main::bucket_idx#6 Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#18 -Identical Phi Values (byte*) heap_head#36 (byte*) heap_head#35 +Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#48 Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#26 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#18 -Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#35 +Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#48 Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#26 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bsearch16u::$5 [17] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7 @@ -2688,31 +2826,29 @@ Simple Condition (bool~) atan2_16::$20 [157] if((byte) 0==(byte) atan2_16::shift Simple Condition (bool~) atan2_16::$21 [160] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$22 [177] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15 Simple Condition (bool~) atan2_16::$14 [181] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8 -Simple Condition (bool~) main::$3 [218] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4 -Simple Condition (bool~) main::$5 [226] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7 -Simple Condition (bool~) main::$17 [231] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@17 -Simple Condition (bool~) main::$8 [243] if(*((byte*) main::fill#0)==(byte) FILL_CHAR#0) goto main::@9 -Simple Condition (bool~) main::$12 [247] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@8 -Simple Condition (bool~) main::$11 [253] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@9 -Simple Condition (bool~) main::$14 [260] if((word) main::min_offset#2==(word) $ffff) goto main::@7 -Simple Condition (bool~) init_buckets::$1 [292] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 -Simple Condition (bool~) init_buckets::$2 [301] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 -Simple Condition (bool~) init_buckets::$6 [317] if((word) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 -Simple Condition (bool~) init_buckets::$8 [325] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 -Simple Condition (bool~) init_buckets::$11 [341] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 -Simple Condition (bool~) init_angle_screen::$15 [386] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 -Simple Condition (bool~) init_angle_screen::$16 [392] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 -Simple Condition (bool~) init_dist_screen::$3 [408] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -Simple Condition (bool~) init_dist_screen::$11 [429] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -Simple Condition (bool~) init_dist_screen::$20 [459] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 -Simple Condition (bool~) init_dist_screen::$21 [465] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 +Simple Condition (bool~) main::$3 [230] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4 +Simple Condition (bool~) main::$5 [238] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7 +Simple Condition (bool~) main::$17 [243] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@17 +Simple Condition (bool~) main::$8 [255] if(*((byte*) main::fill#0)==(byte) FILL_CHAR#0) goto main::@9 +Simple Condition (bool~) main::$12 [259] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@8 +Simple Condition (bool~) main::$11 [265] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@9 +Simple Condition (bool~) main::$14 [272] if((word) main::min_offset#2==(word) $ffff) goto main::@7 +Simple Condition (bool~) init_buckets::$1 [325] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 +Simple Condition (bool~) init_buckets::$2 [334] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 +Simple Condition (bool~) init_buckets::$6 [350] if((word) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 +Simple Condition (bool~) init_buckets::$8 [358] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 +Simple Condition (bool~) init_buckets::$11 [374] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 +Simple Condition (bool~) init_angle_screen::$15 [419] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 +Simple Condition (bool~) init_angle_screen::$16 [425] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 +Simple Condition (bool~) init_dist_screen::$3 [441] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 +Simple Condition (bool~) init_dist_screen::$11 [462] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 +Simple Condition (bool~) init_dist_screen::$20 [492] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 +Simple Condition (bool~) init_dist_screen::$21 [498] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [177] if((byte) atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [45] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD Constant right-side identified [52] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD -Constant right-side identified [194] (byte[$3e8]) SCREEN_DIST#0 ← { fill( $3e8, 0) } -Constant right-side identified [195] (byte[$3e8]) SCREEN_ANGLE#0 ← { fill( $3e8, 0) } Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) RASTER#0 = (byte*) 53266 Constant (const byte*) BORDERCOL#0 = (byte*) 53280 @@ -2730,8 +2866,8 @@ Constant (const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 = kickasm }} 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 word) malloc::size#1 = $3e8 +Constant (const word) malloc::size#2 = $3e8 Constant (const byte*) SCREEN_FILL#0 = (byte*) 1024 Constant (const byte) FILL_CHAR#0 = '*' Constant (const byte) main::bucket_idx#0 = 0 @@ -2752,33 +2888,25 @@ Constant (const byte) init_dist_screen::y#0 = 0 Constant (const byte) init_dist_screen::x#0 = 0 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::screen#0 = SCREEN_DIST#0 -Successful SSA optimization Pass2ConstantIdentification -Constant value identified { fill( NUM_BUCKETS#0, 0) } in [282] (byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 ← { fill( NUM_BUCKETS#0, 0) } -Constant value identified { fill( NUM_BUCKETS#0, 0) } in [283] (word*[NUM_BUCKETS#0]) BUCKETS#0 ← { fill( NUM_BUCKETS#0, 0) } -Constant value identified { fill( NUM_BUCKETS#0, 0) } in [284] (byte[NUM_BUCKETS#0]) BUCKET_IDX#0 ← { fill( NUM_BUCKETS#0, 0) } -Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [215] if(true) goto main::@4 -if() condition always true - replacing block destination [271] if(true) goto main::@25 +if() condition always true - replacing block destination [227] if(true) goto main::@4 +if() condition always true - replacing block destination [283] if(true) goto main::@25 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [299] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++ -Resolved ranged comparison value [301] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8 -Resolved ranged next value [339] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++ -Resolved ranged comparison value [341] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8 -Resolved ranged next value [390] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++ -Resolved ranged comparison value [392] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d -Resolved ranged next value [463] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ -Resolved ranged comparison value [465] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d -Rewriting conditional comparison [386] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 -Rewriting conditional comparison [459] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 -De-inlining pointer[w] to *(pointer+w) [306] (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) [314] *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5 -De-inlining pointer[w] to *(pointer+w) [333] (word*) init_buckets::bucket#0 ← *((word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13) +Resolved ranged next value [332] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++ +Resolved ranged comparison value [334] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8 +Resolved ranged next value [372] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++ +Resolved ranged comparison value [374] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8 +Resolved ranged next value [423] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++ +Resolved ranged comparison value [425] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d +Resolved ranged next value [496] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ +Resolved ranged comparison value [498] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d +Rewriting conditional comparison [419] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2 +Rewriting conditional comparison [492] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5 +De-inlining pointer[w] to *(pointer+w) [339] (word) malloc::size#6 ← *((byte[]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER +De-inlining pointer[w] to *(pointer+w) [347] *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5 +De-inlining pointer[w] to *(pointer+w) [366] (word*) init_buckets::bucket#0 ← *((word*[]) BUCKETS#0 + (word~) init_buckets::$13) Successful SSA optimization Pass2DeInlineWordDerefIdx Eliminating unused variable - keeping the phi block (byte) NUM_SQUARES#18 -Eliminating unused variable - keeping the phi block (byte*) heap_head#35 +Eliminating unused variable - keeping the phi block (byte*) heap_head#48 Eliminating unused variable - keeping the phi block (word*) SQUARES#26 Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 @@ -2816,53 +2944,50 @@ Self Phi Eliminated (signed word) atan2_16::x#17 Self Phi Eliminated (signed word) atan2_16::y#19 Self Phi Eliminated (byte) main::bucket_idx#6 Self Phi Eliminated (word*) SQUARES#18 -Self Phi Eliminated (byte) NUM_SQUARES#38 -Self Phi Eliminated (byte*) heap_head#67 +Self Phi Eliminated (byte) NUM_SQUARES#39 +Self Phi Eliminated (byte*) heap_head#77 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#38 (const byte) NUM_SQUARES#3 -Identical Phi Values (byte*) heap_head#67 (byte*) heap_head#1 +Identical Phi Values (byte) NUM_SQUARES#39 (const byte) NUM_SQUARES#3 +Identical Phi Values (byte*) heap_head#77 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#1 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 [123] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7 -Constant right-side identified [128] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [138] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [150] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 -Constant right-side identified [169] (byte*) init_angle_screen::screen_topline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -Constant right-side identified [170] (byte*) init_angle_screen::screen_bottomline#0 ← (const byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -Constant right-side identified [203] (byte*) init_dist_screen::screen_bottomline#0 ← (const byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 +Constant right-side identified [134] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7 +Constant right-side identified [136] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE +Constant right-side identified [141] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER +Constant right-side identified [146] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE +Constant right-side identified [151] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [161] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1 +Constant right-side identified [173] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1 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 Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1 Constant (const byte*) main::$20 = COLS#0+$3e7 -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 word) malloc::size#3 = NUM_BUCKETS#0*SIZEOF_BYTE +Constant (const word) malloc::size#4 = NUM_BUCKETS#0*SIZEOF_POINTER +Constant (const word) malloc::size#5 = NUM_BUCKETS#0*SIZEOF_BYTE 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 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 Successful SSA optimization Pass2ConstantIdentification 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 [131] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ -Resolved ranged comparison value [132] 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 [148] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ -Resolved ranged comparison value [149] 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 [153] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ -Resolved ranged comparison value [154] 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 [154] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ +Resolved ranged comparison value [155] 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 [171] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ +Resolved ranged comparison value [172] 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 [176] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ +Resolved ranged comparison value [177] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1 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 @@ -2895,12 +3020,22 @@ Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) 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 [133] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [25] (void*) malloc::return#10 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [90] (void*) malloc::return#11 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [94] (void*) malloc::return#12 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [132] (void*) malloc::return#13 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [136] (void*) malloc::return#14 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [140] (void*) malloc::return#15 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [156] (void*) malloc::return#16 ← (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 [163] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0 -Inlining Noop Cast [166] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$7 keeping init_angle_screen::yw#0 +Inlining Noop Cast [92] (byte[]) SCREEN_DIST#0 ← (byte*)(void*~) $0 keeping SCREEN_DIST#0 +Inlining Noop Cast [96] (byte[]) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 keeping SCREEN_ANGLE#0 +Inlining Noop Cast [134] (byte[]) BUCKET_SIZES#0 ← (byte*)(void*~) $3 keeping BUCKET_SIZES#0 +Inlining Noop Cast [138] (word*[]) BUCKETS#0 ← (word**)(void*~) $5 keeping BUCKETS#0 +Inlining Noop Cast [142] (byte[]) BUCKET_IDX#0 ← (byte*)(void*~) $7 keeping BUCKET_IDX#0 +Inlining Noop Cast [188] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0 +Inlining Noop Cast [191] (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 @@ -2909,18 +3044,23 @@ 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 [96] (byte~) main::$21 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [103] (byte~) main::$22 ← (byte) main::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [131] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [135] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [147] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [151] (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 [160] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2 -Rewriting multiplication to use shift [164] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2 -Rewriting multiplication to use shift [191] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 -Rewriting multiplication to use shift [201] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [107] (byte~) main::$21 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [114] (byte~) main::$22 ← (byte) main::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [154] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [158] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [170] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [174] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [185] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2 +Rewriting multiplication to use shift [189] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2 +Rewriting multiplication to use shift [217] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 +Rewriting multiplication to use shift [227] (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#1 +Inlining constant with var siblings (const word) malloc::size#2 Inlining constant with var siblings (const word) malloc::size#0 +Inlining constant with var siblings (const word) malloc::size#3 +Inlining constant with var siblings (const word) malloc::size#4 +Inlining constant with var siblings (const word) malloc::size#5 Inlining constant with var siblings (const byte) bsearch16u::num#2 Inlining constant with var siblings (const word) init_squares::sqr#0 Inlining constant with var siblings (const byte) init_squares::i#0 @@ -2938,50 +3078,44 @@ Inlining constant with var siblings (const word) init_buckets::i4#0 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 -Inlining constant with var siblings (const byte*) init_angle_screen::screen_topline#0 -Inlining constant with var siblings (const byte*) init_angle_screen::screen_bottomline#0 Inlining constant with var siblings (const byte) init_dist_screen::y#0 Inlining constant with var siblings (const byte) init_dist_screen::x#0 Inlining constant with var siblings (const byte) init_dist_screen::xb#0 -Inlining constant with var siblings (const byte*) init_dist_screen::screen_bottomline#0 Constant inlined init_buckets::i1#0 = (word) 0 Constant inlined init_squares::sqr#0 = (byte) 0 Constant inlined main::bucket_idx#0 = (byte) 0 Constant inlined init_angle_screen::y#0 = (byte) 0 Constant inlined init_angle_screen::x#0 = (byte) 0 Constant inlined atan2_16::angle#0 = (byte) 0 -Constant inlined init_angle_screen::screen_bottomline#0 = (const byte[$3e8]) SCREEN_ANGLE#0+(word)(number) $28*(number) $c Constant inlined init_buckets::i#0 = (byte) 0 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 atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1 Constant inlined main::min_offset#0 = (word) $ffff Constant inlined init_buckets::i3#0 = (byte) 0 Constant inlined init_buckets::i2#0 = (word) 0 Constant inlined init_buckets::i4#0 = (word) 0 -Constant inlined init_buckets::screen#0 = (const byte[$3e8]) SCREEN_DIST#0 +Constant inlined malloc::size#5 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE Constant inlined init_buckets::$0 = (const byte) NUM_BUCKETS#0-(byte) 1 +Constant inlined malloc::size#4 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER +Constant inlined malloc::size#3 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE +Constant inlined malloc::size#2 = (word) $3e8 Constant inlined main::min_angle#0 = (byte) $ff 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 malloc::size#1 = (word) $3e8 Constant inlined main::$20 = (const byte*) COLS#0+(word) $3e7 Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD Constant inlined init_buckets::$3 = (const byte) NUM_BUCKETS#0-(byte) 1 Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD -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 Constant inlined init_squares::i#0 = (byte) 0 Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1 Successful SSA optimization Pass2ConstantInlining -Eliminating unused constant (const byte) SIZEOF_POINTER -Successful SSA optimization PassNEliminateUnusedVars Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10) Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1) Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15) @@ -3007,131 +3141,130 @@ Adding NOP phi() at start of @4 Adding NOP phi() at start of @7 Adding NOP phi() at start of @10 Adding NOP phi() at start of @12 -Adding NOP phi() at start of @13 Adding NOP phi() at start of @16 -Adding NOP phi() at start of @17 +Adding NOP phi() at start of @22 Adding NOP phi() at start of @end -Adding NOP phi() at start of main::@30 -Adding NOP phi() at start of main::@31 Adding NOP phi() at start of main::@32 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of main::@24 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 Adding NOP phi() at start of init_buckets::@6 -Adding NOP phi() at start of init_buckets::@8 -Adding NOP phi() at start of init_angle_screen Adding NOP phi() at start of init_dist_screen -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:73 -Calls in [init_angle_screen] to atan2_16:121 -Calls in [init_dist_screen] to init_squares:217 sqr:227 sqr:238 sqrt:243 -Calls in [sqrt] to bsearch16u:269 -Calls in [init_squares] to malloc:309 +Calls in [] to malloc:5 malloc:8 malloc:11 malloc:14 malloc:17 main:20 +Calls in [main] to init_dist_screen:25 init_angle_screen:27 init_buckets:29 +Calls in [init_buckets] to malloc:87 +Calls in [init_angle_screen] to atan2_16:138 +Calls in [init_dist_screen] to init_squares:234 sqr:246 sqr:257 sqrt:262 +Calls in [sqrt] to bsearch16u:288 +Calls in [init_squares] to malloc:328 Created 54 initial phi equivalence classes -Coalesced [33] main::min_offset#9 ← main::offset#0 -Coalesced [34] main::min_angle#7 ← main::min_angle#1 -Coalesced [48] main::bucket_idx#14 ← main::bucket_idx#1 -Coalesced [49] main::i#6 ← main::i#1 -Coalesced [50] main::min_angle#5 ← main::min_angle#4 -Not coalescing [51] main::min_offset#7 ← main::min_offset#2 -Not coalescing [52] main::min_offset#8 ← main::min_offset#5 -Coalesced (already) [53] main::min_angle#6 ← main::min_angle#2 -Not coalescing [54] main::min_offset#10 ← main::min_offset#5 -Coalesced (already) [55] main::min_angle#8 ← main::min_angle#2 -Coalesced [71] heap_head#72 ← heap_head#1 -Coalesced [72] malloc::size#3 ← malloc::size#1 -Coalesced [100] init_buckets::dist#7 ← init_buckets::dist#3 -Coalesced [101] init_buckets::i4#3 ← init_buckets::i4#1 -Coalesced [102] init_buckets::i3#3 ← init_buckets::i3#1 -Coalesced [103] init_buckets::i2#4 ← init_buckets::i2#1 -Coalesced [104] init_buckets::dist#6 ← init_buckets::dist#1 -Coalesced [105] init_buckets::i1#3 ← init_buckets::i1#1 -Coalesced [106] init_buckets::i#3 ← init_buckets::i#1 -Not coalescing [109] heap_head#1 ← malloc::mem#0 -Coalesced [141] init_angle_screen::y#6 ← init_angle_screen::y#1 -Coalesced [142] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#1 -Coalesced [143] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#1 -Coalesced [144] init_angle_screen::x#4 ← init_angle_screen::x#1 -Coalesced [145] init_angle_screen::xb#4 ← init_angle_screen::xb#1 -Coalesced [148] atan2_16::yi#17 ← atan2_16::$2 -Coalesced [152] atan2_16::xi#14 ← atan2_16::$7 -Coalesced [154] atan2_16::yi#19 ← atan2_16::yi#0 -Coalesced [155] atan2_16::xi#16 ← atan2_16::xi#0 -Coalesced [158] atan2_16::angle#22 ← atan2_16::angle#12 -Coalesced [163] atan2_16::angle#27 ← atan2_16::angle#4 -Coalesced [167] atan2_16::return#5 ← atan2_16::angle#5 -Coalesced [170] atan2_16::return#6 ← atan2_16::angle#11 -Coalesced [171] atan2_16::angle#26 ← atan2_16::angle#1 -Not coalescing [172] atan2_16::shift#5 ← atan2_16::i#2 -Not coalescing [173] atan2_16::xd#10 ← atan2_16::xi#3 -Not coalescing [174] atan2_16::yd#10 ← atan2_16::yi#3 -Coalesced [180] atan2_16::yd#13 ← atan2_16::yd#2 -Coalesced [181] atan2_16::xd#13 ← atan2_16::xd#2 -Coalesced [188] atan2_16::yi#21 ← atan2_16::yi#2 -Coalesced [189] atan2_16::angle#25 ← atan2_16::angle#3 -Coalesced [190] atan2_16::xi#18 ← atan2_16::xi#2 -Coalesced [194] atan2_16::yi#18 ← atan2_16::yi#8 -Coalesced [195] atan2_16::xi#15 ← atan2_16::xi#8 -Coalesced [196] atan2_16::i#12 ← atan2_16::i#1 -Coalesced [197] atan2_16::angle#21 ← atan2_16::angle#13 -Coalesced (already) [198] atan2_16::angle#23 ← atan2_16::angle#13 -Coalesced [203] atan2_16::yi#20 ← atan2_16::yi#1 -Coalesced [204] atan2_16::angle#24 ← atan2_16::angle#2 -Coalesced [205] atan2_16::xi#17 ← atan2_16::xi#1 -Coalesced [206] atan2_16::yd#12 ← atan2_16::yd#3 -Coalesced [207] atan2_16::xd#12 ← atan2_16::xd#3 -Coalesced [211] atan2_16::shift#6 ← atan2_16::shift#1 -Coalesced [212] atan2_16::xd#11 ← atan2_16::xd#1 -Coalesced [213] atan2_16::yd#11 ← atan2_16::yd#1 -Not coalescing [214] atan2_16::xi#13 ← atan2_16::x#0 -Not coalescing [215] atan2_16::yi#16 ← atan2_16::y#0 -Coalesced [223] init_dist_screen::yd#2 ← init_dist_screen::$5 -Coalesced [226] sqr::val#3 ← sqr::val#0 -Coalesced [234] init_dist_screen::xd#2 ← init_dist_screen::$13 -Coalesced [237] sqr::val#4 ← sqr::val#1 -Coalesced [258] init_dist_screen::y#14 ← init_dist_screen::y#1 -Coalesced [259] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1 -Coalesced [260] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1 -Coalesced [261] init_dist_screen::x#8 ← init_dist_screen::x#1 -Coalesced [262] init_dist_screen::xb#8 ← init_dist_screen::xb#1 -Coalesced [264] init_dist_screen::xd#1 ← init_dist_screen::$15 -Coalesced [266] init_dist_screen::yd#1 ← init_dist_screen::$7 -Coalesced [276] bsearch16u::items#10 ← bsearch16u::items#1 -Coalesced [281] bsearch16u::return#9 ← bsearch16u::$2 -Coalesced [283] bsearch16u::return#7 ← bsearch16u::return#2 -Coalesced [286] bsearch16u::return#8 ← bsearch16u::items#2 -Not coalescing [292] bsearch16u::return#6 ← bsearch16u::pivot#0 -Coalesced [296] bsearch16u::num#10 ← bsearch16u::num#1 -Coalesced [297] bsearch16u::items#12 ← bsearch16u::items#0 -Coalesced [300] bsearch16u::num#9 ← bsearch16u::num#0 -Coalesced [301] bsearch16u::items#11 ← bsearch16u::items#8 -Coalesced [302] bsearch16u::num#11 ← bsearch16u::num#3 -Coalesced (already) [303] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced [312] init_squares::squares#4 ← init_squares::squares#0 -Coalesced [322] init_squares::sqr#3 ← init_squares::sqr#1 -Coalesced [323] init_squares::squares#3 ← init_squares::squares#1 -Coalesced [324] init_squares::i#3 ← init_squares::i#1 -Coalesced down to 44 phi equivalence classes +Coalesced [7] heap_head#83 ← heap_head#1 +Coalesced (already) [10] heap_head#82 ← heap_head#1 +Coalesced (already) [13] heap_head#84 ← heap_head#1 +Coalesced (already) [16] heap_head#85 ← heap_head#1 +Coalesced [47] main::min_offset#9 ← main::offset#0 +Coalesced [48] main::min_angle#7 ← main::min_angle#1 +Coalesced [62] main::bucket_idx#14 ← main::bucket_idx#1 +Coalesced [63] main::i#6 ← main::i#1 +Coalesced [64] main::min_angle#5 ← main::min_angle#4 +Not coalescing [65] main::min_offset#7 ← main::min_offset#2 +Not coalescing [66] main::min_offset#8 ← main::min_offset#5 +Coalesced (already) [67] main::min_angle#6 ← main::min_angle#2 +Not coalescing [68] main::min_offset#10 ← main::min_offset#5 +Coalesced (already) [69] main::min_angle#8 ← main::min_angle#2 +Not coalescing [75] init_buckets::dist#6 ← init_buckets::screen#0 +Coalesced (already) [85] heap_head#86 ← heap_head#1 +Coalesced [86] malloc::size#8 ← malloc::size#6 +Not coalescing [99] init_buckets::dist#8 ← init_buckets::screen#0 +Coalesced [114] init_buckets::dist#9 ← init_buckets::dist#3 +Coalesced [115] init_buckets::i4#3 ← init_buckets::i4#1 +Coalesced [116] init_buckets::i3#3 ← init_buckets::i3#1 +Coalesced [117] init_buckets::i2#4 ← init_buckets::i2#1 +Coalesced [118] init_buckets::dist#7 ← init_buckets::dist#1 +Coalesced [119] init_buckets::i1#3 ← init_buckets::i1#1 +Coalesced [120] init_buckets::i#3 ← init_buckets::i#1 +Not coalescing [123] heap_head#1 ← malloc::mem#0 +Coalesced [127] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#0 +Coalesced [128] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#0 +Coalesced [158] init_angle_screen::y#6 ← init_angle_screen::y#1 +Coalesced [159] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1 +Coalesced [160] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1 +Coalesced [161] init_angle_screen::x#4 ← init_angle_screen::x#1 +Coalesced [162] init_angle_screen::xb#4 ← init_angle_screen::xb#1 +Coalesced [165] atan2_16::yi#17 ← atan2_16::$2 +Coalesced [169] atan2_16::xi#14 ← atan2_16::$7 +Coalesced [171] atan2_16::yi#19 ← atan2_16::yi#0 +Coalesced [172] atan2_16::xi#16 ← atan2_16::xi#0 +Coalesced [175] atan2_16::angle#22 ← atan2_16::angle#12 +Coalesced [180] atan2_16::angle#27 ← atan2_16::angle#4 +Coalesced [184] atan2_16::return#5 ← atan2_16::angle#5 +Coalesced [187] atan2_16::return#6 ← atan2_16::angle#11 +Coalesced [188] atan2_16::angle#26 ← atan2_16::angle#1 +Not coalescing [189] atan2_16::shift#5 ← atan2_16::i#2 +Not coalescing [190] atan2_16::xd#10 ← atan2_16::xi#3 +Not coalescing [191] atan2_16::yd#10 ← atan2_16::yi#3 +Coalesced [197] atan2_16::yd#13 ← atan2_16::yd#2 +Coalesced [198] atan2_16::xd#13 ← atan2_16::xd#2 +Coalesced [205] atan2_16::yi#21 ← atan2_16::yi#2 +Coalesced [206] atan2_16::angle#25 ← atan2_16::angle#3 +Coalesced [207] atan2_16::xi#18 ← atan2_16::xi#2 +Coalesced [211] atan2_16::yi#18 ← atan2_16::yi#8 +Coalesced [212] atan2_16::xi#15 ← atan2_16::xi#8 +Coalesced [213] atan2_16::i#12 ← atan2_16::i#1 +Coalesced [214] atan2_16::angle#21 ← atan2_16::angle#13 +Coalesced (already) [215] atan2_16::angle#23 ← atan2_16::angle#13 +Coalesced [220] atan2_16::yi#20 ← atan2_16::yi#1 +Coalesced [221] atan2_16::angle#24 ← atan2_16::angle#2 +Coalesced [222] atan2_16::xi#17 ← atan2_16::xi#1 +Coalesced [223] atan2_16::yd#12 ← atan2_16::yd#3 +Coalesced [224] atan2_16::xd#12 ← atan2_16::xd#3 +Coalesced [228] atan2_16::shift#6 ← atan2_16::shift#1 +Coalesced [229] atan2_16::xd#11 ← atan2_16::xd#1 +Coalesced [230] atan2_16::yd#11 ← atan2_16::yd#1 +Not coalescing [231] atan2_16::xi#13 ← atan2_16::x#0 +Not coalescing [232] atan2_16::yi#16 ← atan2_16::y#0 +Coalesced [236] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0 +Coalesced [237] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0 +Coalesced [242] init_dist_screen::yd#2 ← init_dist_screen::$5 +Coalesced [245] sqr::val#3 ← sqr::val#0 +Coalesced [253] init_dist_screen::xd#2 ← init_dist_screen::$13 +Coalesced [256] sqr::val#4 ← sqr::val#1 +Coalesced [277] init_dist_screen::y#14 ← init_dist_screen::y#1 +Coalesced [278] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1 +Coalesced [279] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1 +Coalesced [280] init_dist_screen::x#8 ← init_dist_screen::x#1 +Coalesced [281] init_dist_screen::xb#8 ← init_dist_screen::xb#1 +Coalesced [283] init_dist_screen::xd#1 ← init_dist_screen::$15 +Coalesced [285] init_dist_screen::yd#1 ← init_dist_screen::$7 +Coalesced [295] bsearch16u::items#10 ← bsearch16u::items#1 +Coalesced [300] bsearch16u::return#9 ← bsearch16u::$2 +Coalesced [302] bsearch16u::return#7 ← bsearch16u::return#2 +Coalesced [305] bsearch16u::return#8 ← bsearch16u::items#2 +Not coalescing [311] bsearch16u::return#6 ← bsearch16u::pivot#0 +Coalesced [315] bsearch16u::num#10 ← bsearch16u::num#1 +Coalesced [316] bsearch16u::items#12 ← bsearch16u::items#0 +Coalesced [319] bsearch16u::num#9 ← bsearch16u::num#0 +Coalesced [320] bsearch16u::items#11 ← bsearch16u::items#8 +Coalesced [321] bsearch16u::num#11 ← bsearch16u::num#3 +Coalesced (already) [322] bsearch16u::items#13 ← bsearch16u::items#2 +Coalesced (already) [327] heap_head#87 ← heap_head#1 +Coalesced [331] init_squares::squares#4 ← init_squares::squares#0 +Coalesced [341] init_squares::sqr#3 ← init_squares::sqr#1 +Coalesced [342] init_squares::squares#3 ← init_squares::squares#1 +Coalesced [343] init_squares::i#3 ← init_squares::i#1 +Coalesced down to 45 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) @22 Culled Empty Block (label) main::@32 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@24 -Culled Empty Block (label) init_buckets::@2 Culled Empty Block (label) init_buckets::@4 Culled Empty Block (label) init_buckets::@6 -Culled Empty Block (label) init_buckets::@8 Culled Empty Block (label) init_buckets::@16 Culled Empty Block (label) init_buckets::@15 Culled Empty Block (label) init_buckets::@14 @@ -3145,13 +3278,19 @@ Culled Empty Block (label) atan2_16::@38 Culled Empty Block (label) atan2_16::@34 Culled Empty Block (label) atan2_16::@36 Culled Empty Block (label) atan2_16::@37 -Culled Empty Block (label) init_dist_screen::@15 Culled Empty Block (label) init_dist_screen::@19 Culled Empty Block (label) init_dist_screen::@20 Culled Empty Block (label) bsearch16u::@1 Culled Empty Block (label) bsearch16u::@18 Culled Empty Block (label) init_squares::@4 -Renumbering block @16 to @1 +Renumbering block @12 to @1 +Renumbering block @13 to @2 +Renumbering block @16 to @3 +Renumbering block @17 to @4 +Renumbering block @18 to @5 +Renumbering block @19 to @6 +Renumbering block @20 to @7 +Renumbering block @21 to @8 Renumbering block bsearch16u::@2 to bsearch16u::@1 Renumbering block bsearch16u::@3 to bsearch16u::@2 Renumbering block bsearch16u::@6 to bsearch16u::@3 @@ -3193,23 +3332,23 @@ Renumbering block main::@31 to main::@15 Renumbering block main::@33 to main::@16 Renumbering block main::@34 to main::@17 Renumbering block main::@35 to main::@18 -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 -Renumbering block init_buckets::@9 to init_buckets::@5 -Renumbering block init_buckets::@11 to init_buckets::@6 +Renumbering block init_buckets::@5 to init_buckets::@4 +Renumbering block init_buckets::@7 to init_buckets::@5 +Renumbering block init_buckets::@8 to init_buckets::@6 +Renumbering block init_buckets::@9 to init_buckets::@7 +Renumbering block init_buckets::@11 to init_buckets::@8 Renumbering block init_angle_screen::@5 to init_angle_screen::@4 Renumbering block init_dist_screen::@11 to init_dist_screen::@9 -Renumbering block init_dist_screen::@16 to init_dist_screen::@10 -Renumbering block init_dist_screen::@17 to init_dist_screen::@11 -Renumbering block init_dist_screen::@18 to init_dist_screen::@12 +Renumbering block init_dist_screen::@15 to init_dist_screen::@10 +Renumbering block init_dist_screen::@16 to init_dist_screen::@11 +Renumbering block init_dist_screen::@17 to init_dist_screen::@12 +Renumbering block init_dist_screen::@18 to init_dist_screen::@13 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 +Adding NOP phi() at start of @2 +Adding NOP phi() at start of @3 Adding NOP phi() at start of @end -Adding NOP phi() at start of main::@14 -Adding NOP phi() at start of main::@15 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 Adding NOP phi() at start of bsearch16u Adding NOP phi() at start of init_squares @@ -3220,460 +3359,501 @@ FINAL CONTROL FLOW GRAPH to:@1 @1: scope:[] from @begin [1] phi() - [2] call main + [2] call malloc + to:@4 +@4: scope:[] from @1 + [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 + [4] call malloc + to:@5 +@5: scope:[] from @4 + [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 + to:@2 +@2: scope:[] from @5 + [6] phi() + [7] call malloc + to:@6 +@6: scope:[] from @2 + [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 + [9] call malloc + to:@7 +@7: scope:[] from @6 + [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 + [11] call malloc + to:@8 +@8: scope:[] from @7 + [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 + to:@3 +@3: scope:[] from @8 + [13] phi() + [14] call main to:@end -@end: scope:[] from @1 - [3] phi() -main: scope:[main] from @1 +@end: scope:[] from @3 + [15] phi() +main: scope:[main] from @3 asm { sei } - [5] call init_dist_screen + [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + [18] call init_dist_screen to:main::@14 main::@14: scope:[main] from main - [6] phi() - [7] call init_angle_screen + [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 + [20] call init_angle_screen to:main::@15 main::@15: scope:[main] from main::@14 - [8] phi() - [9] call init_buckets + [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + [22] call init_buckets to:main::@1 main::@1: scope:[main] from main::@10 main::@11 main::@15 - [10] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 ) + [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#1 main::@15/(byte) 0 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 - [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 + [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) - [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 - [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) - [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) - [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 + [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) + [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 + [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) + [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) + [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@16 main::@3 - [17] (word) main::min_offset#5 ← phi( main::@3/(word) $ffff main::@16/(word~) main::min_offset#7 ) - [17] (byte) main::min_angle#2 ← phi( main::@3/(byte) $ff main::@16/(byte) main::min_angle#4 ) - [17] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@16/(byte) main::i#1 ) - [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 - [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) - [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 - [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 + [30] (word) main::min_offset#5 ← phi( main::@3/(word) $ffff main::@16/(word~) main::min_offset#7 ) + [30] (byte) main::min_angle#2 ← phi( main::@3/(byte) $ff main::@16/(byte) main::min_angle#4 ) + [30] (byte) main::i#2 ← phi( main::@3/(byte) 0 main::@16/(byte) main::i#1 ) + [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 + [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) + [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 + [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 to:main::@7 main::@7: scope:[main] from main::@5 - [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 - [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 + [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 + [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 to:main::@8 main::@8: scope:[main] from main::@7 - [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) + [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) to:main::@6 main::@6: scope:[main] from main::@17 main::@18 main::@8 - [25] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) - [25] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 ) - [26] (byte) main::i#1 ← ++ (byte) main::i#2 - [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 + [38] (byte) main::min_angle#4 ← phi( main::@17/(byte) main::min_angle#2 main::@8/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) + [38] (word) main::min_offset#2 ← phi( main::@17/(word~) main::min_offset#8 main::@8/(word) main::offset#0 main::@18/(word~) main::min_offset#10 ) + [39] (byte) main::i#1 ← ++ (byte) main::i#2 + [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 to:main::@9 main::@9: scope:[main] from main::@6 - [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 + [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 to:main::@10 main::@10: scope:[main] from main::@9 - [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 - [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 - [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 + [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 + [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) to:main::@1 main::@4: scope:[main] from main::@3 main::@9 - [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 - [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 + [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 + [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 to:main::@12 main::@12: scope:[main] from main::@4 - [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) to:main::@13 main::@13: scope:[main] from main::@12 main::@13 - [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) + [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) to:main::@13 main::@11: scope:[main] from main::@4 - [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) + [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) to:main::@1 main::@16: scope:[main] from main::@6 - [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 + [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 to:main::@5 main::@17: scope:[main] from main::@7 - [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 + [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 to:main::@6 main::@18: scope:[main] from main::@5 - [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 + [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 to:main::@6 init_buckets: scope:[init_buckets] from main::@15 - [40] phi() + [53] phi() to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - [41] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) - [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 - [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 - [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 + [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) + [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 + [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 + [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 to:init_buckets::@2 -init_buckets::@2: scope:[init_buckets] from init_buckets::@1 init_buckets::@2 - [45] (word) init_buckets::i1#2 ← phi( init_buckets::@1/(word) 0 init_buckets::@2/(word) init_buckets::i1#1 ) - [45] (byte*) init_buckets::dist#4 ← phi( init_buckets::@1/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@2/(byte*) init_buckets::dist#1 ) - [46] *((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)) - [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 - [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 - [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 +init_buckets::@2: scope:[init_buckets] from init_buckets::@1 + [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 to:init_buckets::@3 -init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@6 - [50] (word) init_buckets::i2#2 ← phi( init_buckets::@6/(word) init_buckets::i2#1 init_buckets::@2/(word) 0 ) - [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 - [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 - [53] call malloc - to:init_buckets::@6 -init_buckets::@6: scope:[init_buckets] from init_buckets::@3 - [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 - [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 - [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 - [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 - [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 - [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 +init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 + [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 ) + [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*~) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 ) + [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) + [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 + [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 + [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 to:init_buckets::@4 -init_buckets::@4: scope:[init_buckets] from init_buckets::@4 init_buckets::@6 - [60] (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) 0 init_buckets::@4/(byte) init_buckets::i3#1 ) - [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 - [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 - [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 +init_buckets::@4: scope:[init_buckets] from init_buckets::@3 init_buckets::@8 + [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 ) + [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 + [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 + [67] call malloc + to:init_buckets::@8 +init_buckets::@8: scope:[init_buckets] from init_buckets::@4 + [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 + [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 + [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 + [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 + [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 to:init_buckets::@5 -init_buckets::@5: scope:[init_buckets] from init_buckets::@4 init_buckets::@5 - [64] (word) init_buckets::i4#2 ← phi( init_buckets::@4/(word) 0 init_buckets::@5/(word) init_buckets::i4#1 ) - [64] (byte*) init_buckets::dist#5 ← phi( init_buckets::@4/(const byte[$3e8]) SCREEN_DIST#0 init_buckets::@5/(byte*) init_buckets::dist#3 ) - [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 - [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 - [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 - [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) - [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 - [71] (byte~) init_buckets::$14 ← *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 - [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 - [73] *((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) - [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 - [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 - [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 +init_buckets::@5: scope:[init_buckets] from init_buckets::@5 init_buckets::@8 + [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 ) + [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 + [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 + [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 + to:init_buckets::@6 +init_buckets::@6: scope:[init_buckets] from init_buckets::@5 + [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 + to:init_buckets::@7 +init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 + [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 ) + [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*~) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 ) + [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) + [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 + [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 + [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 + [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) + [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 + [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 + [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 + [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) + [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 + [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 + [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 to:init_buckets::@return -init_buckets::@return: scope:[init_buckets] from init_buckets::@5 - [77] return +init_buckets::@return: scope:[init_buckets] from init_buckets::@7 + [92] return to:@return -malloc: scope:[malloc] from init_buckets::@3 init_squares - [78] (word) malloc::size#2 ← phi( init_buckets::@3/(word) malloc::size#1 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [78] (byte*) heap_head#13 ← phi( init_buckets::@3/(byte*) heap_head#1 init_squares/(const byte*) HEAP_TOP#0 ) - [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 - [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 +malloc: scope:[malloc] from @1 @2 @4 @6 @7 init_buckets::@4 init_squares + [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP#0 @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) + [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 + [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [81] return + [96] return to:@return init_angle_screen: scope:[init_angle_screen] from main::@14 - [82] phi() + [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@3 - [83] (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 ) - [83] (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 ) - [83] (byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@3/(byte) init_angle_screen::y#1 ) + [99] (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#1 ) + [99] (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#1 ) + [99] (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 - [84] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) - [84] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) - [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 - [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 - [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 - [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 - [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 - [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [92] call atan2_16 - [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 ) + [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 ) + [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 + [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 + [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 + [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 + [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 + [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [108] call atan2_16 + [109] (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 - [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 - [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 - [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 - [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 - [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 - [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 + [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 + [113] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 + [115] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 + [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [117] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 + [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [119] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [122] 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 - [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 - [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 - [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 - [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 + [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 + [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 + [126] 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 - [111] return + [127] return to:@return atan2_16: scope:[atan2_16] from init_angle_screen::@2 - [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [128] 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 - [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [129] (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 - [114] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [131] 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 - [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [132] (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 - [117] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [133] (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 - [118] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [118] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [118] (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 ) - [118] (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 ) - [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [134] (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 ) + [134] (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 ) + [135] 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 - [120] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [138] 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 - [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [139] (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 - [124] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [141] 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 - [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [142] (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 - [127] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [143] (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 - [128] return + [144] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [147] (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 - [132] (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 ) - [132] (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 ) - [132] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [148] (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 ) + [148] (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 ) + [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [149] 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 - [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [150] 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 - [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [152] (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 - [137] (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 ) - [137] (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 ) - [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [153] (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 ) + [153] (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 ) + [154] 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 - [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 - [142] (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) + [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 + [158] (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 - [143] (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 ) - [143] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [143] (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 ) - [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [145] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 + [159] (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 ) + [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [159] (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 ) + [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [161] 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 - [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [149] (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) + [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [165] (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 - [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [168] (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 - [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [169] (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 - [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [170] (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 - [155] phi() - [156] call init_squares + [171] phi() + [172] call init_squares + to:init_dist_screen::@10 +init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen + [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 -init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen init_dist_screen::@9 - [157] (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 ) - [157] (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 ) - [157] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen/(byte) 0 ) - [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 +init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@9 + [174] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#0 ) + [174] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen#0 ) + [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 ) + [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [176] 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 - [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [177] (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 - [161] (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 ) - [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [163] call sqr - [164] (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 - [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + [178] (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 ) + [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [180] call sqr + [181] (word) sqr::return#2 ← (word) sqr::return#0 + to:init_dist_screen::@11 +init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@4 + [182] (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 - [166] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@10/(byte) $27 init_dist_screen::@12/(byte) init_dist_screen::xb#1 ) - [166] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@10/(byte) 0 init_dist_screen::@12/(byte) init_dist_screen::x#1 ) - [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 +init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@13 + [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 ) + [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 ) + [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 + [185] 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 - [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [186] (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 - [170] (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 ) - [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [172] call sqr - [173] (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 - [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [177] call sqrt - [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [187] (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 ) + [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [189] call sqr + [190] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@12 -init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@11 - [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 - [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 +init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@8 + [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [194] call sqrt + [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + to:init_dist_screen::@13 +init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@12 + [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 + [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [203] 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 - [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 - [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 - [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 +init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@13 + [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 + [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 + [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [207] 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 - [191] return + [208] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [209] (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 - [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [210] (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 - [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [196] call bsearch16u - [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 +sqrt: scope:[sqrt] from init_dist_screen::@12 + [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [213] call bsearch16u + [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [202] return + [219] return to:@return bsearch16u: scope:[bsearch16u] from sqrt - [203] phi() + [220] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [204] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [204] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 + [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) + [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) + [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [224] (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 - [208] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [225] (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 - [209] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [210] return + [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [227] return to:@return bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 + [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 + [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@8 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 + [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 + [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 to:bsearch16u::@9 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 to:bsearch16u::@7 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [220] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [220] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 + [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) + [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) + [238] (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 - [222] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) - [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [239] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) + [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [225] return + [242] return to:@return init_squares: scope:[init_squares] from init_dist_screen - [226] phi() - [227] call malloc + [243] phi() + [244] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [246] (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 - [230] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [230] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [230] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [254] 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 - [238] return + [255] return to:@return +null depth in calling loop Loop head: init_buckets::@4 tails: init_buckets::@8 blocks: init_buckets::@8 init_buckets::@4 in scope malloc VARIABLE REGISTER WEIGHTS (byte*) BORDERCOL -(word*[NUM_BUCKETS#0]) BUCKETS -(byte[NUM_BUCKETS#0]) BUCKET_IDX -(byte[NUM_BUCKETS#0]) BUCKET_SIZES +(word*[]) BUCKETS +(void*) BUCKETS#0 0.02531645569620253 +(byte[]) BUCKET_IDX +(void*) BUCKET_IDX#0 0.0425531914893617 +(byte[]) BUCKET_SIZES +(void*) BUCKET_SIZES#0 0.024691358024691357 (byte*) COLS (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16 (byte) CORDIC_ITERATIONS_16 @@ -3682,11 +3862,13 @@ VARIABLE REGISTER WEIGHTS (byte) NUM_BUCKETS (byte) NUM_SQUARES (byte*) RASTER -(byte[$3e8]) SCREEN_ANGLE -(byte[$3e8]) SCREEN_DIST +(byte[]) SCREEN_ANGLE +(void*) SCREEN_ANGLE#0 0.045454545454545456 +(byte[]) SCREEN_DIST +(void*) SCREEN_DIST#0 0.125 (byte*) SCREEN_FILL (word*) SQUARES -(void*) SQUARES#1 0.03278688524590164 +(void*) SQUARES#1 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 4.0 (byte~) atan2_16::$23 2002.0 @@ -3768,8 +3950,8 @@ VARIABLE REGISTER WEIGHTS (word*) bsearch16u::return#3 4.0 (word*~) bsearch16u::return#6 4.0 (byte*) heap_head -(byte*) heap_head#1 0.17105263157894737 -(byte*) heap_head#13 13.0 +(byte*) heap_head#1 0.2446808510638298 +(byte*) heap_head#18 23.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$10 202.0 (byte~) init_angle_screen::$12 202.0 @@ -3783,12 +3965,15 @@ VARIABLE REGISTER WEIGHTS (word) init_angle_screen::angle_w (word) init_angle_screen::angle_w#0 202.0 (byte*) init_angle_screen::screen +(byte*) init_angle_screen::screen#0 3.0 (byte*) init_angle_screen::screen_bottomline +(byte*) init_angle_screen::screen_bottomline#0 4.0 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#5 8.959999999999999 +(byte*) init_angle_screen::screen_bottomline#5 9.040000000000001 (byte*) init_angle_screen::screen_topline +(byte*) init_angle_screen::screen_topline#0 2.0 (byte*) init_angle_screen::screen_topline#1 5.5 -(byte*) init_angle_screen::screen_topline#5 9.333333333333334 +(byte*) init_angle_screen::screen_topline#5 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 (byte) init_angle_screen::x#2 25.25 @@ -3817,8 +4002,10 @@ VARIABLE REGISTER WEIGHTS (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 4.4 +(byte*) init_buckets::dist#4 23.0 +(byte*) init_buckets::dist#5 4.6000000000000005 +(byte*~) init_buckets::dist#6 4.0 +(byte*~) init_buckets::dist#8 4.0 (byte) init_buckets::distance (byte) init_buckets::distance#0 5.5 (byte) init_buckets::i @@ -3837,6 +4024,7 @@ VARIABLE REGISTER WEIGHTS (word) init_buckets::i4#1 16.5 (word) init_buckets::i4#2 2.0 (byte*) init_buckets::screen +(byte*) init_buckets::screen#0 0.42500000000000004 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$13 202.0 (byte~) init_dist_screen::$15 202.0 @@ -3847,12 +4035,14 @@ VARIABLE REGISTER WEIGHTS (word) init_dist_screen::ds (word) init_dist_screen::ds#0 202.0 (byte*) init_dist_screen::screen +(byte*) init_dist_screen::screen#0 1.5 (byte*) init_dist_screen::screen_bottomline +(byte*) init_dist_screen::screen_bottomline#0 4.0 (byte*) init_dist_screen::screen_bottomline#1 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#10 6.787878787878788 +(byte*) init_dist_screen::screen_bottomline#10 6.848484848484849 (byte*) init_dist_screen::screen_topline (byte*) init_dist_screen::screen_topline#1 5.5 -(byte*) init_dist_screen::screen_topline#10 7.0 +(byte*) init_dist_screen::screen_topline#10 7.0625 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 101.0 (byte) init_dist_screen::x#2 26.578947368421055 @@ -3920,11 +4110,11 @@ VARIABLE REGISTER WEIGHTS (word) main::offset#0 67.33333333333333 (void*()) malloc((word) malloc::size) (byte*) malloc::mem -(byte*) malloc::mem#0 0.8 +(byte*) malloc::mem#0 0.4 (void*) malloc::return (word) malloc::size -(word) malloc::size#1 22.0 -(word) malloc::size#2 13.0 +(word) malloc::size#6 22.0 +(word) malloc::size#7 13.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 4.0 (word) sqr::return @@ -3954,17 +4144,17 @@ Initial phi equivalence classes [ main::min_offset#5 main::min_offset#7 ] [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] [ init_buckets::i#2 init_buckets::i#1 ] -[ init_buckets::dist#4 init_buckets::dist#1 ] +[ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] [ init_buckets::i1#2 init_buckets::i1#1 ] [ init_buckets::i2#2 init_buckets::i2#1 ] [ init_buckets::i3#2 init_buckets::i3#1 ] -[ init_buckets::dist#5 init_buckets::dist#3 ] +[ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] [ init_buckets::i4#2 init_buckets::i4#1 ] -[ heap_head#13 heap_head#1 ] -[ malloc::size#2 malloc::size#1 ] +[ heap_head#18 heap_head#1 ] +[ malloc::size#7 malloc::size#6 ] [ init_angle_screen::y#4 init_angle_screen::y#1 ] -[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] +[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::x#2 init_angle_screen::x#1 ] [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] [ 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 ] @@ -3976,8 +4166,8 @@ Initial phi equivalence classes [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] [ init_dist_screen::y#10 init_dist_screen::y#1 ] -[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] +[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] [ init_dist_screen::x#2 init_dist_screen::x#1 ] [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] @@ -3988,6 +4178,13 @@ 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 SCREEN_DIST#0 to zero page equivalence class [ SCREEN_DIST#0 ] +Added variable SCREEN_ANGLE#0 to zero page equivalence class [ SCREEN_ANGLE#0 ] +Added variable BUCKET_SIZES#0 to zero page equivalence class [ BUCKET_SIZES#0 ] +Added variable BUCKETS#0 to zero page equivalence class [ BUCKETS#0 ] +Added variable BUCKET_IDX#0 to zero page equivalence class [ BUCKET_IDX#0 ] +Added variable init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ] +Added variable init_buckets::screen#0 to zero page equivalence class [ init_buckets::screen#0 ] Added variable main::$21 to zero page equivalence class [ main::$21 ] Added variable main::bucket#0 to zero page equivalence class [ main::bucket#0 ] Added variable main::bucket_size#0 to zero page equivalence class [ main::bucket_size#0 ] @@ -4055,17 +4252,17 @@ Complete equivalence classes [ main::min_offset#5 main::min_offset#7 ] [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] [ init_buckets::i#2 init_buckets::i#1 ] -[ init_buckets::dist#4 init_buckets::dist#1 ] +[ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] [ init_buckets::i1#2 init_buckets::i1#1 ] [ init_buckets::i2#2 init_buckets::i2#1 ] [ init_buckets::i3#2 init_buckets::i3#1 ] -[ init_buckets::dist#5 init_buckets::dist#3 ] +[ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] [ init_buckets::i4#2 init_buckets::i4#1 ] -[ heap_head#13 heap_head#1 ] -[ malloc::size#2 malloc::size#1 ] +[ heap_head#18 heap_head#1 ] +[ malloc::size#7 malloc::size#6 ] [ init_angle_screen::y#4 init_angle_screen::y#1 ] -[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +[ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] +[ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] [ init_angle_screen::x#2 init_angle_screen::x#1 ] [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] [ 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 ] @@ -4077,8 +4274,8 @@ Complete equivalence classes [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] [ init_dist_screen::y#10 init_dist_screen::y#1 ] -[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +[ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] +[ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] [ init_dist_screen::x#2 init_dist_screen::x#1 ] [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] @@ -4089,6 +4286,13 @@ 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 ] +[ SCREEN_DIST#0 ] +[ SCREEN_ANGLE#0 ] +[ BUCKET_SIZES#0 ] +[ BUCKETS#0 ] +[ BUCKET_IDX#0 ] +[ init_angle_screen::screen#0 ] +[ init_buckets::screen#0 ] [ main::$21 ] [ main::bucket#0 ] [ main::bucket_size#0 ] @@ -4155,17 +4359,17 @@ Allocated zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] Allocated zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] Allocated zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] Allocated zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] -Allocated zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ] +Allocated zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] Allocated zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] Allocated zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] Allocated zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] -Allocated zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] +Allocated zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] Allocated zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] -Allocated zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] -Allocated zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] +Allocated zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] +Allocated zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] Allocated zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Allocated zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -Allocated zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Allocated zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] +Allocated zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Allocated zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Allocated 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 ] @@ -4177,8 +4381,8 @@ Allocated zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 Allocated zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] Allocated zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] Allocated zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Allocated zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -Allocated zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +Allocated zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] +Allocated zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] Allocated zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] Allocated zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Allocated zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] @@ -4189,66 +4393,73 @@ Allocated zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] Allocated zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] Allocated zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] Allocated zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] -Allocated zp ZP_BYTE:64 [ main::$21 ] -Allocated zp ZP_WORD:65 [ main::bucket#0 ] -Allocated zp ZP_BYTE:67 [ main::bucket_size#0 ] -Allocated zp ZP_BYTE:68 [ main::$22 ] -Allocated zp ZP_WORD:69 [ main::fill#0 ] -Allocated zp ZP_WORD:71 [ main::angle#0 ] -Allocated zp ZP_WORD:73 [ main::fill1#0 ] -Allocated zp ZP_WORD:75 [ init_buckets::$15 ] -Allocated zp ZP_WORD:77 [ init_buckets::$5 ] -Allocated zp ZP_WORD:79 [ init_buckets::$12 ] -Allocated zp ZP_WORD:81 [ init_buckets::$16 ] -Allocated zp ZP_BYTE:83 [ init_buckets::distance#0 ] -Allocated zp ZP_WORD:84 [ init_buckets::$9 ] -Allocated zp ZP_WORD:86 [ init_buckets::$13 ] -Allocated zp ZP_WORD:88 [ init_buckets::$17 ] -Allocated zp ZP_WORD:90 [ init_buckets::bucket#0 ] -Allocated zp ZP_WORD:92 [ init_buckets::$10 ] -Allocated zp ZP_BYTE:94 [ init_buckets::$14 ] -Allocated zp ZP_WORD:95 [ malloc::mem#0 ] -Allocated zp ZP_BYTE:97 [ init_angle_screen::$2 ] -Allocated zp ZP_BYTE:98 [ init_angle_screen::$3 ] -Allocated zp ZP_WORD:99 [ init_angle_screen::xw#0 ] -Allocated zp ZP_BYTE:101 [ init_angle_screen::$6 ] -Allocated zp ZP_WORD:102 [ init_angle_screen::yw#0 ] -Allocated zp ZP_WORD:104 [ atan2_16::x#0 ] -Allocated zp ZP_WORD:106 [ atan2_16::y#0 ] -Allocated zp ZP_WORD:108 [ atan2_16::return#2 ] -Allocated zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] -Allocated zp ZP_WORD:112 [ init_angle_screen::$10 ] -Allocated zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] -Allocated zp ZP_BYTE:115 [ init_angle_screen::$12 ] -Allocated zp ZP_BYTE:116 [ init_angle_screen::$13 ] -Allocated zp ZP_BYTE:117 [ init_angle_screen::$14 ] -Allocated zp ZP_BYTE:118 [ atan2_16::$24 ] -Allocated zp ZP_BYTE:119 [ atan2_16::$23 ] -Allocated zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] -Allocated zp ZP_WORD:121 [ sqr::return#2 ] -Allocated zp ZP_WORD:123 [ init_dist_screen::yds#0 ] -Allocated zp ZP_BYTE:125 [ init_dist_screen::x2#0 ] -Allocated zp ZP_WORD:126 [ sqr::return#3 ] -Allocated zp ZP_WORD:128 [ init_dist_screen::xds#0 ] -Allocated zp ZP_WORD:130 [ init_dist_screen::ds#0 ] -Allocated zp ZP_WORD:132 [ sqrt::val#0 ] -Allocated zp ZP_BYTE:134 [ sqrt::return#2 ] -Allocated zp ZP_BYTE:135 [ init_dist_screen::d#0 ] -Allocated zp ZP_WORD:136 [ bsearch16u::key#0 ] -Allocated zp ZP_WORD:138 [ bsearch16u::return#3 ] -Allocated zp ZP_WORD:140 [ sqrt::found#0 ] -Allocated zp ZP_WORD:142 [ sqrt::$3 ] -Allocated zp ZP_WORD:144 [ sqrt::$1 ] -Allocated zp ZP_BYTE:146 [ sqrt::return#0 ] -Allocated zp ZP_BYTE:147 [ bsearch16u::$6 ] -Allocated zp ZP_BYTE:148 [ bsearch16u::$16 ] -Allocated zp ZP_WORD:149 [ bsearch16u::pivot#0 ] -Allocated zp ZP_WORD:151 [ bsearch16u::result#0 ] -Allocated zp ZP_BYTE:153 [ sqr::$0 ] -Allocated zp ZP_WORD:154 [ sqr::return#0 ] -Allocated zp ZP_WORD:156 [ SQUARES#1 ] -Allocated zp ZP_BYTE:158 [ init_squares::$3 ] -Allocated zp ZP_BYTE:159 [ init_squares::$4 ] +Allocated zp ZP_WORD:64 [ SCREEN_DIST#0 ] +Allocated zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] +Allocated zp ZP_WORD:68 [ BUCKET_SIZES#0 ] +Allocated zp ZP_WORD:70 [ BUCKETS#0 ] +Allocated zp ZP_WORD:72 [ BUCKET_IDX#0 ] +Allocated zp ZP_WORD:74 [ init_angle_screen::screen#0 ] +Allocated zp ZP_WORD:76 [ init_buckets::screen#0 ] +Allocated zp ZP_BYTE:78 [ main::$21 ] +Allocated zp ZP_WORD:79 [ main::bucket#0 ] +Allocated zp ZP_BYTE:81 [ main::bucket_size#0 ] +Allocated zp ZP_BYTE:82 [ main::$22 ] +Allocated zp ZP_WORD:83 [ main::fill#0 ] +Allocated zp ZP_WORD:85 [ main::angle#0 ] +Allocated zp ZP_WORD:87 [ main::fill1#0 ] +Allocated zp ZP_WORD:89 [ init_buckets::$15 ] +Allocated zp ZP_WORD:91 [ init_buckets::$5 ] +Allocated zp ZP_WORD:93 [ init_buckets::$12 ] +Allocated zp ZP_WORD:95 [ init_buckets::$16 ] +Allocated zp ZP_BYTE:97 [ init_buckets::distance#0 ] +Allocated zp ZP_WORD:98 [ init_buckets::$9 ] +Allocated zp ZP_WORD:100 [ init_buckets::$13 ] +Allocated zp ZP_WORD:102 [ init_buckets::$17 ] +Allocated zp ZP_WORD:104 [ init_buckets::bucket#0 ] +Allocated zp ZP_WORD:106 [ init_buckets::$10 ] +Allocated zp ZP_BYTE:108 [ init_buckets::$14 ] +Allocated zp ZP_WORD:109 [ malloc::mem#0 ] +Allocated zp ZP_BYTE:111 [ init_angle_screen::$2 ] +Allocated zp ZP_BYTE:112 [ init_angle_screen::$3 ] +Allocated zp ZP_WORD:113 [ init_angle_screen::xw#0 ] +Allocated zp ZP_BYTE:115 [ init_angle_screen::$6 ] +Allocated zp ZP_WORD:116 [ init_angle_screen::yw#0 ] +Allocated zp ZP_WORD:118 [ atan2_16::x#0 ] +Allocated zp ZP_WORD:120 [ atan2_16::y#0 ] +Allocated zp ZP_WORD:122 [ atan2_16::return#2 ] +Allocated zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] +Allocated zp ZP_WORD:126 [ init_angle_screen::$10 ] +Allocated zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] +Allocated zp ZP_BYTE:129 [ init_angle_screen::$12 ] +Allocated zp ZP_BYTE:130 [ init_angle_screen::$13 ] +Allocated zp ZP_BYTE:131 [ init_angle_screen::$14 ] +Allocated zp ZP_BYTE:132 [ atan2_16::$24 ] +Allocated zp ZP_BYTE:133 [ atan2_16::$23 ] +Allocated zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] +Allocated zp ZP_WORD:135 [ sqr::return#2 ] +Allocated zp ZP_WORD:137 [ init_dist_screen::yds#0 ] +Allocated zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] +Allocated zp ZP_WORD:140 [ sqr::return#3 ] +Allocated zp ZP_WORD:142 [ init_dist_screen::xds#0 ] +Allocated zp ZP_WORD:144 [ init_dist_screen::ds#0 ] +Allocated zp ZP_WORD:146 [ sqrt::val#0 ] +Allocated zp ZP_BYTE:148 [ sqrt::return#2 ] +Allocated zp ZP_BYTE:149 [ init_dist_screen::d#0 ] +Allocated zp ZP_WORD:150 [ bsearch16u::key#0 ] +Allocated zp ZP_WORD:152 [ bsearch16u::return#3 ] +Allocated zp ZP_WORD:154 [ sqrt::found#0 ] +Allocated zp ZP_WORD:156 [ sqrt::$3 ] +Allocated zp ZP_WORD:158 [ sqrt::$1 ] +Allocated zp ZP_BYTE:160 [ sqrt::return#0 ] +Allocated zp ZP_BYTE:161 [ bsearch16u::$6 ] +Allocated zp ZP_BYTE:162 [ bsearch16u::$16 ] +Allocated zp ZP_WORD:163 [ bsearch16u::pivot#0 ] +Allocated zp ZP_WORD:165 [ bsearch16u::result#0 ] +Allocated zp ZP_BYTE:167 [ sqr::$0 ] +Allocated zp ZP_WORD:168 [ sqr::return#0 ] +Allocated zp ZP_WORD:170 [ SQUARES#1 ] +Allocated zp ZP_BYTE:172 [ init_squares::$3 ] +Allocated zp ZP_BYTE:173 [ init_squares::$4 ] INITIAL ASM // File Comments @@ -4260,6 +4471,8 @@ INITIAL ASM .pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 + .const SIZEOF_BYTE = 1 + .const SIZEOF_POINTER = 2 .label RASTER = $d012 .label BORDERCOL = $d020 // Color Ram @@ -4268,7 +4481,6 @@ INITIAL ASM .label HEAP_TOP = $a000 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // = malloc(1000); // Screen containing angle to center .label SCREEN_FILL = $400 // Char to fill with @@ -4277,7 +4489,19 @@ INITIAL ASM .const NUM_BUCKETS = $30 .const NUM_SQUARES = $30 .label heap_head = $15 - .label SQUARES = $9c + .label SQUARES = $aa + // Screen containing distance to center + .label SCREEN_DIST = $40 + // Screen containing angle to center + .label SCREEN_ANGLE = $42 + // Array containing the bucket size for each of the distance buckets + .label BUCKET_SIZES = $44 + // Buckets containing screen indices for each distance from the center. + // BUCKETS[dist] is an array of words containing screen indices. + // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] + .label BUCKETS = $46 + // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) + .label BUCKET_IDX = $48 // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4285,56 +4509,169 @@ b1_from_bbegin: jmp b1 // @1 b1: - // [2] call main + // [2] call malloc + // [93] phi from @1 to malloc [phi:@1->malloc] +malloc_from_b1: + // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 + lda #HEAP_TOP + sta heap_head+1 + jsr malloc + jmp b4 + // @4 +b4: + // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta SCREEN_DIST + lda malloc.mem+1 + sta SCREEN_DIST+1 + // [4] call malloc + // [93] phi from @4 to malloc [phi:@4->malloc] +malloc_from_b4: + // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy + jsr malloc + jmp b5 + // @5 +b5: + // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta SCREEN_ANGLE + lda malloc.mem+1 + sta SCREEN_ANGLE+1 + // [6] phi from @5 to @2 [phi:@5->@2] +b2_from_b5: + jmp b2 + // @2 +b2: + // [7] call malloc + // [93] phi from @2 to malloc [phi:@2->malloc] +malloc_from_b2: + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy + jsr malloc + jmp b6 + // @6 +b6: + // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKET_SIZES + lda malloc.mem+1 + sta BUCKET_SIZES+1 + // [9] call malloc + // [93] phi from @6 to malloc [phi:@6->malloc] +malloc_from_b6: + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_POINTER + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy + jsr malloc + jmp b7 + // @7 +b7: + // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKETS + lda malloc.mem+1 + sta BUCKETS+1 + // [11] call malloc + // [93] phi from @7 to malloc [phi:@7->malloc] +malloc_from_b7: + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy + jsr malloc + jmp b8 + // @8 +b8: + // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKET_IDX + lda malloc.mem+1 + sta BUCKET_IDX+1 + // [13] phi from @8 to @3 [phi:@8->@3] +b3_from_b8: + jmp b3 + // @3 +b3: + // [14] call main jsr main - // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: + // [15] phi from @3 to @end [phi:@3->@end] +bend_from_b3: jmp bend // @end bend: // main main: { - .label _21 = $40 - .label _22 = $44 - .label bucket = $41 - .label bucket_size = $43 + .label _21 = $4e + .label _22 = $52 + .label bucket = $4f + .label bucket_size = $51 .label bucket_idx = 2 .label offset = 7 - .label fill = $45 + .label fill = $53 .label i = 3 - .label angle = $47 + .label angle = $55 .label min_angle = 4 - .label fill1 = $49 + .label fill1 = $57 .label min_offset = 7 .label min_offset_5 = 5 .label min_offset_7 = 5 // asm { sei } sei - // [5] call init_dist_screen - // [155] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + lda SCREEN_DIST + sta init_dist_screen.screen + lda SCREEN_DIST+1 + sta init_dist_screen.screen+1 + // [18] call init_dist_screen + // [171] 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::@14 [phi:main->main::@14] - b14_from_main: jmp b14 // main::@14 b14: - // [7] call init_angle_screen - // [82] phi from main::@14 to init_angle_screen [phi:main::@14->init_angle_screen] - init_angle_screen_from_b14: + // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 + lda SCREEN_ANGLE + sta init_angle_screen.screen + lda SCREEN_ANGLE+1 + sta init_angle_screen.screen+1 + // [20] call init_angle_screen jsr init_angle_screen - // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15] - b15_from_b14: jmp b15 // main::@15 b15: - // [9] call init_buckets - // [40] phi from main::@15 to init_buckets [phi:main::@15->init_buckets] + // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + lda SCREEN_DIST + sta init_buckets.screen + lda SCREEN_DIST+1 + sta init_buckets.screen+1 + // [22] call init_buckets + // [53] phi from main::@15 to init_buckets [phi:main::@15->init_buckets] init_buckets_from_b15: jsr init_buckets - // [10] phi from main::@15 to main::@1 [phi:main::@15->main::@1] + // [23] phi from main::@15 to main::@1 [phi:main::@15->main::@1] b1_from_b15: - // [10] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 + // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 lda #0 sta bucket_idx jmp b1 @@ -4343,61 +4680,62 @@ main: { jmp b2 // main::@2 b2: - // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne b2 jmp b3 // main::@3 b3: - // [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda bucket_idx asl sta _21 - // [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptc1_derefidx_vbuz2 + // [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuz3 ldy _21 - lda BUCKETS,y + lda (BUCKETS),y sta bucket - lda BUCKETS+1,y + iny + lda (BUCKETS),y sta bucket+1 - // [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 + // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 ldy bucket_idx - lda BUCKET_SIZES,y + lda (BUCKET_SIZES),y sta bucket_size - // [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 + // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 lda bucket_size cmp #0 beq b4 - // [17] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5] b5_from_b3: - // [17] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 + // [30] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 lda #<$ffff sta min_offset_5 lda #>$ffff sta min_offset_5+1 - // [17] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 + // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 lda #$ff sta min_angle - // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 + // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 lda #0 sta i jmp b5 // main::@5 b5: - // [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _22 - // [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuz3 + // [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuz3 ldy _22 lda (bucket),y sta offset iny lda (bucket),y sta offset+1 - // [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda offset clc adc #SCREEN_FILL sta fill+1 - // [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 + // [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 lda #FILL_CHAR ldy #0 cmp (fill),y @@ -4413,15 +4751,15 @@ main: { jmp b7 // main::@7 b7: - // [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 - lda offset + // [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 + lda SCREEN_ANGLE clc - adc #SCREEN_ANGLE + lda SCREEN_ANGLE+1 + adc offset+1 sta angle+1 - // [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 + // [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 ldy #0 lda (angle),y cmp min_angle @@ -4431,29 +4769,29 @@ main: { jmp b8 // main::@8 b8: - // [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 + // [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (angle),y sta min_angle - // [25] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6] + // [38] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6] b6_from_b17: b6_from_b18: b6_from_b8: - // [25] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy - // [25] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy + // [38] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy + // [38] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy jmp b6 // main::@6 b6: - // [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [39] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc i - // [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuz1_lt_vbuz2_then_la1 + // [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuz1_lt_vbuz2_then_la1 lda i cmp bucket_size bcc b16 jmp b9 // main::@9 b9: - // [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 + // [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 lda min_offset cmp #<$ffff bne !+ @@ -4464,7 +4802,7 @@ main: { jmp b10 // main::@10 b10: - // [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 + // [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 lda min_offset clc adc #SCREEN_FILL sta fill1+1 - // [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 + // [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 lda #FILL_CHAR ldy #0 sta (fill1),y - // [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1] b1_from_b10: jmp b1 // main::@4 b4: - // [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 + // [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 inc bucket_idx - // [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 + // [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS cmp bucket_idx bne b11 jmp b12 // main::@12 b12: - // [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp b13 // main::@13 b13: - // [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp b13 // main::@11 b11: - // [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@11 to main::@1 [phi:main::@11->main::@1] + // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1] b1_from_b11: - // [10] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy + // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy jmp b1 // main::@16 b16: - // [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda min_offset sta min_offset_7 lda min_offset+1 sta min_offset_7+1 - // [17] phi from main::@16 to main::@5 [phi:main::@16->main::@5] + // [30] phi from main::@16 to main::@5 [phi:main::@16->main::@5] b5_from_b16: - // [17] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy - // [17] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy - // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy + // [30] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy + // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy + // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy jmp b5 // main::@17 b17: - // [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda min_offset_5 sta min_offset lda min_offset_5+1 @@ -4531,7 +4869,7 @@ main: { jmp b6_from_b17 // main::@18 b18: - // [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda min_offset_5 sta min_offset lda min_offset_5+1 @@ -4540,115 +4878,125 @@ main: { } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. +// init_buckets(byte* zeropage($4c) screen) init_buckets: { - .label _5 = $4d - .label _9 = $54 - .label _10 = $5c - .label _12 = $4f - .label _13 = $56 - .label _14 = $5e + .label _5 = $5b + .label _9 = $62 + .label _10 = $6a + .label _12 = $5d + .label _13 = $64 + .label _14 = $6c + .label screen = $4c .label i = 9 .label dist = $a .label i1 = $c .label i2 = $e .label i3 = $10 - .label distance = $53 - .label bucket = $5a + .label distance = $61 + .label bucket = $68 .label dist_3 = $11 .label i4 = $13 .label dist_5 = $11 - .label _15 = $4b - .label _16 = $51 - .label _17 = $58 - // [41] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + .label _15 = $59 + .label _16 = $5f + .label _17 = $66 + .label dist_8 = $11 + // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] b1_from_init_buckets: - // [41] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 + // [54] 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 - // [41] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] b1_from_b1: - // [41] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [54] 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: - // [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy i - sta BUCKET_SIZES,y - // [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 + sta (BUCKET_SIZES),y + // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 inc i - // [44] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 + // [57] 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 bne b1_from_b1 - // [45] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] - b2_from_b1: - // [45] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 + jmp b2 + // init_buckets::@2 + b2: + // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + lda screen + sta dist + lda screen+1 + sta dist+1 + // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + b3_from_b2: + // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - // [45] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 - lda #SCREEN_DIST - sta dist+1 - jmp b2 - // [45] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] - b2_from_b2: - // [45] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy - // [45] 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: - // [46] *((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 + // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy + jmp b3 + // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] + b3_from_b3: + // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy + // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy + jmp b3 + // init_buckets::@3 + b3: + // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 ldy #0 lda (dist),y - tax - inc BUCKET_SIZES,x - // [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + tay + lda (BUCKET_SIZES),y + clc + adc #1 + sta (BUCKET_SIZES),y + // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc dist bne !+ inc dist+1 !: - // [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 + // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>$3e8 - bne b2_from_b2 + bne b3_from_b3 lda i1 cmp #<$3e8 - bne b2_from_b2 - // [50] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] - b3_from_b2: - // [50] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + bne b3_from_b3 + // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] + b4_from_b3: + // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 lda #<0 sta i2 lda #>0 sta i2+1 - jmp b3 + jmp b4 // Allocate the buckets - // [50] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] - b3_from_b6: - // [50] 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: - // [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 - lda i2 + // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] + b4_from_b8: + // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy + jmp b4 + // init_buckets::@4 + b4: + // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 + lda BUCKET_SIZES clc - adc #BUCKET_SIZES + lda BUCKET_SIZES+1 + adc i2+1 sta _15+1 - // [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 + // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 ldy #0 lda _15 asl @@ -4656,172 +5004,179 @@ init_buckets: { lda #0 rol sta malloc.size+1 - // [53] call malloc - // [78] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] - malloc_from_b3: - // [78] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy - // [78] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy + // [67] call malloc + // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] + malloc_from_b4: + // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy jsr malloc - jmp b6 - // init_buckets::@6 - b6: - // [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp b8 + // init_buckets::@8 + b8: + // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda malloc.mem sta _5 lda malloc.mem+1 sta _5+1 - // [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda i2 asl sta _12 lda i2+1 rol sta _12+1 - // [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz2 - lda _12 + // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz3 + lda BUCKETS clc - adc #BUCKETS + lda BUCKETS+1 + adc _12+1 sta _16+1 - // [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 + // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 ldy #0 lda _5 sta (_16),y iny lda _5+1 sta (_16),y - // [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc i2 bne !+ inc i2+1 !: - // [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 lda i2+1 cmp #>NUM_BUCKETS-1+1 - bne b3_from_b6 + bne b4_from_b8 lda i2 cmp #init_buckets::@4] - b4_from_b6: - // [60] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuz1=vbuc1 + bne b4_from_b8 + // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5] + b5_from_b8: + // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuz1=vbuc1 lda #0 sta i3 - jmp b4 + jmp b5 // Iterate all distances and fill the buckets with indices into the screens - // [60] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] - b4_from_b4: - // [60] 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: - // [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + b5_from_b5: + // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + jmp b5 + // init_buckets::@5 + b5: + // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy i3 - sta BUCKET_IDX,y - // [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 + sta (BUCKET_IDX),y + // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 inc i3 - // [63] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vbuz1_neq_vbuc1_then_la1 + // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS-1+1 cmp i3 - bne b4_from_b4 - // [64] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] - b5_from_b4: - // [64] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 + bne b5_from_b5 + jmp b6 + // init_buckets::@6 + b6: + // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + lda screen + sta dist_8 + lda screen+1 + sta dist_8+1 + // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] + b7_from_b6: + // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 lda #<0 sta i4 lda #>0 sta i4+1 - // [64] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 - lda #SCREEN_DIST - sta dist_5+1 - jmp b5 - // [64] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] - b5_from_b5: - // [64] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy - // [64] 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: - // [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 + // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy + jmp b7 + // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] + b7_from_b7: + // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy + // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy + jmp b7 + // init_buckets::@7 + b7: + // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_5),y sta distance - // [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 + // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 lda distance sta _9 lda #0 sta _9+1 - // [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda _9 asl sta _13 lda _9+1 rol sta _13+1 - // [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz2 - lda _13 + // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz3 + lda BUCKETS clc - adc #BUCKETS + lda BUCKETS+1 + adc _13+1 sta _17+1 - // [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 + // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 ldy #0 lda (_17),y sta bucket iny lda (_17),y sta bucket+1 - // [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 + // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 lda dist_5 sec - sbc #SCREEN_DIST + sbc screen+1 sta _10+1 - // [71] (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 + // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 ldy distance - lda BUCKET_IDX,y + lda (BUCKET_IDX),y asl sta _14 - // [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuz2=vwuz3 + // [87] *((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 _10+1 sta (bucket),y - // [73] *((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 - // [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 + ldy distance + lda (BUCKET_IDX),y + clc + adc #1 + sta (BUCKET_IDX),y + // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc dist_3 bne !+ inc dist_3+1 !: - // [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc i4 bne !+ inc i4+1 !: - // [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 + // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 lda i4+1 cmp #>$3e8 - bne b5_from_b5 + bne b7_from_b7 lda i4 cmp #<$3e8 - bne b5_from_b5 + bne b7_from_b7 jmp breturn // init_buckets::@return breturn: - // [77] return + // [92] return rts } // malloc @@ -4829,9 +5184,9 @@ init_buckets: { // The content of the newly allocated block of memory is not initialized, remaining with indeterminate values. // malloc(word zeropage($17) size) malloc: { - .label mem = $5f + .label mem = $6d .label size = $17 - // [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz3 + // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz3 lda heap_head sec sbc size @@ -4839,7 +5194,7 @@ malloc: { lda heap_head+1 sbc size+1 sta mem+1 - // [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 @@ -4847,105 +5202,115 @@ malloc: { jmp breturn // malloc::@return breturn: - // [81] return + // [96] 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(byte* zeropage($4a) screen) init_angle_screen: { - .label _2 = $61 - .label _3 = $62 - .label _6 = $65 - .label _10 = $70 - .label _12 = $73 - .label _13 = $74 - .label _14 = $75 - .label xw = $63 - .label yw = $66 - .label angle_w = $6e - .label ang_w = $72 - .label x = $1e - .label xb = $1f + .label _2 = $6f + .label _3 = $70 + .label _6 = $73 + .label _10 = $7e + .label _12 = $81 + .label _13 = $82 + .label _14 = $83 + .label screen = $4a .label screen_topline = $1c .label screen_bottomline = $1a + .label xw = $71 + .label yw = $74 + .label angle_w = $7c + .label ang_w = $80 + .label x = $1e + .label xb = $1f .label y = $19 - // [83] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - b1_from_init_angle_screen: - // [83] 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 + lda screen+1 + adc #>$28*$c sta screen_topline+1 - // [83] 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 + lda screen+1 + adc #>$28*$c sta screen_bottomline+1 - // [83] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + b1_from_init_angle_screen: + // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [99] 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 - // [83] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] + // [99] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] b1_from_b3: - // [83] 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 - // [83] 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 - // [83] 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 + // [99] 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 + // [99] 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 + // [99] 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: - // [84] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] b2_from_b1: - // [84] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [100] 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 - // [84] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [100] 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 - // [84] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] + // [100] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] b2_from_b4: - // [84] 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 - // [84] 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 + // [100] 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 + // [100] 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: - // [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta _2 - // [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2 + // [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc _2 sta _3 - // [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [103] (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 - // [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta _6 - // [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [105] (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 - // [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [106] (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 - // [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [107] (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 - // [92] call atan2_16 + // [108] call atan2_16 jsr atan2_16 - // [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [109] (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 @@ -4953,12 +5318,12 @@ init_angle_screen: { jmp b4 // init_angle_screen::@4 b4: - // [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [110] (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 - // [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc angle_w @@ -4966,52 +5331,52 @@ init_angle_screen: { lda #0 adc angle_w+1 sta _10+1 - // [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 + // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 lda _10+1 sta ang_w - // [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((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 - // [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [114] (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 - // [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuz3 + // [115] *((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 - // [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [116] (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 - // [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [117] *((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 - // [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [118] (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 - // [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [119] *((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 - // [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 + // [122] 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: - // [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [123] (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 @@ -5019,7 +5384,7 @@ init_angle_screen: { lda screen_topline+1 sbc #>$28 sta screen_topline+1 - // [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [124] (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 @@ -5027,28 +5392,28 @@ init_angle_screen: { bcc !+ inc screen_bottomline+1 !: - // [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 + // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 inc y - // [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [126] 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: - // [111] return + // [127] 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($68) x, signed word zeropage($6a) y) +// atan2_16(signed word zeropage($76) x, signed word zeropage($78) y) atan2_16: { .label _2 = $20 .label _7 = $22 - .label _23 = $77 - .label _24 = $76 + .label _23 = $85 + .label _24 = $84 .label yi = $20 .label xi = $22 .label angle = $27 @@ -5059,19 +5424,19 @@ atan2_16: { .label angle_3 = $25 .label i = $24 .label return = $27 - .label x = $68 - .label y = $6a - .label return_2 = $6c + .label x = $76 + .label y = $78 + .label return_2 = $7a .label angle_6 = $25 .label angle_12 = $25 .label angle_13 = $25 - // [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [128] 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: - // [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -5079,20 +5444,20 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [114] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [130] 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: - // [114] 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 + // [130] 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: - // [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [131] 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: - // [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -5100,54 +5465,54 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [117] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [133] 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: - // [117] 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 + // [133] 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: - // [118] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] b10_from_b6: - // [118] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [134] 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 - // [118] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta i - // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [134] 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: - // [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [135] 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 - // [120] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [136] 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: - // [120] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [136] 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: - // [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [137] (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 - // [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [138] 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: - // [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -5155,20 +5520,20 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [124] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [140] 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: - // [124] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [140] 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: - // [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [141] 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: - // [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -5176,81 +5541,81 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [127] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [143] 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: - // [127] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [143] 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: - // [128] return + // [144] return rts // atan2_16::@11 b11: - // [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 + // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda i sta shift - // [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [132] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [148] 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: - // [132] 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 - // [132] 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 - // [132] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [148] 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 + // [148] 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 + // [148] 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: - // [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 + // [149] 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: - // [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 + // [150] 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: - // [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [151] (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 - // [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [152] (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 - // [137] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [153] 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: - // [137] 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 - // [137] 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 + // [153] 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 + // [153] 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: - // [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [154] 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: - // [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [155] (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 @@ -5258,7 +5623,7 @@ atan2_16: { lda xi+1 sbc yd+1 sta xi+1 - // [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [156] (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 @@ -5266,11 +5631,11 @@ atan2_16: { lda yi+1 adc xd+1 sta yi+1 - // [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _24 - // [142] (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 + // [158] (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 @@ -5279,31 +5644,31 @@ atan2_16: { lda angle_3+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle_3+1 - // [143] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [159] 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: - // [143] 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 - // [143] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [143] 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 + // [159] 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 + // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [159] 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: - // [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc i - // [145] 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 + // [161] 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 - // [118] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] b10_from_b19: - // [118] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [118] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [134] 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: - // [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [162] (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 @@ -5311,7 +5676,7 @@ atan2_16: { lda xi+1 adc yd+1 sta xi+1 - // [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [163] (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 @@ -5319,11 +5684,11 @@ atan2_16: { lda yi+1 sbc xd+1 sta yi+1 - // [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _23 - // [149] (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 + // [165] (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 @@ -5335,7 +5700,7 @@ atan2_16: { jmp b19_from_b18 // atan2_16::@14 b14: - // [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [166] (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 @@ -5344,7 +5709,7 @@ atan2_16: { cmp #$80 ror xd+1 ror xd - // [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [167] (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 @@ -5353,13 +5718,13 @@ atan2_16: { cmp #$80 ror yd+1 ror yd - // [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 + // [168] (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: - // [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -5367,7 +5732,7 @@ atan2_16: { jmp b6_from_b4 // atan2_16::@1 b1: - // [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -5378,157 +5743,162 @@ atan2_16: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center +// init_dist_screen(byte* zeropage($2f) screen) init_dist_screen: { .label _5 = $33 .label _7 = $33 .label _13 = $36 .label _15 = $36 - .label y2 = $78 + .label screen = $2f + .label screen_bottomline = $31 + .label y2 = $86 .label yd = $33 - .label yds = $7b - .label x2 = $7d + .label yds = $89 + .label x2 = $8b .label xd = $36 - .label xds = $80 - .label ds = $82 - .label d = $87 + .label xds = $8e + .label ds = $90 + .label d = $95 .label x = $34 .label xb = $35 .label screen_topline = $2f - .label screen_bottomline = $31 .label y = $2e - // [156] call init_squares - // [226] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [172] call init_squares + // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares - // [157] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] - b1_from_init_dist_screen: - // [157] 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 + lda screen+1 + adc #>$28*$18 sta screen_bottomline+1 - // [157] 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 - // [157] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [174] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1] + b1_from_b10: + // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@10->init_dist_screen::@1#0] -- register_copy + // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@10->init_dist_screen::@1#1] -- register_copy + // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [157] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] + // [174] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] b1_from_b9: - // [157] 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 - // [157] 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 - // [157] 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 + // [174] 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 + // [174] 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 + // [174] 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: - // [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda y asl sta y2 - // [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 + // [176] 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: - // [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$18 sec sbc y2 sta _5 - // [161] 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] + // [178] 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: - // [161] 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 + // [178] 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: - // [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 + // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 lda yd sta sqr.val - // [163] call sqr - // [222] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [180] call sqr + // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [222] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [164] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [181] (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 - jmp b10 - // init_dist_screen::@10 - b10: - // [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 + jmp b11 + // init_dist_screen::@11 + b11: + // [182] (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 - // [166] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] - b5_from_b10: - // [166] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [183] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5] + b5_from_b11: + // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [166] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta x jmp b5 - // [166] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [166] 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 - // [166] 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 + // [183] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5] + b5_from_b13: + // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy + // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy jmp b5 // init_dist_screen::@5 b5: - // [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda x asl sta x2 - // [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuz1_ge_vbuc1_then_la1 + // [185] 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: - // [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc x2 sta _13 - // [170] 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] + // [187] 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: - // [170] 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 + // [187] 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: - // [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda xd sta sqr.val - // [172] call sqr - // [222] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] + // [189] call sqr + // [239] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] sqr_from_b8: - // [222] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy + // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy jsr sqr - // [173] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [190] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda sqr.return sta sqr.return_3 lda sqr.return+1 sta sqr.return_3+1 - jmp b11 - // init_dist_screen::@11 - b11: - // [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + jmp b12 + // init_dist_screen::@12 + b12: + // [191] (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 - // [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [192] (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 @@ -5536,50 +5906,50 @@ init_dist_screen: { lda xds+1 adc yds+1 sta ds+1 - // [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda ds sta sqrt.val lda ds+1 sta sqrt.val+1 - // [177] call sqrt + // [194] call sqrt jsr sqrt - // [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda sqrt.return sta sqrt.return_2 - jmp b12 - // init_dist_screen::@12 - b12: - // [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + jmp b13 + // init_dist_screen::@13 + b13: + // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda sqrt.return_2 sta d - // [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [197] *((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 - // [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [198] *((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 - // [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [199] *((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 - // [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [200] *((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 - // [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 + // [203] 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 + bcc b5_from_b13 jmp b9 // init_dist_screen::@9 b9: - // [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [204] (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 @@ -5587,7 +5957,7 @@ init_dist_screen: { bcc !+ inc screen_topline+1 !: - // [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [205] (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 @@ -5595,27 +5965,27 @@ init_dist_screen: { lda screen_bottomline+1 sbc #>$28 sta screen_bottomline+1 - // [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc y - // [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [207] 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: - // [191] return + // [208] return rts // init_dist_screen::@6 b6: - // [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 + // [209] (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: - // [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 + // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 lax y2 axs #$18 stx _7 @@ -5625,29 +5995,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($84) val) +// sqrt(word zeropage($92) val) sqrt: { - .label _1 = $90 - .label _3 = $8e - .label found = $8c - .label return = $92 - .label val = $84 - .label return_2 = $86 - // [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 + .label _1 = $9e + .label _3 = $9c + .label found = $9a + .label return = $a0 + .label val = $92 + .label return_2 = $94 + // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda val sta bsearch16u.key lda val+1 sta bsearch16u.key+1 - // [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta bsearch16u.items lda SQUARES+1 sta bsearch16u.items+1 - // [196] call bsearch16u - // [203] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [213] call bsearch16u + // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 + // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 lda bsearch16u.return sta bsearch16u.return_3 lda bsearch16u.return+1 @@ -5655,12 +6025,12 @@ sqrt: { jmp b1 // sqrt::@1 b1: - // [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 + // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 lda bsearch16u.return_3 sta found lda bsearch16u.return_3+1 sta found+1 - // [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 + // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 lda found sec sbc SQUARES @@ -5668,20 +6038,20 @@ sqrt: { lda found+1 sbc SQUARES+1 sta _3+1 - // [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda _3+1 lsr sta _1+1 lda _3 ror sta _1 - // [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 + // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 lda _1 sta return jmp breturn // sqrt::@return breturn: - // [202] return + // [219] return rts } // bsearch16u @@ -5690,34 +6060,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($88) key, word* zeropage($37) items, byte zeropage($39) num) +// bsearch16u(word zeropage($96) key, word* zeropage($37) items, byte zeropage($39) num) bsearch16u: { .label _2 = $37 - .label _6 = $93 - .label _16 = $94 - .label pivot = $95 - .label result = $97 + .label _6 = $a1 + .label _16 = $a2 + .label pivot = $a3 + .label result = $a5 .label return = $37 .label num = $39 .label items = $37 - .label key = $88 - .label return_3 = $8a - // [204] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + .label key = $96 + .label return_3 = $98 + // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] b3_from_bsearch16u: - // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [204] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [221] 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: - // [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 lda num bne b4 jmp b5 // bsearch16u::@5 b5: - // [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [223] 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 @@ -5731,7 +6101,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -5739,33 +6109,33 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [208] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [208] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [209] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] breturn_from_b2: breturn_from_b8: - // [209] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp breturn // bsearch16u::@return breturn: - // [210] return + // [227] return rts // bsearch16u::@4 b4: - // [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 lda num lsr sta _6 - // [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda _6 asl sta _16 - // [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 lda _16 clc adc items @@ -5773,7 +6143,7 @@ bsearch16u: { lda #0 adc items+1 sta pivot+1 - // [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [231] (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 @@ -5783,7 +6153,7 @@ bsearch16u: { iny sbc (pivot),y sta result+1 - // [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 lda result+1 bne b6 lda result @@ -5791,7 +6161,7 @@ bsearch16u: { jmp b8 // bsearch16u::@8 b8: - // [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda pivot sta return lda pivot+1 @@ -5799,7 +6169,7 @@ bsearch16u: { jmp breturn_from_b8 // bsearch16u::@6 b6: - // [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [234] 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 !+ @@ -5809,7 +6179,7 @@ bsearch16u: { jmp b9 // bsearch16u::@9 b9: - // [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [235] (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 @@ -5817,22 +6187,22 @@ bsearch16u: { lda #0 adc pivot+1 sta items+1 - // [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 + // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 dec num - // [220] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] b7_from_b6: b7_from_b9: - // [220] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [220] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp b7 // bsearch16u::@7 b7: - // [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr num - // [204] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] b3_from_b7: - // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [204] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp b3 } // sqr @@ -5840,16 +6210,16 @@ bsearch16u: { // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte zeropage($3a) val) sqr: { - .label _0 = $99 - .label return = $9a + .label _0 = $a7 + .label return = $a8 .label val = $3a - .label return_2 = $79 - .label return_3 = $7e - // [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + .label return_2 = $87 + .label return_3 = $8c + // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda val asl sta _0 - // [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 + // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 ldy _0 lda (SQUARES),y sta return @@ -5859,73 +6229,69 @@ sqr: { jmp breturn // sqr::@return breturn: - // [225] return + // [242] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { - .label _3 = $9e - .label _4 = $9f + .label _3 = $ac + .label _4 = $ad .label squares = $3d .label sqr = $3b .label i = $3f - // [227] call malloc - // [78] phi from init_squares to malloc [phi:init_squares->malloc] + // [244] call malloc + // [93] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [78] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [93] phi (word) malloc::size#7 = (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 - // [78] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 - lda #HEAP_TOP - sta heap_head+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp b2 // init_squares::@2 b2: - // [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda malloc.mem sta SQUARES lda malloc.mem+1 sta SQUARES+1 - // [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [230] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [230] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 + // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta i - // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [230] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [247] 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 - // [230] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [230] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [230] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [247] 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: - // [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [248] *((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 - // [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -5933,15 +6299,15 @@ init_squares: { bcc !+ inc squares+1 !: - // [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda i asl sta _3 - // [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy _3 iny sty _4 - // [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 + // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 lda _4 clc adc sqr @@ -5949,463 +6315,495 @@ init_squares: { bcc !+ inc sqr+1 !: - // [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 + // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc i - // [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 + // [254] 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: - // [238] return + // [255] return rts } // File Data - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... +// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i(byte) main::min_angle#2) goto main::@17 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y -Statement [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y -Statement [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ main::bucket_idx#6 main::min_offset#2 ] ( main:2 [ main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ main::fill1#0 ] ( main:2 [ main::fill1#0 ] ) always clobbers reg byte a -Statement [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a -Statement [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a -Statement [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a -Statement [42] *((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 [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a +Statement [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a +Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y +Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y +Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a +Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a +Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y +Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a +Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a +Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a +Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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:9 [ init_buckets::i#2 init_buckets::i#1 ] -Statement [46] *((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 [49] 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 [51] (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:9 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a -Statement [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (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 reg byte y -Statement [54] (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 [55] (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:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a -Statement [56] (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:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a -Statement [57] *((word**~) init_buckets::$16) ← (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 reg byte y -Statement [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a -Statement [61] *((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 [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a +Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] -Statement [65] (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 [66] (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:9 [ 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:83 [ init_buckets::distance#0 ] -Statement [67] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a -Statement [68] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a -Statement [69] (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:9 [ 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:83 [ init_buckets::distance#0 ] -Statement [70] (word~) init_buckets::$10 ← (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::$10 ] ( main:2::init_buckets:9 [ 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 [71] (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:9 [ 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 [72] *((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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [76] 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 [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [85] (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 [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a +Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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:97 [ init_buckets::distance#0 ] +Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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:97 [ init_buckets::distance#0 ] +Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 reg byte y +Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y +Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [101] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [86] (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 [87] (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 [102] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [103] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [88] (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 [89] (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 [90] (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 [91] (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 [93] (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 [94] (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 [95] (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 [96] (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 [97] *((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:114 [ init_angle_screen::ang_w#0 ] -Statement [98] (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:114 [ init_angle_screen::ang_w#0 ] -Statement [99] *((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 [100] (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 [101] *((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 [102] (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 [103] *((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 [107] (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 [108] (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 [112] 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:92 [ heap_head#1 init_angle_screen::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 [113] (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:92 [ heap_head#1 init_angle_screen::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 [115] 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:92 [ heap_head#1 init_angle_screen::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 [116] (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:92 [ heap_head#1 init_angle_screen::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 [119] 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:92 [ heap_head#1 init_angle_screen::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 [104] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [105] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [106] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [107] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [109] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [110] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [111] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [112] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [113] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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:128 [ init_angle_screen::ang_w#0 ] +Statement [114] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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:128 [ init_angle_screen::ang_w#0 ] +Statement [115] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [116] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [117] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [118] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [119] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [123] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [124] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [131] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [132] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [135] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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:36 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [121] (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:92 [ heap_head#1 init_angle_screen::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 [122] 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:92 [ heap_head#1 init_angle_screen::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 [123] (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:92 [ heap_head#1 init_angle_screen::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 [125] 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:92 [ heap_head#1 init_angle_screen::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 [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::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 [130] (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:92 [ heap_head#1 init_angle_screen::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 [137] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [146] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [131] (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:92 [ heap_head#1 init_angle_screen::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 [135] (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:92 [ heap_head#1 init_angle_screen::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 [136] (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:92 [ heap_head#1 init_angle_screen::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 [138] 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:92 [ heap_head#1 init_angle_screen::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 [139] (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:92 [ heap_head#1 init_angle_screen::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 [140] (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:92 [ heap_head#1 init_angle_screen::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 [141] (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:92 [ heap_head#1 init_angle_screen::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 [142] (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:92 [ heap_head#1 init_angle_screen::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 [146] (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:92 [ heap_head#1 init_angle_screen::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 [147] (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:92 [ heap_head#1 init_angle_screen::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 [148] (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:92 [ heap_head#1 init_angle_screen::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 [149] (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:92 [ heap_head#1 init_angle_screen::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 [150] (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:92 [ heap_head#1 init_angle_screen::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 [151] (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:92 [ heap_head#1 init_angle_screen::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 [153] (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:92 [ heap_head#1 init_angle_screen::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 [154] (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:92 [ heap_head#1 init_angle_screen::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 [158] (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 [147] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [151] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [152] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [154] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [155] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [156] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [157] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [158] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [162] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [163] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [164] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [165] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [166] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [167] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [169] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [170] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Statement [160] (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 [164] (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 [165] (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 [167] (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 [177] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [181] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [182] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::x2#0 SQUARES#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [169] (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 [173] (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 [174] (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 [175] (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 [176] (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 [187] (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 [188] (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 [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [186] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [190] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [191] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [192] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [193] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [204] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [205] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::found#0 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::$3 ] ) always clobbers reg byte a +Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::$1 ] ) always clobbers reg byte a +Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [211] (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:177::bsearch16u:196 [ 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 [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 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:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [212] (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:177::bsearch16u:196 [ 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 [213] (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:177::bsearch16u:196 [ 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 [214] (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:177::bsearch16u:196 [ 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 [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [231] (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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 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:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [215] 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:177::bsearch16u:196 [ 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 [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [217] 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:177::bsearch16u:196 [ 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 [218] (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:177::bsearch16u:196 [ 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 [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:163 [ 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: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 sqr::$0 ] ) always clobbers reg byte a -Statement [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:163 [ 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: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 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [229] (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:156 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [231] *((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:156 [ 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 [232] 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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [234] 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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqr::$0 ] ) always clobbers reg byte a +Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [248] *((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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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:63 [ init_squares::i#2 init_squares::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] -Statement [232] (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:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [233] (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:156 [ 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 [235] (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:156 [ 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) $ff) goto main::@2 [ main::bucket_idx#6 ] ( main:2 [ main::bucket_idx#6 ] ) always clobbers reg byte a -Statement [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::$21 ] ( main:2 [ main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a -Statement [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) [ main::bucket_idx#6 main::bucket#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a -Statement [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a -Statement [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a -Statement [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a -Statement [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y -Statement [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y -Statement [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ main::bucket_idx#6 main::min_offset#2 ] ( main:2 [ main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ main::fill1#0 ] ( main:2 [ main::fill1#0 ] ) always clobbers reg byte a -Statement [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a -Statement [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a -Statement [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a -Statement [42] *((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 [46] *((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 [49] 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 [51] (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:9 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a -Statement [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (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 reg byte y -Statement [54] (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 [55] (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:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a -Statement [56] (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:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a -Statement [57] *((word**~) init_buckets::$16) ← (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 reg byte y -Statement [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a -Statement [61] *((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 [65] (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 [66] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a -Statement [67] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a -Statement [68] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a -Statement [69] (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:9 [ 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 [70] (word~) init_buckets::$10 ← (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::$10 ] ( main:2::init_buckets:9 [ 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 [71] (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:9 [ 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 [72] *((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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [76] 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 [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [85] (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 [86] (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 [87] (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 [88] (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 [89] (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 [90] (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 [91] (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 [93] (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 [94] (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 [95] (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 [96] (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 [97] *((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 [98] (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 [99] *((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 [100] (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 [101] *((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 [102] (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 [103] *((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 [107] (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 [108] (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 [112] 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:92 [ heap_head#1 init_angle_screen::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 [113] (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:92 [ heap_head#1 init_angle_screen::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 [115] 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:92 [ heap_head#1 init_angle_screen::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 [116] (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:92 [ heap_head#1 init_angle_screen::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 [119] 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:92 [ heap_head#1 init_angle_screen::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 [121] (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:92 [ heap_head#1 init_angle_screen::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 [122] 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:92 [ heap_head#1 init_angle_screen::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 [123] (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:92 [ heap_head#1 init_angle_screen::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 [125] 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:92 [ heap_head#1 init_angle_screen::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 [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::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 [130] (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:92 [ heap_head#1 init_angle_screen::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 [131] (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:92 [ heap_head#1 init_angle_screen::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 [135] (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:92 [ heap_head#1 init_angle_screen::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 [136] (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:92 [ heap_head#1 init_angle_screen::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 [138] 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:92 [ heap_head#1 init_angle_screen::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 [139] (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:92 [ heap_head#1 init_angle_screen::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 [140] (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:92 [ heap_head#1 init_angle_screen::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 [141] (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:92 [ heap_head#1 init_angle_screen::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 [142] (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:92 [ heap_head#1 init_angle_screen::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 [146] (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:92 [ heap_head#1 init_angle_screen::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 [147] (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:92 [ heap_head#1 init_angle_screen::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 [148] (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:92 [ heap_head#1 init_angle_screen::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 [149] (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:92 [ heap_head#1 init_angle_screen::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 [150] (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:92 [ heap_head#1 init_angle_screen::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 [151] (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:92 [ heap_head#1 init_angle_screen::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 [153] (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:92 [ heap_head#1 init_angle_screen::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 [154] (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:92 [ heap_head#1 init_angle_screen::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 [158] (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 [160] (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 [164] (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 [165] (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 [167] (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 [169] (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 [173] (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 [174] (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 [175] (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 [176] (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 [180] *((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:135 [ init_dist_screen::d#0 ] -Statement [181] *((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 [182] *((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 [183] *((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 [187] (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 [188] (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 [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [211] (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:177::bsearch16u:196 [ 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 [212] (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:177::bsearch16u:196 [ 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 [213] (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:177::bsearch16u:196 [ 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 [214] (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:177::bsearch16u:196 [ 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 [215] 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:177::bsearch16u:196 [ 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 [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [217] 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:177::bsearch16u:196 [ 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 [218] (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:177::bsearch16u:196 [ 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 [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:163 [ 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: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 sqr::$0 ] ) always clobbers reg byte a -Statement [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:163 [ 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: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 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [229] (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:156 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [231] *((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:156 [ 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 [232] (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:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [233] (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:156 [ 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 [235] (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:156 [ 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) $ff) goto main::@2 [ main::bucket_idx#6 ] ( main:2 [ main::bucket_idx#6 ] ) always clobbers reg byte a -Statement [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ main::bucket_idx#6 main::$21 ] ( main:2 [ main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a -Statement [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) [ main::bucket_idx#6 main::bucket#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a -Statement [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a -Statement [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a -Statement [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a -Statement [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y -Statement [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y -Statement [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ main::bucket_idx#6 main::min_offset#2 ] ( main:2 [ main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ main::fill1#0 ] ( main:2 [ main::fill1#0 ] ) always clobbers reg byte a -Statement [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y -Statement [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a -Statement [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a -Statement [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:2 [ main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a -Statement [42] *((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 [46] *((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 [49] 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 [51] (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:9 [ init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a -Statement [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (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 reg byte y -Statement [54] (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 [55] (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:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a -Statement [56] (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:9 [ init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a -Statement [57] *((word**~) init_buckets::$16) ← (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 reg byte y -Statement [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 [ init_buckets::i2#1 heap_head#1 ] ( main:2::init_buckets:9 [ init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a -Statement [61] *((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 [65] (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 [66] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a -Statement [67] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a -Statement [68] (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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a -Statement [69] (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:9 [ 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 [70] (word~) init_buckets::$10 ← (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::$10 ] ( main:2::init_buckets:9 [ 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 [71] (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:9 [ 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 [72] *((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:9 [ init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [76] 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 [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 [ malloc::mem#0 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 ] ) always clobbers reg byte a -Statement [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( main:2::init_buckets:9::malloc:53 [ init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:2::init_dist_screen:5::init_squares:156::malloc:227 [ malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [85] (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 [86] (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 [87] (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 [88] (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 [89] (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 [90] (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 [91] (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 [93] (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 [94] (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 [95] (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 [96] (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 [97] *((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 [98] (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 [99] *((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 [100] (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 [101] *((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 [102] (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 [103] *((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 [107] (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 [108] (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 [112] 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:92 [ heap_head#1 init_angle_screen::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 [113] (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:92 [ heap_head#1 init_angle_screen::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 [115] 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:92 [ heap_head#1 init_angle_screen::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 [116] (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:92 [ heap_head#1 init_angle_screen::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 [119] 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:92 [ heap_head#1 init_angle_screen::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 [121] (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:92 [ heap_head#1 init_angle_screen::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 [122] 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:92 [ heap_head#1 init_angle_screen::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 [123] (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:92 [ heap_head#1 init_angle_screen::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 [125] 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:92 [ heap_head#1 init_angle_screen::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 [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:2::init_angle_screen:7::atan2_16:92 [ heap_head#1 init_angle_screen::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 [130] (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:92 [ heap_head#1 init_angle_screen::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 [131] (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:92 [ heap_head#1 init_angle_screen::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 [135] (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:92 [ heap_head#1 init_angle_screen::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 [136] (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:92 [ heap_head#1 init_angle_screen::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 [138] 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:92 [ heap_head#1 init_angle_screen::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 [139] (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:92 [ heap_head#1 init_angle_screen::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 [140] (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:92 [ heap_head#1 init_angle_screen::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 [141] (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:92 [ heap_head#1 init_angle_screen::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 [142] (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:92 [ heap_head#1 init_angle_screen::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 [146] (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:92 [ heap_head#1 init_angle_screen::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 [147] (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:92 [ heap_head#1 init_angle_screen::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 [148] (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:92 [ heap_head#1 init_angle_screen::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 [149] (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:92 [ heap_head#1 init_angle_screen::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 [150] (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:92 [ heap_head#1 init_angle_screen::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 [151] (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:92 [ heap_head#1 init_angle_screen::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 [153] (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:92 [ heap_head#1 init_angle_screen::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 [154] (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:92 [ heap_head#1 init_angle_screen::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 [158] (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 [160] (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 [164] (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 [165] (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 [167] (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 [169] (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 [173] (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 [174] (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 [175] (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 [176] (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 [180] *((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 [181] *((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 [182] *((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 [183] *((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 [187] (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 [188] (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 [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqrt:177 [ 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 [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [211] (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:177::bsearch16u:196 [ 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 [212] (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:177::bsearch16u:196 [ 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 [213] (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:177::bsearch16u:196 [ 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 [214] (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:177::bsearch16u:196 [ 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 [215] 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:177::bsearch16u:196 [ 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 [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:2::init_dist_screen:5::sqrt:177::bsearch16u:196 [ 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 [217] 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:177::bsearch16u:196 [ 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 [218] (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:177::bsearch16u:196 [ 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 [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:2::init_dist_screen:5::sqr:163 [ 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: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 sqr::$0 ] ) always clobbers reg byte a -Statement [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:2::init_dist_screen:5::sqr:163 [ 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: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 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:2::init_dist_screen:5::init_squares:156 [ heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [229] (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:156 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [231] *((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:156 [ 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 [232] (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:156 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [233] (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:156 [ 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 [235] (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:156 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [250] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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 [252] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a +Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a +Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a +Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a +Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a +Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a +Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a +Statement [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a +Statement [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a +Statement [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a +Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y +Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y +Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a +Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a +Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y +Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a +Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a +Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a +Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a +Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a +Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a +Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 reg byte y +Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y +Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [101] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [102] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [103] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [104] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [105] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [106] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [107] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [109] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [110] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [111] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [112] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [113] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [114] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [115] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [116] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [117] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [118] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [119] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [123] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [124] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [131] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [132] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [135] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [137] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [146] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [147] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [151] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [152] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [154] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [155] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [156] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [157] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [158] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [162] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [163] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [164] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [165] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [166] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [167] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [169] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [170] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [177] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [181] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [182] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [190] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [191] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [192] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [193] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [197] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:149 [ init_dist_screen::d#0 ] +Statement [198] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [199] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [200] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [204] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [205] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::found#0 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::$3 ] ) always clobbers reg byte a +Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::$1 ] ) always clobbers reg byte a +Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [231] (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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [232] 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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [234] 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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqr::$0 ] ) always clobbers reg byte a +Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [248] *((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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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 [249] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [250] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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 [252] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a +Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a +Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a +Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a +Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a +Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a +Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a +Statement [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y +Statement [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::$22 ] ) always clobbers reg byte a +Statement [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::fill#0 ] ) always clobbers reg byte a +Statement [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a +Statement [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#5 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y +Statement [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y +Statement [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a +Statement [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::fill1#0 ] ) always clobbers reg byte a +Statement [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 ] ) always clobbers reg byte a reg byte y +Statement [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_angle#4 main::min_offset#7 ] ) always clobbers reg byte a +Statement [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#8 ] ) always clobbers reg byte a +Statement [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#10 ] ) always clobbers reg byte a +Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a +Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a +Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a +Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a +Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 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 reg byte y +Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y +Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [101] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [102] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [103] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [104] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [105] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [106] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [107] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [109] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [110] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [111] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [112] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [113] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [114] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [115] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [116] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [117] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [118] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [119] *((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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [123] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [124] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [131] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [132] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [135] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [137] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [146] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [147] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [151] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [152] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [154] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [155] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [156] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [157] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [158] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [162] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [163] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [164] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [165] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [166] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [167] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [169] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [170] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::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 [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [175] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [177] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [181] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [182] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [186] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [190] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [191] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [192] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [193] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte a +Statement [197] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [198] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [199] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [200] *((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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 ] ) always clobbers reg byte y +Statement [204] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [205] (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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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 [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::found#0 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::$3 ] ) always clobbers reg byte a +Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqrt::$1 ] ) always clobbers reg byte a +Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [231] (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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [232] 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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [234] 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:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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 sqr::$0 ] ) always clobbers reg byte a +Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 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:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#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#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [248] *((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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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 [249] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [250] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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 [252] (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:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 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#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::min_angle#2 main::min_angle#4 main::min_angle#1 ] : zp ZP_BYTE:4 , reg byte x , Potential registers zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] : zp ZP_WORD:5 , Potential registers zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] : zp ZP_WORD:7 , Potential registers zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ] : zp ZP_WORD:10 , +Potential registers zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] : zp ZP_WORD:10 , Potential registers zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp ZP_WORD:12 , Potential registers zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] : zp ZP_WORD:14 , Potential registers zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] : zp ZP_BYTE:16 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] : zp ZP_WORD:17 , +Potential registers zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] : zp ZP_WORD:17 , Potential registers zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] : zp ZP_WORD:19 , -Potential registers zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] : zp ZP_WORD:21 , -Potential registers zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] : zp ZP_WORD:23 , +Potential registers zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] : zp ZP_WORD:21 , +Potential registers zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] : zp ZP_WORD:23 , Potential registers zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] : zp ZP_BYTE:25 , reg byte x , -Potential registers zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:26 , -Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:28 , +Potential registers zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:26 , +Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:28 , Potential registers zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:30 , reg byte x , Potential registers zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:31 , reg byte x , Potential registers 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:32 , @@ -6417,8 +6815,8 @@ Potential registers zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16 Potential registers zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:42 , Potential registers zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:44 , Potential registers zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:46 , reg byte x , -Potential registers zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:47 , -Potential registers zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:49 , +Potential registers zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] : zp ZP_WORD:47 , +Potential registers zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] : zp ZP_WORD:49 , Potential registers zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:52 , reg byte x , Potential registers zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:53 , reg byte x , @@ -6429,161 +6827,172 @@ Potential registers zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] : zp ZP_B Potential registers zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:59 , Potential registers zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:61 , Potential registers zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:63 , reg byte x , -Potential registers zp ZP_BYTE:64 [ main::$21 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:65 [ main::bucket#0 ] : zp ZP_WORD:65 , -Potential registers zp ZP_BYTE:67 [ main::bucket_size#0 ] : zp ZP_BYTE:67 , reg byte x , -Potential registers zp ZP_BYTE:68 [ main::$22 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:69 [ main::fill#0 ] : zp ZP_WORD:69 , -Potential registers zp ZP_WORD:71 [ main::angle#0 ] : zp ZP_WORD:71 , -Potential registers zp ZP_WORD:73 [ main::fill1#0 ] : zp ZP_WORD:73 , -Potential registers zp ZP_WORD:75 [ init_buckets::$15 ] : zp ZP_WORD:75 , -Potential registers zp ZP_WORD:77 [ init_buckets::$5 ] : zp ZP_WORD:77 , -Potential registers zp ZP_WORD:79 [ init_buckets::$12 ] : zp ZP_WORD:79 , -Potential registers zp ZP_WORD:81 [ init_buckets::$16 ] : zp ZP_WORD:81 , -Potential registers zp ZP_BYTE:83 [ init_buckets::distance#0 ] : zp ZP_BYTE:83 , reg byte x , -Potential registers zp ZP_WORD:84 [ init_buckets::$9 ] : zp ZP_WORD:84 , -Potential registers zp ZP_WORD:86 [ init_buckets::$13 ] : zp ZP_WORD:86 , -Potential registers zp ZP_WORD:88 [ init_buckets::$17 ] : zp ZP_WORD:88 , -Potential registers zp ZP_WORD:90 [ init_buckets::bucket#0 ] : zp ZP_WORD:90 , -Potential registers zp ZP_WORD:92 [ init_buckets::$10 ] : zp ZP_WORD:92 , -Potential registers zp ZP_BYTE:94 [ init_buckets::$14 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:95 [ malloc::mem#0 ] : zp ZP_WORD:95 , -Potential registers zp ZP_BYTE:97 [ init_angle_screen::$2 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:98 [ init_angle_screen::$3 ] : zp ZP_BYTE:98 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:99 [ init_angle_screen::xw#0 ] : zp ZP_WORD:99 , -Potential registers zp ZP_BYTE:101 [ init_angle_screen::$6 ] : zp ZP_BYTE:101 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:102 [ init_angle_screen::yw#0 ] : zp ZP_WORD:102 , -Potential registers zp ZP_WORD:104 [ atan2_16::x#0 ] : zp ZP_WORD:104 , -Potential registers zp ZP_WORD:106 [ atan2_16::y#0 ] : zp ZP_WORD:106 , -Potential registers zp ZP_WORD:108 [ atan2_16::return#2 ] : zp ZP_WORD:108 , -Potential registers zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:110 , -Potential registers zp ZP_WORD:112 [ init_angle_screen::$10 ] : zp ZP_WORD:112 , -Potential registers zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:114 , reg byte x , -Potential registers zp ZP_BYTE:115 [ init_angle_screen::$12 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:116 [ init_angle_screen::$13 ] : zp ZP_BYTE:116 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:117 [ init_angle_screen::$14 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:118 [ atan2_16::$24 ] : zp ZP_BYTE:118 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:119 [ atan2_16::$23 ] : zp ZP_BYTE:119 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:120 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:121 [ sqr::return#2 ] : zp ZP_WORD:121 , -Potential registers zp ZP_WORD:123 [ init_dist_screen::yds#0 ] : zp ZP_WORD:123 , -Potential registers zp ZP_BYTE:125 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:125 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:126 [ sqr::return#3 ] : zp ZP_WORD:126 , -Potential registers zp ZP_WORD:128 [ init_dist_screen::xds#0 ] : zp ZP_WORD:128 , -Potential registers zp ZP_WORD:130 [ init_dist_screen::ds#0 ] : zp ZP_WORD:130 , -Potential registers zp ZP_WORD:132 [ sqrt::val#0 ] : zp ZP_WORD:132 , -Potential registers zp ZP_BYTE:134 [ sqrt::return#2 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:135 [ init_dist_screen::d#0 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , -Potential registers zp ZP_WORD:136 [ bsearch16u::key#0 ] : zp ZP_WORD:136 , -Potential registers zp ZP_WORD:138 [ bsearch16u::return#3 ] : zp ZP_WORD:138 , -Potential registers zp ZP_WORD:140 [ sqrt::found#0 ] : zp ZP_WORD:140 , -Potential registers zp ZP_WORD:142 [ sqrt::$3 ] : zp ZP_WORD:142 , -Potential registers zp ZP_WORD:144 [ sqrt::$1 ] : zp ZP_WORD:144 , -Potential registers zp ZP_BYTE:146 [ sqrt::return#0 ] : zp ZP_BYTE:146 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:147 [ bsearch16u::$6 ] : zp ZP_BYTE:147 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:148 [ bsearch16u::$16 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:149 [ bsearch16u::pivot#0 ] : zp ZP_WORD:149 , -Potential registers zp ZP_WORD:151 [ bsearch16u::result#0 ] : zp ZP_WORD:151 , -Potential registers zp ZP_BYTE:153 [ sqr::$0 ] : zp ZP_BYTE:153 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:154 [ sqr::return#0 ] : zp ZP_WORD:154 , -Potential registers zp ZP_WORD:156 [ SQUARES#1 ] : zp ZP_WORD:156 , -Potential registers zp ZP_BYTE:158 [ init_squares::$3 ] : zp ZP_BYTE:158 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:159 [ init_squares::$4 ] : zp ZP_BYTE:159 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:64 [ SCREEN_DIST#0 ] : zp ZP_WORD:64 , +Potential registers zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:66 , +Potential registers zp ZP_WORD:68 [ BUCKET_SIZES#0 ] : zp ZP_WORD:68 , +Potential registers zp ZP_WORD:70 [ BUCKETS#0 ] : zp ZP_WORD:70 , +Potential registers zp ZP_WORD:72 [ BUCKET_IDX#0 ] : zp ZP_WORD:72 , +Potential registers zp ZP_WORD:74 [ init_angle_screen::screen#0 ] : zp ZP_WORD:74 , +Potential registers zp ZP_WORD:76 [ init_buckets::screen#0 ] : zp ZP_WORD:76 , +Potential registers zp ZP_BYTE:78 [ main::$21 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:79 [ main::bucket#0 ] : zp ZP_WORD:79 , +Potential registers zp ZP_BYTE:81 [ main::bucket_size#0 ] : zp ZP_BYTE:81 , reg byte x , +Potential registers zp ZP_BYTE:82 [ main::$22 ] : zp ZP_BYTE:82 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:83 [ main::fill#0 ] : zp ZP_WORD:83 , +Potential registers zp ZP_WORD:85 [ main::angle#0 ] : zp ZP_WORD:85 , +Potential registers zp ZP_WORD:87 [ main::fill1#0 ] : zp ZP_WORD:87 , +Potential registers zp ZP_WORD:89 [ init_buckets::$15 ] : zp ZP_WORD:89 , +Potential registers zp ZP_WORD:91 [ init_buckets::$5 ] : zp ZP_WORD:91 , +Potential registers zp ZP_WORD:93 [ init_buckets::$12 ] : zp ZP_WORD:93 , +Potential registers zp ZP_WORD:95 [ init_buckets::$16 ] : zp ZP_WORD:95 , +Potential registers zp ZP_BYTE:97 [ init_buckets::distance#0 ] : zp ZP_BYTE:97 , reg byte x , +Potential registers zp ZP_WORD:98 [ init_buckets::$9 ] : zp ZP_WORD:98 , +Potential registers zp ZP_WORD:100 [ init_buckets::$13 ] : zp ZP_WORD:100 , +Potential registers zp ZP_WORD:102 [ init_buckets::$17 ] : zp ZP_WORD:102 , +Potential registers zp ZP_WORD:104 [ init_buckets::bucket#0 ] : zp ZP_WORD:104 , +Potential registers zp ZP_WORD:106 [ init_buckets::$10 ] : zp ZP_WORD:106 , +Potential registers zp ZP_BYTE:108 [ init_buckets::$14 ] : zp ZP_BYTE:108 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:109 [ malloc::mem#0 ] : zp ZP_WORD:109 , +Potential registers zp ZP_BYTE:111 [ init_angle_screen::$2 ] : zp ZP_BYTE:111 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:112 [ init_angle_screen::$3 ] : zp ZP_BYTE:112 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:113 [ init_angle_screen::xw#0 ] : zp ZP_WORD:113 , +Potential registers zp ZP_BYTE:115 [ init_angle_screen::$6 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:116 [ init_angle_screen::yw#0 ] : zp ZP_WORD:116 , +Potential registers zp ZP_WORD:118 [ atan2_16::x#0 ] : zp ZP_WORD:118 , +Potential registers zp ZP_WORD:120 [ atan2_16::y#0 ] : zp ZP_WORD:120 , +Potential registers zp ZP_WORD:122 [ atan2_16::return#2 ] : zp ZP_WORD:122 , +Potential registers zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:124 , +Potential registers zp ZP_WORD:126 [ init_angle_screen::$10 ] : zp ZP_WORD:126 , +Potential registers zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:128 , reg byte x , +Potential registers zp ZP_BYTE:129 [ init_angle_screen::$12 ] : zp ZP_BYTE:129 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:130 [ init_angle_screen::$13 ] : zp ZP_BYTE:130 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:131 [ init_angle_screen::$14 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:132 [ atan2_16::$24 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:133 [ atan2_16::$23 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:135 [ sqr::return#2 ] : zp ZP_WORD:135 , +Potential registers zp ZP_WORD:137 [ init_dist_screen::yds#0 ] : zp ZP_WORD:137 , +Potential registers zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:140 [ sqr::return#3 ] : zp ZP_WORD:140 , +Potential registers zp ZP_WORD:142 [ init_dist_screen::xds#0 ] : zp ZP_WORD:142 , +Potential registers zp ZP_WORD:144 [ init_dist_screen::ds#0 ] : zp ZP_WORD:144 , +Potential registers zp ZP_WORD:146 [ sqrt::val#0 ] : zp ZP_WORD:146 , +Potential registers zp ZP_BYTE:148 [ sqrt::return#2 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:149 [ init_dist_screen::d#0 ] : zp ZP_BYTE:149 , reg byte a , reg byte x , +Potential registers zp ZP_WORD:150 [ bsearch16u::key#0 ] : zp ZP_WORD:150 , +Potential registers zp ZP_WORD:152 [ bsearch16u::return#3 ] : zp ZP_WORD:152 , +Potential registers zp ZP_WORD:154 [ sqrt::found#0 ] : zp ZP_WORD:154 , +Potential registers zp ZP_WORD:156 [ sqrt::$3 ] : zp ZP_WORD:156 , +Potential registers zp ZP_WORD:158 [ sqrt::$1 ] : zp ZP_WORD:158 , +Potential registers zp ZP_BYTE:160 [ sqrt::return#0 ] : zp ZP_BYTE:160 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:161 [ bsearch16u::$6 ] : zp ZP_BYTE:161 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:162 [ bsearch16u::$16 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:163 [ bsearch16u::pivot#0 ] : zp ZP_WORD:163 , +Potential registers zp ZP_WORD:165 [ bsearch16u::result#0 ] : zp ZP_WORD:165 , +Potential registers zp ZP_BYTE:167 [ sqr::$0 ] : zp ZP_BYTE:167 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:168 [ sqr::return#0 ] : zp ZP_WORD:168 , +Potential registers zp ZP_WORD:170 [ SQUARES#1 ] : zp ZP_WORD:170 , +Potential registers zp ZP_BYTE:172 [ init_squares::$3 ] : zp ZP_BYTE:172 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:173 [ init_squares::$4 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ 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:44 [ 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:37 [ 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: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 ] 2,283.07: 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 ] 2,002: zp ZP_BYTE:118 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:119 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:108 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ 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:104 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:106 [ atan2_16::y#0 ] -Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:55 [ 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:147 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:148 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:151 [ bsearch16u::result#0 ] 501: zp ZP_WORD:149 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:138 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:136 [ bsearch16u::key#0 ] -Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:97 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:98 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:101 [ init_angle_screen::$6 ] 202: zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:112 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:116 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:117 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:102 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:99 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 16.29: zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] 14.83: zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] -Uplift Scope [main] 577.83: zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] 347.89: zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 245.29: zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] 202: zp ZP_BYTE:68 [ main::$22 ] 202: zp ZP_WORD:69 [ main::fill#0 ] 151.5: zp ZP_WORD:71 [ main::angle#0 ] 128.55: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:64 [ main::$21 ] 22: zp ZP_WORD:73 [ main::fill1#0 ] 13: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:67 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:65 [ main::bucket#0 ] -Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:125 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:128 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:130 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:135 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.12: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] 12.5: zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:123 [ init_dist_screen::yds#0 ] -Uplift Scope [sqr] 338: zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:126 [ sqr::return#3 ] 28.5: zp ZP_WORD:154 [ sqr::return#0 ] 22: zp ZP_WORD:121 [ sqr::return#2 ] 4: zp ZP_BYTE:153 [ sqr::$0 ] -Uplift Scope [init_buckets] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 29.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:75 [ init_buckets::$15 ] 22: zp ZP_WORD:79 [ init_buckets::$12 ] 22: zp ZP_WORD:81 [ init_buckets::$16 ] 22: zp ZP_WORD:84 [ init_buckets::$9 ] 22: zp ZP_WORD:86 [ init_buckets::$13 ] 22: zp ZP_WORD:88 [ init_buckets::$17 ] 22: zp ZP_BYTE:94 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 11.73: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] 11: zp ZP_WORD:92 [ init_buckets::$10 ] 7.33: zp ZP_WORD:90 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:83 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:77 [ init_buckets::$5 ] -Uplift Scope [sqrt] 202: zp ZP_BYTE:134 [ sqrt::return#2 ] 103: zp ZP_WORD:132 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:146 [ sqrt::return#0 ] 4: zp ZP_WORD:140 [ sqrt::found#0 ] 4: zp ZP_WORD:142 [ sqrt::$3 ] 2: zp ZP_WORD:144 [ sqrt::$1 ] -Uplift Scope [init_squares] 25.17: zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:158 [ init_squares::$3 ] 22: zp ZP_BYTE:159 [ init_squares::$4 ] 13.93: zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] 0.8: zp ZP_WORD:95 [ malloc::mem#0 ] -Uplift Scope [] 13.17: zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] 0.03: zp ZP_WORD:156 [ SQUARES#1 ] +Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ 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:44 [ 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:37 [ 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: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 ] 2,283.07: 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 ] 2,002: zp ZP_BYTE:132 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:133 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:122 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ 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:118 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:120 [ atan2_16::y#0 ] +Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:55 [ 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:161 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:162 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:165 [ bsearch16u::result#0 ] 501: zp ZP_WORD:163 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:152 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:150 [ bsearch16u::key#0 ] +Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:111 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:112 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:115 [ init_angle_screen::$6 ] 202: zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:126 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:129 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:130 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:131 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:116 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:113 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:74 [ init_angle_screen::screen#0 ] +Uplift Scope [main] 577.83: zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] 347.89: zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] 245.29: zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] 202: zp ZP_BYTE:82 [ main::$22 ] 202: zp ZP_WORD:83 [ main::fill#0 ] 151.5: zp ZP_WORD:85 [ main::angle#0 ] 128.55: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:78 [ main::$21 ] 22: zp ZP_WORD:87 [ main::fill1#0 ] 13: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:81 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:79 [ main::bucket#0 ] +Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:139 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:142 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:144 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:149 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] 4.87: zp ZP_WORD:137 [ init_dist_screen::yds#0 ] +Uplift Scope [sqr] 338: zp ZP_BYTE:58 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:140 [ sqr::return#3 ] 28.5: zp ZP_WORD:168 [ sqr::return#0 ] 22: zp ZP_WORD:135 [ sqr::return#2 ] 4: zp ZP_BYTE:167 [ sqr::$0 ] +Uplift Scope [init_buckets] 34.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:89 [ init_buckets::$15 ] 22: zp ZP_WORD:93 [ init_buckets::$12 ] 22: zp ZP_WORD:95 [ init_buckets::$16 ] 22: zp ZP_WORD:98 [ init_buckets::$9 ] 22: zp ZP_WORD:100 [ init_buckets::$13 ] 22: zp ZP_WORD:102 [ init_buckets::$17 ] 22: zp ZP_BYTE:108 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp ZP_WORD:106 [ init_buckets::$10 ] 7.33: zp ZP_WORD:104 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:97 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:91 [ init_buckets::$5 ] 0.43: zp ZP_WORD:76 [ init_buckets::screen#0 ] +Uplift Scope [sqrt] 202: zp ZP_BYTE:148 [ sqrt::return#2 ] 103: zp ZP_WORD:146 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:160 [ sqrt::return#0 ] 4: zp ZP_WORD:154 [ sqrt::found#0 ] 4: zp ZP_WORD:156 [ sqrt::$3 ] 2: zp ZP_WORD:158 [ sqrt::$1 ] +Uplift Scope [init_squares] 25.17: zp ZP_WORD:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:63 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:172 [ init_squares::$3 ] 22: zp ZP_BYTE:173 [ init_squares::$4 ] 13.93: zp ZP_WORD:59 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp ZP_WORD:109 [ malloc::mem#0 ] +Uplift Scope [] 23.24: zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] 0.12: zp ZP_WORD:64 [ SCREEN_DIST#0 ] 0.05: zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] 0.04: zp ZP_WORD:72 [ BUCKET_IDX#0 ] 0.03: zp ZP_WORD:170 [ SQUARES#1 ] 0.03: zp ZP_WORD:70 [ BUCKETS#0 ] 0.02: zp ZP_WORD:68 [ BUCKET_SIZES#0 ] -Uplifting [atan2_16] best 1253711 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 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 a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:108 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:104 [ atan2_16::x#0 ] zp ZP_WORD:106 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1253979 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 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 a [ atan2_16::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:122 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:118 [ atan2_16::x#0 ] zp ZP_WORD:120 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [bsearch16u] best 1234711 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:55 [ 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:151 [ bsearch16u::result#0 ] zp ZP_WORD:149 [ bsearch16u::pivot#0 ] zp ZP_WORD:138 [ bsearch16u::return#3 ] zp ZP_WORD:136 [ bsearch16u::key#0 ] -Uplifting [init_angle_screen] best 1232511 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:110 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:112 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:116 [ init_angle_screen::$13 ] zp ZP_BYTE:117 [ init_angle_screen::$14 ] 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_BYTE:114 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:102 [ init_angle_screen::yw#0 ] zp ZP_WORD:99 [ init_angle_screen::xw#0 ] 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 ] +Uplifting [bsearch16u] best 1234979 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:55 [ 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:165 [ bsearch16u::result#0 ] zp ZP_WORD:163 [ bsearch16u::pivot#0 ] zp ZP_WORD:152 [ bsearch16u::return#3 ] zp ZP_WORD:150 [ bsearch16u::key#0 ] +Uplifting [init_angle_screen] best 1232779 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:124 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:126 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:130 [ init_angle_screen::$13 ] zp ZP_BYTE:131 [ init_angle_screen::$14 ] 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_BYTE:128 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:116 [ init_angle_screen::yw#0 ] zp ZP_WORD:113 [ init_angle_screen::xw#0 ] 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#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:74 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1231071 combination zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] reg byte a [ main::$22 ] zp ZP_WORD:69 [ main::fill#0 ] zp ZP_WORD:71 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:73 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:67 [ main::bucket_size#0 ] zp ZP_WORD:65 [ main::bucket#0 ] +Uplifting [main] best 1231339 combination zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] zp ZP_WORD:5 [ main::min_offset#5 main::min_offset#7 ] reg byte a [ main::$22 ] zp ZP_WORD:83 [ main::fill#0 ] zp ZP_WORD:85 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:87 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:81 [ main::bucket_size#0 ] zp ZP_WORD:79 [ main::bucket#0 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [init_dist_screen] best 1227871 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:128 [ init_dist_screen::xds#0 ] zp ZP_WORD:130 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:120 [ init_dist_screen::y2#0 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] zp ZP_WORD:123 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 1228139 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:142 [ init_dist_screen::xds#0 ] zp ZP_WORD:144 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:134 [ init_dist_screen::y2#0 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] zp ZP_WORD:137 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [sqr] best 1227534 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:126 [ sqr::return#3 ] zp ZP_WORD:154 [ sqr::return#0 ] zp ZP_WORD:121 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [init_buckets] best 1227174 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:10 [ init_buckets::dist#4 init_buckets::dist#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:75 [ init_buckets::$15 ] zp ZP_WORD:79 [ init_buckets::$12 ] zp ZP_WORD:81 [ init_buckets::$16 ] zp ZP_WORD:84 [ init_buckets::$9 ] zp ZP_WORD:86 [ init_buckets::$13 ] zp ZP_WORD:88 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#3 ] zp ZP_WORD:92 [ init_buckets::$10 ] zp ZP_WORD:90 [ init_buckets::bucket#0 ] reg byte x [ init_buckets::distance#0 ] zp ZP_WORD:77 [ init_buckets::$5 ] -Uplifting [sqrt] best 1226271 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:132 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:140 [ sqrt::found#0 ] zp ZP_WORD:142 [ sqrt::$3 ] zp ZP_WORD:144 [ sqrt::$1 ] -Uplifting [init_squares] best 1226071 combination zp ZP_WORD:61 [ 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:59 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [malloc] best 1226071 combination zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] zp ZP_WORD:95 [ malloc::mem#0 ] -Uplifting [] best 1226071 combination zp ZP_WORD:21 [ heap_head#13 heap_head#1 ] zp ZP_WORD:156 [ SQUARES#1 ] +Uplifting [sqr] best 1227802 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:140 [ sqr::return#3 ] zp ZP_WORD:168 [ sqr::return#0 ] zp ZP_WORD:135 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [init_buckets] best 1227522 combination zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:89 [ init_buckets::$15 ] zp ZP_WORD:93 [ init_buckets::$12 ] zp ZP_WORD:95 [ init_buckets::$16 ] zp ZP_WORD:98 [ init_buckets::$9 ] zp ZP_WORD:100 [ init_buckets::$13 ] zp ZP_WORD:102 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp ZP_WORD:106 [ init_buckets::$10 ] zp ZP_WORD:104 [ init_buckets::bucket#0 ] zp ZP_BYTE:97 [ init_buckets::distance#0 ] zp ZP_WORD:91 [ init_buckets::$5 ] zp ZP_WORD:76 [ init_buckets::screen#0 ] +Uplifting [sqrt] best 1226619 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:146 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:154 [ sqrt::found#0 ] zp ZP_WORD:156 [ sqrt::$3 ] zp ZP_WORD:158 [ sqrt::$1 ] +Uplifting [init_squares] best 1226419 combination zp ZP_WORD:61 [ 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:59 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [malloc] best 1226419 combination zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] zp ZP_WORD:109 [ malloc::mem#0 ] +Uplifting [] best 1226419 combination zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] zp ZP_WORD:64 [ SCREEN_DIST#0 ] zp ZP_WORD:66 [ SCREEN_ANGLE#0 ] zp ZP_WORD:72 [ BUCKET_IDX#0 ] zp ZP_WORD:170 [ SQUARES#1 ] zp ZP_WORD:70 [ BUCKETS#0 ] zp ZP_WORD:68 [ BUCKET_SIZES#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] -Uplifting [main] best 1226071 combination zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:116 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1225671 combination reg byte a [ init_angle_screen::$13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:117 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1225071 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [main] best 1226419 combination zp ZP_BYTE:4 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:130 [ init_angle_screen::$13 ] +Uplifting [init_angle_screen] best 1226019 combination reg byte a [ init_angle_screen::$13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:131 [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1225419 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 1225071 combination zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 1225419 combination zp ZP_BYTE:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1225071 combination zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 1225071 combination zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 1225419 combination zp ZP_BYTE:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1225071 combination zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1225071 combination zp ZP_BYTE:114 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1225419 combination zp ZP_BYTE:128 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 1225001 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:120 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 1224901 combination reg byte a [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1225349 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:134 [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1225249 combination reg byte a [ init_dist_screen::y2#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1224901 combination zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1225249 combination zp ZP_BYTE:25 [ init_angle_screen::y#4 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 1224901 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Uplifting [init_dist_screen] best 1225249 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Uplifting [main] best 1224901 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:67 [ main::bucket_size#0 ] -Uplifting [main] best 1224901 combination zp ZP_BYTE:67 [ main::bucket_size#0 ] -Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] ] with [ zp ZP_WORD:73 [ main::fill1#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 ] ] with [ zp ZP_WORD:75 [ init_buckets::$15 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 ] ] with [ zp ZP_WORD:95 [ malloc::mem#0 ] ] - score: 1 +Uplifting [main] best 1225249 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:81 [ main::bucket_size#0 ] +Uplifting [main] best 1225249 combination zp ZP_BYTE:81 [ main::bucket_size#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:97 [ init_buckets::distance#0 ] +Uplifting [init_buckets] best 1225249 combination zp ZP_BYTE:97 [ init_buckets::distance#0 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 ] ] with [ zp ZP_WORD:87 [ main::fill1#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp ZP_WORD:89 [ init_buckets::$15 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp ZP_WORD:109 [ malloc::mem#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:26 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:74 [ init_angle_screen::screen#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:39 [ 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:55 [ 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:138 [ bsearch16u::return#3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:79 [ init_buckets::$12 ] ] with [ zp ZP_WORD:81 [ init_buckets::$16 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ init_buckets::$9 ] ] with [ zp ZP_WORD:86 [ init_buckets::$13 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:88 [ init_buckets::$17 ] ] with [ zp ZP_WORD:90 [ init_buckets::bucket#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:99 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:104 [ atan2_16::x#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:102 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:106 [ atan2_16::y#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:108 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:110 [ init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:121 [ sqr::return#2 ] ] with [ zp ZP_WORD:123 [ init_dist_screen::yds#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 ] ] with [ zp ZP_WORD:128 [ init_dist_screen::xds#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:154 [ sqr::return#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:130 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:132 [ sqrt::val#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqrt::found#0 ] ] with [ zp ZP_WORD:142 [ sqrt::$3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:77 [ init_buckets::$5 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:156 [ SQUARES#1 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ 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:108 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ 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:140 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:84 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:88 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:130 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ 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:112 [ init_angle_screen::$10 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ 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:144 [ sqrt::$1 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:126 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:136 [ bsearch16u::key#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ 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:152 [ bsearch16u::return#3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:64 [ SCREEN_DIST#0 ] ] with [ zp ZP_WORD:76 [ init_buckets::screen#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:93 [ init_buckets::$12 ] ] with [ zp ZP_WORD:95 [ init_buckets::$16 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:98 [ init_buckets::$9 ] ] with [ zp ZP_WORD:100 [ init_buckets::$13 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:102 [ init_buckets::$17 ] ] with [ zp ZP_WORD:104 [ init_buckets::bucket#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:113 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:118 [ atan2_16::x#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:116 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:120 [ atan2_16::y#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:122 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:124 [ init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:135 [ sqr::return#2 ] ] with [ zp ZP_WORD:137 [ init_dist_screen::yds#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 ] ] with [ zp ZP_WORD:142 [ init_dist_screen::xds#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:168 [ sqr::return#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:144 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:146 [ sqrt::val#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:154 [ sqrt::found#0 ] ] with [ zp ZP_WORD:156 [ sqrt::$3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:91 [ init_buckets::$5 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:170 [ SQUARES#1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ 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:122 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ 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:154 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:98 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:102 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:144 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ 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:126 [ init_angle_screen::$10 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ 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:158 [ sqrt::$1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:150 [ bsearch16u::key#0 ] ] - score: 1 Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:3 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ main::min_offset#5 main::min_offset#7 ] Allocated (was zp ZP_WORD:7) zp ZP_WORD:6 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 main::fill1#0 ] -Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#1 ] +Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] Allocated (was zp ZP_WORD:12) zp ZP_WORD:10 [ init_buckets::i1#2 init_buckets::i1#1 ] Allocated (was zp ZP_WORD:14) zp ZP_WORD:12 [ init_buckets::i2#2 init_buckets::i2#1 ] -Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#3 ] +Allocated (was zp ZP_WORD:17) zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] Allocated (was zp ZP_WORD:19) zp ZP_WORD:16 [ init_buckets::i4#2 init_buckets::i4#1 ] -Allocated (was zp ZP_WORD:21) zp ZP_WORD:18 [ heap_head#13 heap_head#1 ] -Allocated (was zp ZP_WORD:23) zp ZP_WORD:20 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] +Allocated (was zp ZP_WORD:21) zp ZP_WORD:18 [ heap_head#18 heap_head#1 ] +Allocated (was zp ZP_WORD:23) zp ZP_WORD:20 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:22 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -Allocated (was zp ZP_WORD:26) zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -Allocated (was zp ZP_WORD:28) zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +Allocated (was zp ZP_WORD:26) zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] +Allocated (was zp ZP_WORD:28) zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:27 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:28 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Allocated (was zp ZP_WORD:32) zp ZP_WORD:29 [ 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 ] @@ -6592,27 +7001,33 @@ Allocated (was zp ZP_WORD:37) zp ZP_WORD:33 [ atan2_16::angle#6 atan2_16::angle# Allocated (was zp ZP_WORD:42) zp ZP_WORD:35 [ 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:44) zp ZP_WORD:37 [ 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:46) zp ZP_BYTE:39 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Allocated (was zp ZP_WORD:47) zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -Allocated (was zp ZP_WORD:49) zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +Allocated (was zp ZP_WORD:47) zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] +Allocated (was zp ZP_WORD:49) zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] Allocated (was zp ZP_BYTE:52) zp ZP_BYTE:44 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Allocated (was zp ZP_BYTE:53) zp ZP_BYTE:45 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Allocated (was zp ZP_WORD:55) zp ZP_WORD:46 [ 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:59) zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] Allocated (was zp ZP_WORD:61) zp ZP_WORD:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] -Allocated (was zp ZP_WORD:65) zp ZP_WORD:52 [ main::bucket#0 ] -Allocated (was zp ZP_BYTE:67) zp ZP_BYTE:54 [ main::bucket_size#0 ] -Allocated (was zp ZP_WORD:69) zp ZP_WORD:55 [ main::fill#0 ] -Allocated (was zp ZP_WORD:71) zp ZP_WORD:57 [ main::angle#0 ] -Allocated (was zp ZP_WORD:79) zp ZP_WORD:59 [ init_buckets::$12 init_buckets::$16 ] -Allocated (was zp ZP_WORD:84) zp ZP_WORD:61 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] -Allocated (was zp ZP_WORD:92) zp ZP_WORD:63 [ init_buckets::$10 ] -Allocated (was zp ZP_WORD:99) zp ZP_WORD:65 [ init_angle_screen::xw#0 atan2_16::x#0 ] -Allocated (was zp ZP_WORD:102) zp ZP_WORD:67 [ init_angle_screen::yw#0 atan2_16::y#0 ] -Allocated (was zp ZP_BYTE:114) zp ZP_BYTE:69 [ init_angle_screen::ang_w#0 ] -Allocated (was zp ZP_WORD:121) zp ZP_WORD:70 [ sqr::return#2 init_dist_screen::yds#0 ] -Allocated (was zp ZP_WORD:126) zp ZP_WORD:72 [ 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:149) zp ZP_WORD:74 [ bsearch16u::pivot#0 ] -Allocated (was zp ZP_WORD:151) zp ZP_WORD:76 [ bsearch16u::result#0 ] +Allocated (was zp ZP_WORD:64) zp ZP_WORD:52 [ SCREEN_DIST#0 init_buckets::screen#0 ] +Allocated (was zp ZP_WORD:66) zp ZP_WORD:54 [ SCREEN_ANGLE#0 ] +Allocated (was zp ZP_WORD:68) zp ZP_WORD:56 [ BUCKET_SIZES#0 ] +Allocated (was zp ZP_WORD:70) zp ZP_WORD:58 [ BUCKETS#0 ] +Allocated (was zp ZP_WORD:72) zp ZP_WORD:60 [ BUCKET_IDX#0 ] +Allocated (was zp ZP_WORD:79) zp ZP_WORD:62 [ main::bucket#0 ] +Allocated (was zp ZP_BYTE:81) zp ZP_BYTE:64 [ main::bucket_size#0 ] +Allocated (was zp ZP_WORD:83) zp ZP_WORD:65 [ main::fill#0 ] +Allocated (was zp ZP_WORD:85) zp ZP_WORD:67 [ main::angle#0 ] +Allocated (was zp ZP_WORD:93) zp ZP_WORD:69 [ init_buckets::$12 init_buckets::$16 ] +Allocated (was zp ZP_BYTE:97) zp ZP_BYTE:71 [ init_buckets::distance#0 ] +Allocated (was zp ZP_WORD:98) zp ZP_WORD:72 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +Allocated (was zp ZP_WORD:106) zp ZP_WORD:74 [ init_buckets::$10 ] +Allocated (was zp ZP_WORD:113) zp ZP_WORD:76 [ init_angle_screen::xw#0 atan2_16::x#0 ] +Allocated (was zp ZP_WORD:116) zp ZP_WORD:78 [ init_angle_screen::yw#0 atan2_16::y#0 ] +Allocated (was zp ZP_BYTE:128) zp ZP_BYTE:80 [ init_angle_screen::ang_w#0 ] +Allocated (was zp ZP_WORD:135) zp ZP_WORD:81 [ sqr::return#2 init_dist_screen::yds#0 ] +Allocated (was zp ZP_WORD:140) zp ZP_WORD:83 [ 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:163) zp ZP_WORD:85 [ bsearch16u::pivot#0 ] +Allocated (was zp ZP_WORD:165) zp ZP_WORD:87 [ bsearch16u::result#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -6624,6 +7039,8 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 + .const SIZEOF_BYTE = 1 + .const SIZEOF_POINTER = 2 .label RASTER = $d012 .label BORDERCOL = $d020 // Color Ram @@ -6632,7 +7049,6 @@ ASSEMBLER BEFORE OPTIMIZATION .label HEAP_TOP = $a000 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // = malloc(1000); // Screen containing angle to center .label SCREEN_FILL = $400 // Char to fill with @@ -6642,6 +7058,18 @@ ASSEMBLER BEFORE OPTIMIZATION .const NUM_SQUARES = $30 .label heap_head = $12 .label SQUARES = $14 + // Screen containing distance to center + .label SCREEN_DIST = $34 + // Screen containing angle to center + .label SCREEN_ANGLE = $36 + // Array containing the bucket size for each of the distance buckets + .label BUCKET_SIZES = $38 + // Buckets containing screen indices for each distance from the center. + // BUCKETS[dist] is an array of words containing screen indices. + // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] + .label BUCKETS = $3a + // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) + .label BUCKET_IDX = $3c // @begin bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -6649,21 +7077,125 @@ b1_from_bbegin: jmp b1 // @1 b1: - // [2] call main + // [2] call malloc + // [93] phi from @1 to malloc [phi:@1->malloc] +malloc_from_b1: + // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 + lda #HEAP_TOP + sta heap_head+1 + jsr malloc + jmp b4 + // @4 +b4: + // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta SCREEN_DIST + lda malloc.mem+1 + sta SCREEN_DIST+1 + // [4] call malloc + // [93] phi from @4 to malloc [phi:@4->malloc] +malloc_from_b4: + // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy + jsr malloc + jmp b5 + // @5 +b5: + // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta SCREEN_ANGLE + lda malloc.mem+1 + sta SCREEN_ANGLE+1 + // [6] phi from @5 to @2 [phi:@5->@2] +b2_from_b5: + jmp b2 + // @2 +b2: + // [7] call malloc + // [93] phi from @2 to malloc [phi:@2->malloc] +malloc_from_b2: + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy + jsr malloc + jmp b6 + // @6 +b6: + // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKET_SIZES + lda malloc.mem+1 + sta BUCKET_SIZES+1 + // [9] call malloc + // [93] phi from @6 to malloc [phi:@6->malloc] +malloc_from_b6: + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_POINTER + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy + jsr malloc + jmp b7 + // @7 +b7: + // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKETS + lda malloc.mem+1 + sta BUCKETS+1 + // [11] call malloc + // [93] phi from @7 to malloc [phi:@7->malloc] +malloc_from_b7: + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy + jsr malloc + jmp b8 + // @8 +b8: + // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKET_IDX + lda malloc.mem+1 + sta BUCKET_IDX+1 + // [13] phi from @8 to @3 [phi:@8->@3] +b3_from_b8: + jmp b3 + // @3 +b3: + // [14] call main jsr main - // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: + // [15] phi from @3 to @end [phi:@3->@end] +bend_from_b3: jmp bend // @end bend: // main main: { - .label bucket = $34 - .label bucket_size = $36 + .label bucket = $3e + .label bucket_size = $40 .label bucket_idx = 2 .label offset = 6 - .label fill = $37 - .label angle = $39 + .label fill = $41 + .label angle = $43 .label min_angle = 3 .label fill1 = 6 .label min_offset = 6 @@ -6671,31 +7203,36 @@ main: { .label min_offset_7 = 4 // asm { sei } sei - // [5] call init_dist_screen - // [155] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + lda SCREEN_DIST + sta init_dist_screen.screen + lda SCREEN_DIST+1 + sta init_dist_screen.screen+1 + // [18] call init_dist_screen + // [171] 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::@14 [phi:main->main::@14] - b14_from_main: jmp b14 // main::@14 b14: - // [7] call init_angle_screen - // [82] phi from main::@14 to init_angle_screen [phi:main::@14->init_angle_screen] - init_angle_screen_from_b14: + // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 + lda SCREEN_ANGLE + sta init_angle_screen.screen + lda SCREEN_ANGLE+1 + sta init_angle_screen.screen+1 + // [20] call init_angle_screen jsr init_angle_screen - // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15] - b15_from_b14: jmp b15 // main::@15 b15: - // [9] call init_buckets - // [40] phi from main::@15 to init_buckets [phi:main::@15->init_buckets] + // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + // [22] call init_buckets + // [53] phi from main::@15 to init_buckets [phi:main::@15->init_buckets] init_buckets_from_b15: jsr init_buckets - // [10] phi from main::@15 to main::@1 [phi:main::@15->main::@1] + // [23] phi from main::@15 to main::@1 [phi:main::@15->main::@1] b1_from_b15: - // [10] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 + // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 lda #0 sta bucket_idx jmp b1 @@ -6704,58 +7241,59 @@ main: { jmp b2 // main::@2 b2: - // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne b2 jmp b3 // main::@3 b3: - // [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda bucket_idx asl - // [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptc1_derefidx_vbuaa + // [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuaa tay - lda BUCKETS,y + lda (BUCKETS),y sta bucket - lda BUCKETS+1,y + iny + lda (BUCKETS),y sta bucket+1 - // [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 + // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 ldy bucket_idx - lda BUCKET_SIZES,y + lda (BUCKET_SIZES),y sta bucket_size - // [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 + // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 lda bucket_size cmp #0 beq b4 - // [17] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5] b5_from_b3: - // [17] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 + // [30] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 lda #<$ffff sta min_offset_5 lda #>$ffff sta min_offset_5+1 - // [17] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 + // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 lda #$ff sta min_angle - // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 + // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 ldx #0 jmp b5 // main::@5 b5: - // [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa + // [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (bucket),y sta offset iny lda (bucket),y sta offset+1 - // [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda offset clc adc #SCREEN_FILL sta fill+1 - // [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 + // [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 lda #FILL_CHAR ldy #0 cmp (fill),y @@ -6771,15 +7309,15 @@ main: { jmp b7 // main::@7 b7: - // [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 - lda offset + // [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 + lda SCREEN_ANGLE clc - adc #SCREEN_ANGLE + lda SCREEN_ANGLE+1 + adc offset+1 sta angle+1 - // [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 + // [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 ldy #0 lda (angle),y cmp min_angle @@ -6789,28 +7327,28 @@ main: { jmp b8 // main::@8 b8: - // [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 + // [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (angle),y sta min_angle - // [25] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6] + // [38] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6] b6_from_b17: b6_from_b18: b6_from_b8: - // [25] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy - // [25] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy + // [38] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy + // [38] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy jmp b6 // main::@6 b6: - // [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [39] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [27] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuxx_lt_vbuz1_then_la1 + // [40] if((byte) main::i#1<(byte) main::bucket_size#0) goto main::@16 -- vbuxx_lt_vbuz1_then_la1 cpx bucket_size bcc b16 jmp b9 // main::@9 b9: - // [28] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 + // [41] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 lda min_offset cmp #<$ffff bne !+ @@ -6821,7 +7359,7 @@ main: { jmp b10 // main::@10 b10: - // [29] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 + // [42] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 clc lda fill1 adc #SCREEN_FILL sta fill1+1 - // [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 + // [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 lda #FILL_CHAR ldy #0 sta (fill1),y - // [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1] b1_from_b10: jmp b1 // main::@4 b4: - // [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 + // [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 inc bucket_idx - // [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 + // [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS cmp bucket_idx bne b11 jmp b12 // main::@12 b12: - // [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp b13 // main::@13 b13: - // [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp b13 // main::@11 b11: - // [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@11 to main::@1 [phi:main::@11->main::@1] + // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1] b1_from_b11: - // [10] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy + // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy jmp b1 // main::@16 b16: - // [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda min_offset sta min_offset_7 lda min_offset+1 sta min_offset_7+1 - // [17] phi from main::@16 to main::@5 [phi:main::@16->main::@5] + // [30] phi from main::@16 to main::@5 [phi:main::@16->main::@5] b5_from_b16: - // [17] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy - // [17] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy - // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy + // [30] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy + // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy + // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy jmp b5 // main::@17 b17: - // [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda min_offset_5 sta min_offset lda min_offset_5+1 @@ -6888,7 +7426,7 @@ main: { jmp b6_from_b17 // main::@18 b18: - // [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda min_offset_5 sta min_offset lda min_offset_5+1 @@ -6897,108 +7435,119 @@ main: { } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. +// init_buckets(byte* zeropage($34) screen) init_buckets: { .label _5 = $14 - .label _9 = $3d - .label _10 = $3f - .label _12 = $3b - .label _13 = $3d + .label _9 = $48 + .label _10 = $4a + .label _12 = $45 + .label _13 = $48 + .label screen = $34 .label dist = 8 .label i1 = $a .label i2 = $c - .label bucket = $3d + .label distance = $47 + .label bucket = $48 .label dist_3 = $e .label i4 = $10 .label dist_5 = $e .label _15 = $14 - .label _16 = $3b - .label _17 = $3d - // [41] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + .label _16 = $45 + .label _17 = $48 + .label dist_8 = $e + // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] b1_from_init_buckets: - // [41] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 - ldx #0 + // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 + ldy #0 jmp b1 // Init bucket sizes to 0 - // [41] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] b1_from_b1: - // [41] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [54] 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: - // [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 - sta BUCKET_SIZES,x - // [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx - inx - // [44] 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 + sta (BUCKET_SIZES),y + // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy + iny + // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #NUM_BUCKETS-1+1 bne b1_from_b1 - // [45] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] - b2_from_b1: - // [45] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 + jmp b2 + // init_buckets::@2 + b2: + // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + lda screen + sta dist + lda screen+1 + sta dist+1 + // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + b3_from_b2: + // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 lda #<0 sta i1 lda #>0 sta i1+1 - // [45] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 - lda #SCREEN_DIST - sta dist+1 - jmp b2 - // [45] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] - b2_from_b2: - // [45] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy - // [45] 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: - // [46] *((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 + // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy + jmp b3 + // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] + b3_from_b3: + // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy + // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy + jmp b3 + // init_buckets::@3 + b3: + // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 ldy #0 lda (dist),y - tax - inc BUCKET_SIZES,x - // [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + tay + lda (BUCKET_SIZES),y + clc + adc #1 + sta (BUCKET_SIZES),y + // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc dist bne !+ inc dist+1 !: - // [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 + // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>$3e8 - bne b2_from_b2 + bne b3_from_b3 lda i1 cmp #<$3e8 - bne b2_from_b2 - // [50] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] - b3_from_b2: - // [50] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + bne b3_from_b3 + // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] + b4_from_b3: + // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 lda #<0 sta i2 lda #>0 sta i2+1 - jmp b3 + jmp b4 // Allocate the buckets - // [50] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] - b3_from_b6: - // [50] 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: - // [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 - lda i2 + // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] + b4_from_b8: + // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy + jmp b4 + // init_buckets::@4 + b4: + // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 + lda BUCKET_SIZES clc - adc #BUCKET_SIZES + lda BUCKET_SIZES+1 + adc i2+1 sta _15+1 - // [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 + // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 ldy #0 lda (malloc.size),y asl @@ -7006,111 +7555,115 @@ init_buckets: { lda #0 rol sta malloc.size+1 - // [53] call malloc - // [78] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] - malloc_from_b3: - // [78] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy - // [78] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy + // [67] call malloc + // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] + malloc_from_b4: + // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy jsr malloc - jmp b6 - // init_buckets::@6 - b6: - // [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 - // [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + jmp b8 + // init_buckets::@8 + b8: + // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda i2 asl sta _12 lda i2+1 rol sta _12+1 - // [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz1 - clc + // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 lda _16 - adc #BUCKETS + adc BUCKETS+1 sta _16+1 - // [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 + // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 ldy #0 lda _5 sta (_16),y iny lda _5+1 sta (_16),y - // [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc i2 bne !+ inc i2+1 !: - // [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 lda i2+1 cmp #>NUM_BUCKETS-1+1 - bne b3_from_b6 + bne b4_from_b8 lda i2 cmp #init_buckets::@4] - b4_from_b6: - // [60] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@6->init_buckets::@4#0] -- vbuxx=vbuc1 - ldx #0 - jmp b4 + bne b4_from_b8 + // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5] + b5_from_b8: + // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 + ldy #0 + jmp b5 // Iterate all distances and fill the buckets with indices into the screens - // [60] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] - b4_from_b4: - // [60] 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: - // [61] *((const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + b5_from_b5: + // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + jmp b5 + // init_buckets::@5 + b5: + // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 - sta BUCKET_IDX,x - // [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx - inx - // [63] 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 - bne b4_from_b4 - // [64] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] - b5_from_b4: - // [64] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 + sta (BUCKET_IDX),y + // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy + iny + // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 + cpy #NUM_BUCKETS-1+1 + bne b5_from_b5 + jmp b6 + // init_buckets::@6 + b6: + // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + lda screen + sta dist_8 + lda screen+1 + sta dist_8+1 + // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] + b7_from_b6: + // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 lda #<0 sta i4 lda #>0 sta i4+1 - // [64] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 - lda #SCREEN_DIST - sta dist_5+1 - jmp b5 - // [64] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] - b5_from_b5: - // [64] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy - // [64] 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: - // [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 + // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy + jmp b7 + // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] + b7_from_b7: + // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy + // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy + jmp b7 + // init_buckets::@7 + b7: + // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_5),y - tax - // [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuxx - txa + sta distance + // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 + lda distance sta _9 lda #0 sta _9+1 - // [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl _13 rol _13+1 - // [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz1 - clc + // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 lda _17 - adc #BUCKETS + adc BUCKETS+1 sta _17+1 - // [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 + // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 ldy #0 lda (bucket),y pha @@ -7119,47 +7672,52 @@ init_buckets: { sta bucket+1 pla sta bucket - // [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 + // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 lda dist_5 sec - sbc #SCREEN_DIST + sbc screen+1 sta _10+1 - // [71] (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 + // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 + ldy distance + lda (BUCKET_IDX),y asl - // [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 + // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 tay lda _10 sta (bucket),y iny lda _10+1 sta (bucket),y - // [73] *((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 - // [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 + ldy distance + lda (BUCKET_IDX),y + clc + adc #1 + sta (BUCKET_IDX),y + // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc dist_3 bne !+ inc dist_3+1 !: - // [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc i4 bne !+ inc i4+1 !: - // [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 + // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 lda i4+1 cmp #>$3e8 - bne b5_from_b5 + bne b7_from_b7 lda i4 cmp #<$3e8 - bne b5_from_b5 + bne b7_from_b7 jmp breturn // init_buckets::@return breturn: - // [77] return + // [92] return rts } // malloc @@ -7169,7 +7727,7 @@ init_buckets: { malloc: { .label mem = $14 .label size = $14 - // [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 + // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec sbc mem @@ -7177,7 +7735,7 @@ malloc: { lda heap_head+1 sbc mem+1 sta mem+1 - // [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 @@ -7185,91 +7743,101 @@ malloc: { jmp breturn // malloc::@return breturn: - // [81] return + // [96] 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(byte* zeropage($17) screen) init_angle_screen: { .label _10 = $21 - .label xw = $41 - .label yw = $43 - .label angle_w = $21 - .label ang_w = $45 - .label x = $1b - .label xb = $1c + .label screen = $17 .label screen_topline = $19 .label screen_bottomline = $17 + .label xw = $4c + .label yw = $4e + .label angle_w = $21 + .label ang_w = $50 + .label x = $1b + .label xb = $1c .label y = $16 - // [83] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - b1_from_init_angle_screen: - // [83] 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 + lda screen+1 + adc #>$28*$c sta screen_topline+1 - // [83] 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 + lda screen_bottomline+1 + adc #>$28*$c sta screen_bottomline+1 - // [83] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + b1_from_init_angle_screen: + // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [99] 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 - // [83] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] + // [99] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] b1_from_b3: - // [83] 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 - // [83] 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 - // [83] 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 + // [99] 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 + // [99] 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 + // [99] 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: - // [84] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] b2_from_b1: - // [84] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [100] 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 - // [84] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [100] 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 - // [84] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] + // [100] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] b2_from_b4: - // [84] 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 - // [84] 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 + // [100] 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 + // [100] 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: - // [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa + // [102] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [103] (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 - // [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [105] (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 - // [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [92] call atan2_16 + // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [108] call atan2_16 jsr atan2_16 - // [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp b4 // init_angle_screen::@4 b4: - // [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _10 @@ -7277,47 +7845,47 @@ init_angle_screen: { bcc !+ inc _10+1 !: - // [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 + // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 lda _10+1 sta ang_w - // [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((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 - // [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [114] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda ang_w eor #$ff clc adc #1 - // [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa + // [115] *((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 - // [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [116] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc ang_w - // [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [117] *((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 - // [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [118] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc ang_w - // [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [119] *((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 - // [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 + // [122] 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: - // [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [123] (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 @@ -7325,7 +7893,7 @@ init_angle_screen: { lda screen_topline+1 sbc #>$28 sta screen_topline+1 - // [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [124] (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 @@ -7333,23 +7901,23 @@ init_angle_screen: { bcc !+ inc screen_bottomline+1 !: - // [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 + // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 inc y - // [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [126] 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: - // [111] return + // [127] 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($41) x, signed word zeropage($43) y) +// atan2_16(signed word zeropage($4c) x, signed word zeropage($4e) y) atan2_16: { .label _2 = $1d .label _7 = $1f @@ -7359,15 +7927,15 @@ atan2_16: { .label xd = $25 .label yd = $23 .label return = $21 - .label x = $41 - .label y = $43 - // [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + .label x = $4c + .label y = $4e + // [128] 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: - // [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -7375,20 +7943,20 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [114] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [130] 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: - // [114] 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 + // [130] 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: - // [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [131] 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: - // [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -7396,49 +7964,49 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [117] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [133] 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: - // [117] 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 + // [133] 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: - // [118] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] b10_from_b6: - // [118] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [134] 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 - // [118] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 - // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [134] 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: - // [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [135] 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 - // [120] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [136] 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: - // [120] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [136] 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: - // [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr angle+1 ror angle - // [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [138] 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: - // [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -7446,20 +8014,20 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [124] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [140] 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: - // [124] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [140] 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: - // [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [141] 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: - // [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -7467,79 +8035,79 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [127] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [143] 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: - // [127] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [143] 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: - // [128] return + // [144] return rts // atan2_16::@11 b11: - // [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [132] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [148] 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: - // [132] 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 - // [132] 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 - // [132] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [148] 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 + // [148] 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 + // [148] 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: - // [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [149] 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: - // [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [150] 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: - // [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [151] (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 - // [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [152] (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 - // [137] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [153] 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: - // [137] 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 - // [137] 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 + // [153] 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 + // [153] 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: - // [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [154] 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: - // [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [155] (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 @@ -7547,7 +8115,7 @@ atan2_16: { lda xi+1 sbc yd+1 sta xi+1 - // [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [156] (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 @@ -7555,10 +8123,10 @@ atan2_16: { lda yi+1 adc xd+1 sta yi+1 - // [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [142] (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 + // [158] (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 @@ -7567,30 +8135,30 @@ atan2_16: { lda angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle+1 - // [143] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [159] 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: - // [143] 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 - // [143] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [143] 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 + // [159] 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 + // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [159] 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: - // [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [145] 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 + // [161] 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 - // [118] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] b10_from_b19: - // [118] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [118] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [134] 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: - // [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [162] (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 @@ -7598,7 +8166,7 @@ atan2_16: { lda xi+1 adc yd+1 sta xi+1 - // [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [163] (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 @@ -7606,10 +8174,10 @@ atan2_16: { lda yi+1 sbc xd+1 sta yi+1 - // [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [149] (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 + // [165] (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 @@ -7621,7 +8189,7 @@ atan2_16: { jmp b19_from_b18 // atan2_16::@14 b14: - // [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [166] (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 @@ -7630,7 +8198,7 @@ atan2_16: { cmp #$80 ror xd+1 ror xd - // [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [167] (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 @@ -7639,13 +8207,13 @@ atan2_16: { cmp #$80 ror yd+1 ror yd - // [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [168] (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: - // [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -7653,7 +8221,7 @@ atan2_16: { jmp b6_from_b4 // atan2_16::@1 b1: - // [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -7664,126 +8232,131 @@ atan2_16: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center +// init_dist_screen(byte* zeropage($28) screen) init_dist_screen: { - .label yds = $46 - .label xds = $48 - .label ds = $48 + .label screen = $28 + .label screen_bottomline = $2a + .label yds = $51 + .label xds = $53 + .label ds = $53 .label x = $2c .label xb = $2d .label screen_topline = $28 - .label screen_bottomline = $2a .label y = $27 - // [156] call init_squares - // [226] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [172] call init_squares + // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares - // [157] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] - b1_from_init_dist_screen: - // [157] 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 + lda screen+1 + adc #>$28*$18 sta screen_bottomline+1 - // [157] 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 - // [157] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [174] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1] + b1_from_b10: + // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@10->init_dist_screen::@1#0] -- register_copy + // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@10->init_dist_screen::@1#1] -- register_copy + // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y jmp b1 - // [157] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] + // [174] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] b1_from_b9: - // [157] 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 - // [157] 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 - // [157] 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 + // [174] 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 + // [174] 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 + // [174] 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: - // [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl - // [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [176] 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: - // [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [161] 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] + // [178] 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: - // [161] 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 + // [178] 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: - // [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [163] call sqr - // [222] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [180] call sqr + // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from_b4: - // [222] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [164] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [181] (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 - jmp b10 - // init_dist_screen::@10 - b10: - // [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [166] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] - b5_from_b10: - // [166] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 + jmp b11 + // init_dist_screen::@11 + b11: + // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [183] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5] + b5_from_b11: + // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [166] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta x jmp b5 - // [166] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - b5_from_b12: - // [166] 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 - // [166] 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 + // [183] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5] + b5_from_b13: + // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy + // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy jmp b5 // init_dist_screen::@5 b5: - // [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl - // [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 + // [185] 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: - // [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [170] 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] + // [187] 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: - // [170] 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 + // [187] 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: - // [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [172] call sqr - // [222] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] + // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [189] call sqr + // [239] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] sqr_from_b8: - // [222] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy + // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy jsr sqr - // [173] (word) sqr::return#3 ← (word) sqr::return#0 - jmp b11 - // init_dist_screen::@11 - b11: - // [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [190] (word) sqr::return#3 ← (word) sqr::return#0 + jmp b12 + // init_dist_screen::@12 + b12: + // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [192] (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 @@ -7791,38 +8364,38 @@ init_dist_screen: { lda ds+1 adc yds+1 sta ds+1 - // [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [177] call sqrt + // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [194] call sqrt jsr sqrt - // [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0 - jmp b12 - // init_dist_screen::@12 - b12: - // [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + jmp b13 + // init_dist_screen::@13 + b13: + // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [197] *((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 - // [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [198] *((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 - // [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [199] *((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 - // [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [200] *((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 - // [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 + // [203] 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 + bcc b5_from_b13 jmp b9 // init_dist_screen::@9 b9: - // [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [204] (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 @@ -7830,7 +8403,7 @@ init_dist_screen: { bcc !+ inc screen_topline+1 !: - // [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [205] (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 @@ -7838,26 +8411,26 @@ init_dist_screen: { lda screen_bottomline+1 sbc #>$28 sta screen_bottomline+1 - // [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc y - // [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [207] 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: - // [191] return + // [208] return rts // init_dist_screen::@6 b6: - // [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [209] (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: - // [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp b4_from_b2 @@ -7866,28 +8439,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($48) val) +// sqrt(word zeropage($53) val) sqrt: { .label _1 = $2e .label _3 = $2e .label found = $2e - .label val = $48 - // [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + .label val = $53 + // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta bsearch16u.items lda SQUARES+1 sta bsearch16u.items+1 - // [196] call bsearch16u - // [203] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [213] call bsearch16u + // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 jmp b1 // sqrt::@1 b1: - // [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - // [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda _3 sec sbc SQUARES @@ -7895,15 +8468,15 @@ sqrt: { lda _3+1 sbc SQUARES+1 sta _3+1 - // [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr _1+1 ror _1 - // [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda _1 jmp breturn // sqrt::@return breturn: - // [202] return + // [219] return rts } // bsearch16u @@ -7912,29 +8485,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($48) key, word* zeropage($2e) items, byte register(X) num) +// bsearch16u(word zeropage($53) key, word* zeropage($2e) items, byte register(X) num) bsearch16u: { .label _2 = $2e - .label pivot = $4a - .label result = $4c + .label pivot = $55 + .label result = $57 .label return = $2e .label items = $2e - .label key = $48 - // [204] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + .label key = $53 + // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] b3_from_bsearch16u: - // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [204] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [221] 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: - // [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 cpx #0 bne b4 jmp b5 // bsearch16u::@5 b5: - // [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [223] 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 @@ -7948,7 +8521,7 @@ bsearch16u: { jmp b1 // bsearch16u::@1 b1: - // [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -7956,37 +8529,37 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [208] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] b2_from_b1: b2_from_b5: - // [208] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp b2 // bsearch16u::@2 b2: - // [209] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] breturn_from_b2: breturn_from_b8: - // [209] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp breturn // bsearch16u::@return breturn: - // [210] return + // [227] return rts // bsearch16u::@4 b4: - // [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr - // [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [230] (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 - // [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [231] (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 @@ -7996,7 +8569,7 @@ bsearch16u: { iny sbc (pivot),y sta result+1 - // [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 lda result+1 bne b6 lda result @@ -8004,7 +8577,7 @@ bsearch16u: { jmp b8 // bsearch16u::@8 b8: - // [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda pivot sta return lda pivot+1 @@ -8012,7 +8585,7 @@ bsearch16u: { jmp breturn_from_b8 // bsearch16u::@6 b6: - // [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [234] 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 !+ @@ -8022,7 +8595,7 @@ bsearch16u: { jmp b9 // bsearch16u::@9 b9: - // [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [235] (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 @@ -8030,24 +8603,24 @@ bsearch16u: { lda #0 adc pivot+1 sta items+1 - // [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex - // [220] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] b7_from_b6: b7_from_b9: - // [220] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [220] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp b7 // bsearch16u::@7 b7: - // [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [204] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] b3_from_b7: - // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [204] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp b3 } // sqr @@ -8055,11 +8628,11 @@ bsearch16u: { // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $48 - .label return_2 = $46 - // [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + .label return = $53 + .label return_2 = $51 + // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -8069,7 +8642,7 @@ sqr: { jmp breturn // sqr::@return breturn: - // [225] return + // [242] return rts } // init_squares @@ -8078,56 +8651,52 @@ sqr: { init_squares: { .label squares = $32 .label sqr = $30 - // [227] call malloc - // [78] phi from init_squares to malloc [phi:init_squares->malloc] + // [244] call malloc + // [93] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [78] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [93] phi (word) malloc::size#7 = (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 - // [78] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 - lda #HEAP_TOP - sta heap_head+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp b2 // init_squares::@2 b2: - // [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - // [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [230] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] b1_from_b2: - // [230] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [230] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [247] 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 - // [230] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] b1_from_b1: - // [230] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [230] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [247] 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: - // [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [248] *((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 - // [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -8135,52 +8704,46 @@ init_squares: { bcc !+ inc squares+1 !: - // [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 - // [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [252] (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 !: - // [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [254] 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: - // [238] return + // [255] return rts } // File Data - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... +// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i0 Removing instruction lda #>0 Replacing instruction lda #0 with TYA Removing instruction lda #>0 +Removing instruction lda distance Replacing instruction lda #0 with TYA Removing instruction ldy #0 Removing instruction ldy #0 @@ -8276,13 +8843,13 @@ Replacing label b1 with b2 Replacing label b6_from_b17 with b6 Replacing label b6_from_b18 with b6 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 b3_from_b3 with b3 +Replacing label b3_from_b3 with b3 +Replacing label b4_from_b8 with b4 +Replacing label b4_from_b8 with b4 Replacing label b5_from_b5 with b5 +Replacing label b7_from_b7 with b7 +Replacing label b7_from_b7 with b7 Replacing label b2_from_b4 with b2 Replacing label b1_from_b3 with b1 Replacing label b7_from_b12 with b7 @@ -8293,7 +8860,7 @@ Replacing label b19_from_b18 with b19 Replacing label b13_from_b14 with b13 Replacing label b6_from_b4 with b6 Replacing label b3_from_b1 with b3 -Replacing label b5_from_b12 with b5 +Replacing label b5_from_b13 with b5 Replacing label b1_from_b9 with b1 Replacing label b8_from_b6 with b8 Replacing label b4_from_b2 with b4 @@ -8305,20 +8872,21 @@ Replacing label b7_from_b6 with b7 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: Removing instruction b1: -Removing instruction bend_from_b1: -Removing instruction b14_from_main: -Removing instruction init_angle_screen_from_b14: -Removing instruction b15_from_b14: +Removing instruction malloc_from_b1: +Removing instruction b2_from_b5: +Removing instruction malloc_from_b2: +Removing instruction b3_from_b8: +Removing instruction bend_from_b3: Removing instruction init_buckets_from_b15: Removing instruction b1: Removing instruction b6_from_b17: Removing instruction b6_from_b18: Removing instruction b6_from_b8: Removing instruction b1_from_b1: -Removing instruction b2_from_b2: -Removing instruction b3_from_b6: -Removing instruction b4_from_b4: +Removing instruction b3_from_b3: +Removing instruction b4_from_b8: Removing instruction b5_from_b5: +Removing instruction b7_from_b7: Removing instruction b1_from_b3: Removing instruction b2_from_b1: Removing instruction b2_from_b4: @@ -8344,8 +8912,8 @@ Removing instruction b1_from_b9: Removing instruction b4_from_b2: Removing instruction b4_from_b3: Removing instruction sqr_from_b4: -Removing instruction b5_from_b10: -Removing instruction b5_from_b12: +Removing instruction b5_from_b11: +Removing instruction b5_from_b13: Removing instruction b8_from_b6: Removing instruction b8_from_b7: Removing instruction sqr_from_b8: @@ -8358,6 +8926,16 @@ Removing instruction b7_from_b6: Removing instruction b7_from_b9: Removing instruction b1_from_b1: Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b4: +Removing instruction malloc_from_b4: +Removing instruction b5: +Removing instruction b2: +Removing instruction b6: +Removing instruction malloc_from_b6: +Removing instruction b7: +Removing instruction malloc_from_b7: +Removing instruction b8: +Removing instruction b3: Removing instruction bend: Removing instruction init_dist_screen_from_main: Removing instruction b14: @@ -8374,12 +8952,14 @@ Removing instruction b12: Removing instruction b1_from_b11: Removing instruction b5_from_b16: Removing instruction b1_from_init_buckets: -Removing instruction b2_from_b1: +Removing instruction b2: Removing instruction b3_from_b2: -Removing instruction malloc_from_b3: +Removing instruction b4_from_b3: +Removing instruction malloc_from_b4: +Removing instruction b8: +Removing instruction b5_from_b8: Removing instruction b6: -Removing instruction b4_from_b6: -Removing instruction b5_from_b4: +Removing instruction b7_from_b6: Removing instruction breturn: Removing instruction breturn: Removing instruction b1_from_init_angle_screen: @@ -8395,12 +8975,13 @@ Removing instruction b16: Removing instruction b20: Removing instruction b10_from_b19: Removing instruction init_squares_from_init_dist_screen: -Removing instruction b1_from_init_dist_screen: -Removing instruction b3: Removing instruction b10: -Removing instruction b7: +Removing instruction b1_from_b10: +Removing instruction b3: Removing instruction b11: +Removing instruction b7: Removing instruction b12: +Removing instruction b13: Removing instruction b9: Removing instruction breturn: Removing instruction bsearch16u_from_sqrt: @@ -8418,16 +8999,15 @@ Removing instruction b2: Removing instruction b1_from_b2: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Updating BasicUpstart to call main directly -Removing instruction jsr main -Succesful ASM optimization Pass5SkipBegin Replacing jump to rts with rts in jmp b2 Succesful ASM optimization Pass5DoubleJumpElimination +Adding RTS to root block +Succesful ASM optimization Pass5AddMainRts 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 b1 Removing instruction jmp b2 Removing instruction jmp b1 @@ -8435,27 +9015,30 @@ Removing instruction jmp b5 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 -Removing instruction lda #<0 -Removing instruction lda #<0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction bbegin: -Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [556] beq b12 to bne -Fixing long branch [450] bpl b1 to bmi -Fixing long branch [462] bpl b4 to bmi +Fixing long branch [651] beq b12 to bne +Fixing long branch [545] bpl b1 to bmi +Fixing long branch [557] bpl b4 to bmi FINAL SYMBOL TABLE (label) @1 +(label) @2 +(label) @3 +(label) @4 +(label) @5 +(label) @6 +(label) @7 +(label) @8 (label) @begin (label) @end (byte*) BORDERCOL (const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280 -(word*[NUM_BUCKETS#0]) BUCKETS -(const word*[NUM_BUCKETS#0]) BUCKETS#0 BUCKETS = { fill( NUM_BUCKETS#0, 0) } -(byte[NUM_BUCKETS#0]) BUCKET_IDX -(const byte[NUM_BUCKETS#0]) BUCKET_IDX#0 BUCKET_IDX = { fill( NUM_BUCKETS#0, 0) } -(byte[NUM_BUCKETS#0]) BUCKET_SIZES -(const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 BUCKET_SIZES = { fill( NUM_BUCKETS#0, 0) } +(word*[]) BUCKETS +(void*) BUCKETS#0 BUCKETS zp ZP_WORD:58 0.02531645569620253 +(byte[]) BUCKET_IDX +(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:60 0.0425531914893617 +(byte[]) BUCKET_SIZES +(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:56 0.024691358024691357 (byte*) COLS (const byte*) COLS#0 COLS = (byte*) 55296 (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16 @@ -8474,15 +9057,17 @@ FINAL SYMBOL TABLE (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (byte*) RASTER (const byte*) RASTER#0 RASTER = (byte*) 53266 -(byte[$3e8]) SCREEN_ANGLE -(const byte[$3e8]) SCREEN_ANGLE#0 SCREEN_ANGLE = { fill( $3e8, 0) } -(byte[$3e8]) SCREEN_DIST -(const byte[$3e8]) SCREEN_DIST#0 SCREEN_DIST = { fill( $3e8, 0) } +(byte[]) SCREEN_ANGLE +(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:54 0.045454545454545456 +(byte[]) SCREEN_DIST +(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:52 0.125 (byte*) SCREEN_FILL (const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024 +(const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1 +(const byte) SIZEOF_POINTER SIZEOF_POINTER = (byte) 2 (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (word*) SQUARES -(void*) SQUARES#1 SQUARES zp ZP_WORD:20 0.03278688524590164 +(void*) SQUARES#1 SQUARES zp ZP_WORD:20 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 $2 zp ZP_WORD:29 4.0 (byte~) atan2_16::$23 reg byte a 2002.0 @@ -8531,7 +9116,7 @@ FINAL SYMBOL TABLE (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:65 2.8684210526315796 +(signed word) atan2_16::x#0 x zp ZP_WORD:76 2.8684210526315796 (signed word) atan2_16::xd (signed word) atan2_16::xd#1 xd zp ZP_WORD:37 6667.333333333333 (signed word~) atan2_16::xd#10 xd zp ZP_WORD:37 1001.0 @@ -8546,7 +9131,7 @@ FINAL SYMBOL TABLE (signed word) atan2_16::xi#3 xi zp ZP_WORD:31 267.0666666666667 (signed word) atan2_16::xi#8 xi zp ZP_WORD:31 1001.0 (signed word) atan2_16::y -(signed word) atan2_16::y#0 y zp ZP_WORD:67 2.724999999999999 +(signed word) atan2_16::y#0 y zp ZP_WORD:78 2.724999999999999 (signed word) atan2_16::yd (signed word) atan2_16::yd#1 yd zp ZP_WORD:35 10001.0 (signed word~) atan2_16::yd#10 yd zp ZP_WORD:35 2002.0 @@ -8580,24 +9165,24 @@ FINAL SYMBOL TABLE (word*) bsearch16u::items#2 items zp ZP_WORD:46 334.5555555555556 (word*) bsearch16u::items#8 items zp ZP_WORD:46 1501.5 (word) bsearch16u::key -(word) bsearch16u::key#0 key zp ZP_WORD:72 0.26666666666666666 +(word) bsearch16u::key#0 key zp ZP_WORD:83 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:74 501.0 +(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:85 501.0 (signed word) bsearch16u::result -(signed word) bsearch16u::result#0 result zp ZP_WORD:76 1501.5 +(signed word) bsearch16u::result#0 result zp ZP_WORD:87 1501.5 (word*) bsearch16u::return (word*) bsearch16u::return#1 return zp ZP_WORD:46 2.0 (word*) bsearch16u::return#2 return zp ZP_WORD:46 6.0 (word*) bsearch16u::return#3 return zp ZP_WORD:46 4.0 (word*~) bsearch16u::return#6 return zp ZP_WORD:46 4.0 (byte*) heap_head -(byte*) heap_head#1 heap_head zp ZP_WORD:18 0.17105263157894737 -(byte*) heap_head#13 heap_head zp ZP_WORD:18 13.0 +(byte*) heap_head#1 heap_head zp ZP_WORD:18 0.2446808510638298 +(byte*) heap_head#18 heap_head zp ZP_WORD:18 23.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$10 $10 zp ZP_WORD:33 202.0 (byte~) init_angle_screen::$12 reg byte a 202.0 @@ -8612,16 +9197,19 @@ 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:69 84.16666666666666 +(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:80 84.16666666666666 (word) init_angle_screen::angle_w (word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:33 202.0 (byte*) init_angle_screen::screen +(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:23 3.0 (byte*) init_angle_screen::screen_bottomline +(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:23 4.0 (byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:23 7.333333333333333 -(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:23 8.959999999999999 +(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:23 9.040000000000001 (byte*) init_angle_screen::screen_topline +(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:25 2.0 (byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:25 5.5 -(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:25 9.333333333333334 +(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:25 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 x zp ZP_BYTE:27 101.0 (byte) init_angle_screen::x#2 x zp ZP_BYTE:27 25.25 @@ -8629,41 +9217,45 @@ FINAL SYMBOL TABLE (byte) init_angle_screen::xb#1 xb zp ZP_BYTE:28 101.0 (byte) init_angle_screen::xb#2 xb zp ZP_BYTE:28 19.238095238095237 (signed word) init_angle_screen::xw -(word) init_angle_screen::xw#0 xw zp ZP_WORD:65 33.666666666666664 +(word) init_angle_screen::xw#0 xw zp ZP_WORD:76 33.666666666666664 (byte) init_angle_screen::y (byte) init_angle_screen::y#1 y zp ZP_BYTE:22 16.5 (byte) init_angle_screen::y#4 y zp ZP_BYTE:22 4.730769230769231 (signed word) init_angle_screen::yw -(word) init_angle_screen::yw#0 yw zp ZP_WORD:67 50.5 +(word) init_angle_screen::yw#0 yw zp ZP_WORD:78 50.5 (void()) init_buckets((byte*) init_buckets::screen) -(word~) init_buckets::$10 $10 zp ZP_WORD:63 11.0 -(word~) init_buckets::$12 $12 zp ZP_WORD:59 22.0 -(word~) init_buckets::$13 $13 zp ZP_WORD:61 22.0 +(word~) init_buckets::$10 $10 zp ZP_WORD:74 11.0 +(word~) init_buckets::$12 $12 zp ZP_WORD:69 22.0 +(word~) init_buckets::$13 $13 zp ZP_WORD:72 22.0 (byte~) init_buckets::$14 reg byte a 22.0 (byte*~) init_buckets::$15 $15 zp ZP_WORD:20 22.0 -(word**~) init_buckets::$16 $16 zp ZP_WORD:59 22.0 -(word**~) init_buckets::$17 $17 zp ZP_WORD:61 22.0 +(word**~) init_buckets::$16 $16 zp ZP_WORD:69 22.0 +(word**~) init_buckets::$17 $17 zp ZP_WORD:72 22.0 (void*~) init_buckets::$5 $5 zp ZP_WORD:20 3.6666666666666665 -(word~) init_buckets::$9 $9 zp ZP_WORD:61 22.0 +(word~) init_buckets::$9 $9 zp ZP_WORD:72 22.0 (label) init_buckets::@1 (label) init_buckets::@2 (label) init_buckets::@3 (label) init_buckets::@4 (label) init_buckets::@5 (label) init_buckets::@6 +(label) init_buckets::@7 +(label) init_buckets::@8 (label) init_buckets::@return (word*) init_buckets::bucket -(word*) init_buckets::bucket#0 bucket zp ZP_WORD:61 7.333333333333333 +(word*) init_buckets::bucket#0 bucket zp ZP_WORD:72 7.333333333333333 (byte*) init_buckets::dist (byte*) init_buckets::dist#1 dist zp ZP_WORD:8 7.333333333333333 (byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:14 7.333333333333333 -(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 22.0 -(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:14 4.4 +(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 23.0 +(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:14 4.6000000000000005 +(byte*~) init_buckets::dist#6 dist zp ZP_WORD:8 4.0 +(byte*~) init_buckets::dist#8 dist#8 zp ZP_WORD:14 4.0 (byte) init_buckets::distance -(byte) init_buckets::distance#0 reg byte x 5.5 +(byte) init_buckets::distance#0 distance zp ZP_BYTE:71 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 +(byte) init_buckets::i#1 reg byte y 16.5 +(byte) init_buckets::i#2 reg byte y 16.5 (word) init_buckets::i1 (word) init_buckets::i1#1 i1 zp ZP_WORD:10 16.5 (word) init_buckets::i1#2 i1 zp ZP_WORD:10 7.333333333333333 @@ -8671,12 +9263,13 @@ FINAL SYMBOL TABLE (word) init_buckets::i2#1 i2 zp ZP_WORD:12 16.5 (word) init_buckets::i2#2 i2 zp ZP_WORD:12 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 +(byte) init_buckets::i3#1 reg byte y 16.5 +(byte) init_buckets::i3#2 reg byte y 16.5 (word) init_buckets::i4 (word) init_buckets::i4#1 i4 zp ZP_WORD:16 16.5 (word) init_buckets::i4#2 i4 zp ZP_WORD:16 2.0 (byte*) init_buckets::screen +(byte*) init_buckets::screen#0 screen zp ZP_WORD:52 0.42500000000000004 (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 @@ -8686,6 +9279,7 @@ FINAL SYMBOL TABLE (label) init_dist_screen::@10 (label) init_dist_screen::@11 (label) init_dist_screen::@12 +(label) init_dist_screen::@13 (label) init_dist_screen::@2 (label) init_dist_screen::@3 (label) init_dist_screen::@4 @@ -8698,14 +9292,16 @@ 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:72 202.0 +(word) init_dist_screen::ds#0 ds zp ZP_WORD:83 202.0 (byte*) init_dist_screen::screen +(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:40 1.5 (byte*) init_dist_screen::screen_bottomline +(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:42 4.0 (byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:42 7.333333333333333 -(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:42 6.787878787878788 +(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:42 6.848484848484849 (byte*) init_dist_screen::screen_topline (byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:40 5.5 -(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:40 7.0 +(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:40 7.0625 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 x zp ZP_BYTE:44 101.0 (byte) init_dist_screen::x#2 x zp ZP_BYTE:44 26.578947368421055 @@ -8717,7 +9313,7 @@ FINAL SYMBOL TABLE (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:72 202.0 +(word) init_dist_screen::xds#0 xds zp ZP_WORD:83 202.0 (byte) init_dist_screen::y (byte) init_dist_screen::y#1 y zp ZP_BYTE:39 16.5 (byte) init_dist_screen::y#10 y zp ZP_BYTE:39 0.9705882352941178 @@ -8726,7 +9322,7 @@ FINAL SYMBOL TABLE (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:70 4.869565217391305 +(word) init_dist_screen::yds#0 yds zp ZP_WORD:81 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 reg byte a 22.0 (byte~) init_squares::$4 reg byte a 22.0 @@ -8765,16 +9361,16 @@ FINAL SYMBOL TABLE (label) main::@8 (label) main::@9 (byte*) main::angle -(byte*) main::angle#0 angle zp ZP_WORD:57 151.5 +(byte*) main::angle#0 angle zp ZP_WORD:67 151.5 (word[]) main::bucket -(word[]) main::bucket#0 bucket zp ZP_WORD:52 6.588235294117648 +(word[]) main::bucket#0 bucket zp ZP_WORD:62 6.588235294117648 (byte) main::bucket_idx (byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:2 11.0 (byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:2 2.0 (byte) main::bucket_size -(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:54 7.6875 +(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:64 7.6875 (byte*) main::fill -(byte*) main::fill#0 fill zp ZP_WORD:55 202.0 +(byte*) main::fill#0 fill zp ZP_WORD:65 202.0 (byte*) main::fill1 (byte*) main::fill1#0 fill1 zp ZP_WORD:6 22.0 (byte) main::i @@ -8795,18 +9391,18 @@ FINAL SYMBOL TABLE (void*()) malloc((word) malloc::size) (label) malloc::@return (byte*) malloc::mem -(byte*) malloc::mem#0 mem zp ZP_WORD:20 0.8 +(byte*) malloc::mem#0 mem zp ZP_WORD:20 0.4 (void*) malloc::return (word) malloc::size -(word) malloc::size#1 size zp ZP_WORD:20 22.0 -(word) malloc::size#2 size zp ZP_WORD:20 13.0 +(word) malloc::size#6 size zp ZP_WORD:20 22.0 +(word) malloc::size#7 size zp ZP_WORD:20 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:72 28.5 -(word) sqr::return#2 return#2 zp ZP_WORD:70 22.0 -(word) sqr::return#3 return zp ZP_WORD:72 202.0 +(word) sqr::return#0 return zp ZP_WORD:83 28.5 +(word) sqr::return#2 return#2 zp ZP_WORD:81 22.0 +(word) sqr::return#3 return zp ZP_WORD:83 202.0 (byte) sqr::val (byte) sqr::val#0 reg byte a 22.0 (byte) sqr::val#1 reg byte a 202.0 @@ -8823,25 +9419,25 @@ FINAL SYMBOL TABLE (byte) sqrt::return#2 reg byte a 202.0 (byte) sqrt::sq (word) sqrt::val -(word) sqrt::val#0 val zp ZP_WORD:72 103.0 +(word) sqrt::val#0 val zp ZP_WORD:83 103.0 zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_BYTE:3 [ main::min_angle#2 main::min_angle#4 main::min_angle#1 ] zp ZP_WORD:4 [ main::min_offset#5 main::min_offset#7 ] zp ZP_WORD:6 [ main::min_offset#2 main::min_offset#8 main::offset#0 main::min_offset#10 main::fill1#0 ] -reg byte x [ init_buckets::i#2 init_buckets::i#1 ] -zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#1 ] +reg byte y [ init_buckets::i#2 init_buckets::i#1 ] +zp ZP_WORD:8 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] zp ZP_WORD:10 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:12 [ init_buckets::i2#2 init_buckets::i2#1 ] -reg byte x [ init_buckets::i3#2 init_buckets::i3#1 ] -zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#3 ] +reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] +zp ZP_WORD:14 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp ZP_WORD:16 [ init_buckets::i4#2 init_buckets::i4#1 ] -zp ZP_WORD:18 [ heap_head#13 heap_head#1 ] -zp ZP_WORD:20 [ malloc::size#2 malloc::size#1 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] +zp ZP_WORD:18 [ heap_head#18 heap_head#1 ] +zp ZP_WORD:20 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] zp ZP_BYTE:22 [ init_angle_screen::y#4 init_angle_screen::y#1 ] -zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#1 ] -zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#1 ] +zp ZP_WORD:23 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] +zp ZP_WORD:25 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_BYTE:27 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:28 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_WORD:29 [ 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 ] @@ -8852,8 +9448,8 @@ reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:35 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:37 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_BYTE:39 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 ] -zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 ] +zp ZP_WORD:40 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] +zp ZP_WORD:42 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:44 [ init_dist_screen::x#2 init_dist_screen::x#1 ] zp ZP_BYTE:45 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] @@ -8864,56 +9460,63 @@ reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:48 [ init_squares::sqr#2 init_squares::sqr#1 ] zp ZP_WORD:50 [ 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_WORD:52 [ SCREEN_DIST#0 init_buckets::screen#0 ] +zp ZP_WORD:54 [ SCREEN_ANGLE#0 ] +zp ZP_WORD:56 [ BUCKET_SIZES#0 ] +zp ZP_WORD:58 [ BUCKETS#0 ] +zp ZP_WORD:60 [ BUCKET_IDX#0 ] reg byte a [ main::$21 ] -zp ZP_WORD:52 [ main::bucket#0 ] -zp ZP_BYTE:54 [ main::bucket_size#0 ] +zp ZP_WORD:62 [ main::bucket#0 ] +zp ZP_BYTE:64 [ main::bucket_size#0 ] reg byte a [ main::$22 ] -zp ZP_WORD:55 [ main::fill#0 ] -zp ZP_WORD:57 [ main::angle#0 ] -zp ZP_WORD:59 [ init_buckets::$12 init_buckets::$16 ] -reg byte x [ init_buckets::distance#0 ] -zp ZP_WORD:61 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] -zp ZP_WORD:63 [ init_buckets::$10 ] +zp ZP_WORD:65 [ main::fill#0 ] +zp ZP_WORD:67 [ main::angle#0 ] +zp ZP_WORD:69 [ init_buckets::$12 init_buckets::$16 ] +zp ZP_BYTE:71 [ init_buckets::distance#0 ] +zp ZP_WORD:72 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] +zp ZP_WORD:74 [ 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:65 [ init_angle_screen::xw#0 atan2_16::x#0 ] +zp ZP_WORD:76 [ init_angle_screen::xw#0 atan2_16::x#0 ] reg byte a [ init_angle_screen::$6 ] -zp ZP_WORD:67 [ init_angle_screen::yw#0 atan2_16::y#0 ] -zp ZP_BYTE:69 [ init_angle_screen::ang_w#0 ] +zp ZP_WORD:78 [ init_angle_screen::yw#0 atan2_16::y#0 ] +zp ZP_BYTE:80 [ 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:70 [ sqr::return#2 init_dist_screen::yds#0 ] +zp ZP_WORD:81 [ sqr::return#2 init_dist_screen::yds#0 ] reg byte a [ init_dist_screen::x2#0 ] -zp ZP_WORD:72 [ 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:83 [ 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:74 [ bsearch16u::pivot#0 ] -zp ZP_WORD:76 [ bsearch16u::result#0 ] +zp ZP_WORD:85 [ bsearch16u::pivot#0 ] +zp ZP_WORD:87 [ bsearch16u::result#0 ] reg byte a [ sqr::$0 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] FINAL ASSEMBLER -Score: 1115810 +Score: 1116084 // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center // Utilizes a bucket sort for identifying the minimum angle/distance // Basic Upstart .pc = $801 "Basic" -:BasicUpstart(main) +:BasicUpstart(bbegin) .pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 + .const SIZEOF_BYTE = 1 + .const SIZEOF_POINTER = 2 .label RASTER = $d012 .label BORDERCOL = $d020 // Color Ram @@ -8922,7 +9525,6 @@ Score: 1115810 .label HEAP_TOP = $a000 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // = malloc(1000); // Screen containing angle to center .label SCREEN_FILL = $400 // Char to fill with @@ -8932,20 +9534,127 @@ Score: 1115810 .const NUM_SQUARES = $30 .label heap_head = $12 .label SQUARES = $14 + // Screen containing distance to center + .label SCREEN_DIST = $34 + // Screen containing angle to center + .label SCREEN_ANGLE = $36 + // Array containing the bucket size for each of the distance buckets + .label BUCKET_SIZES = $38 + // Buckets containing screen indices for each distance from the center. + // BUCKETS[dist] is an array of words containing screen indices. + // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] + .label BUCKETS = $3a + // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) + .label BUCKET_IDX = $3c // @begin +bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] // @1 - // [2] call main - // [3] phi from @1 to @end [phi:@1->@end] + // malloc(1000) + // [2] call malloc + // [93] phi from @1 to malloc [phi:@1->malloc] + // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 + lda #HEAP_TOP + sta heap_head+1 + jsr malloc + // @4 + // malloc(1000) + // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta SCREEN_DIST + lda malloc.mem+1 + sta SCREEN_DIST+1 + // [4] call malloc + // [93] phi from @4 to malloc [phi:@4->malloc] + // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 + lda #<$3e8 + sta malloc.size + lda #>$3e8 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy + jsr malloc + // @5 + // malloc(1000) + // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta SCREEN_ANGLE + lda malloc.mem+1 + sta SCREEN_ANGLE+1 + // [6] phi from @5 to @2 [phi:@5->@2] + // @2 + // malloc(NUM_BUCKETS*sizeof(byte)) + // [7] call malloc + // [93] phi from @2 to malloc [phi:@2->malloc] + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy + jsr malloc + // @6 + // malloc(NUM_BUCKETS*sizeof(byte)) + // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKET_SIZES + lda malloc.mem+1 + sta BUCKET_SIZES+1 + // malloc(NUM_BUCKETS*sizeof(word*)) + // [9] call malloc + // [93] phi from @6 to malloc [phi:@6->malloc] + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_POINTER + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy + jsr malloc + // @7 + // malloc(NUM_BUCKETS*sizeof(word*)) + // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKETS + lda malloc.mem+1 + sta BUCKETS+1 + // malloc(NUM_BUCKETS*sizeof(byte)) + // [11] call malloc + // [93] phi from @7 to malloc [phi:@7->malloc] + // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 + lda #NUM_BUCKETS*SIZEOF_BYTE + sta malloc.size + lda #0 + sta malloc.size+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy + jsr malloc + // @8 + // malloc(NUM_BUCKETS*sizeof(byte)) + // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + lda malloc.mem + sta BUCKET_IDX + lda malloc.mem+1 + sta BUCKET_IDX+1 + // [13] phi from @8 to @3 [phi:@8->@3] + // @3 + // [14] call main + jsr main + rts + // [15] phi from @3 to @end [phi:@3->@end] // @end // main main: { - .label bucket = $34 - .label bucket_size = $36 + .label bucket = $3e + .label bucket_size = $40 .label bucket_idx = 2 .label offset = 6 - .label fill = $37 - .label angle = $39 + .label fill = $41 + .label angle = $43 .label min_angle = 3 .label fill1 = 6 .label min_offset = 6 @@ -8955,74 +9664,83 @@ main: { // asm { sei } sei // init_dist_screen(SCREEN_DIST) - // [5] call init_dist_screen - // [155] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + lda SCREEN_DIST + sta init_dist_screen.screen + lda SCREEN_DIST+1 + sta init_dist_screen.screen+1 + // [18] call init_dist_screen + // [171] phi from main to init_dist_screen [phi:main->init_dist_screen] jsr init_dist_screen - // [6] phi from main to main::@14 [phi:main->main::@14] // main::@14 // init_angle_screen(SCREEN_ANGLE) - // [7] call init_angle_screen - // [82] phi from main::@14 to init_angle_screen [phi:main::@14->init_angle_screen] + // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 + lda SCREEN_ANGLE + sta init_angle_screen.screen + lda SCREEN_ANGLE+1 + sta init_angle_screen.screen+1 + // [20] call init_angle_screen jsr init_angle_screen - // [8] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // init_buckets(SCREEN_DIST) - // [9] call init_buckets - // [40] phi from main::@15 to init_buckets [phi:main::@15->init_buckets] + // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + // [22] call init_buckets + // [53] phi from main::@15 to init_buckets [phi:main::@15->init_buckets] jsr init_buckets - // [10] phi from main::@15 to main::@1 [phi:main::@15->main::@1] - // [10] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 + // [23] phi from main::@15 to main::@1 [phi:main::@15->main::@1] + // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 lda #0 sta bucket_idx // main::@1 // main::@2 b2: // while (*RASTER!=0xff) - // [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne b2 // main::@3 // (*BORDERCOL)++; - // [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL // bucket = BUCKETS[bucket_idx] - // [13] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda bucket_idx asl - // [14] (word[]) main::bucket#0 ← *((const word*[NUM_BUCKETS#0]) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptc1_derefidx_vbuaa + // [27] (word[]) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuaa tay - lda BUCKETS,y + lda (BUCKETS),y sta bucket - lda BUCKETS+1,y + iny + lda (BUCKETS),y sta bucket+1 // bucket_size = BUCKET_SIZES[bucket_idx] - // [15] (byte) main::bucket_size#0 ← *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuc1_derefidx_vbuz2 + // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 ldy bucket_idx - lda BUCKET_SIZES,y + lda (BUCKET_SIZES),y sta bucket_size // if(bucket_size>0) - // [16] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 + // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 cmp #0 beq b4 - // [17] phi from main::@3 to main::@5 [phi:main::@3->main::@5] - // [17] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 + // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [30] phi (word) main::min_offset#5 = (word) $ffff [phi:main::@3->main::@5#0] -- vwuz1=vwuc1 lda #<$ffff sta min_offset_5 lda #>$ffff sta min_offset_5+1 - // [17] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 + // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#1] -- vbuz1=vbuc1 lda #$ff sta min_angle - // [17] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 + // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 ldx #0 // main::@5 b5: // offset = bucket[i] - // [18] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [31] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [19] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa + // [32] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (bucket),y sta offset @@ -9030,7 +9748,7 @@ main: { lda (bucket),y sta offset+1 // fill = SCREEN_FILL+offset - // [20] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [33] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda offset clc adc #SCREEN_FILL sta fill+1 // if(*fill!=FILL_CHAR) - // [21] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 + // [34] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 lda #FILL_CHAR ldy #0 cmp (fill),y beq b18 // main::@7 // angle = SCREEN_ANGLE+offset - // [22] (byte*) main::angle#0 ← (const byte[$3e8]) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 - lda offset + // [35] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 + lda SCREEN_ANGLE clc - adc #SCREEN_ANGLE + lda SCREEN_ANGLE+1 + adc offset+1 sta angle+1 // if(*angle<=min_angle) - // [23] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 + // [36] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 lda (angle),y cmp min_angle beq !+ @@ -9063,24 +9781,24 @@ main: { !: // main::@8 // min_angle = *angle - // [24] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 + // [37] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (angle),y sta min_angle - // [25] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6] - // [25] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy - // [25] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy + // [38] phi from main::@17 main::@18 main::@8 to main::@6 [phi:main::@17/main::@18/main::@8->main::@6] + // [38] phi (byte) main::min_angle#4 = (byte) main::min_angle#2 [phi:main::@17/main::@18/main::@8->main::@6#0] -- register_copy + // [38] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@17/main::@18/main::@8->main::@6#1] -- register_copy // main::@6 b6: // for( byte i=0;iSCREEN_FILL sta fill1+1 // *fill = FILL_CHAR - // [30] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 + // [43] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 lda #FILL_CHAR ldy #0 sta (fill1),y // (*BORDERCOL)--; - // [31] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@10 to main::@1 [phi:main::@10->main::@1] + // [23] phi from main::@10 to main::@1 [phi:main::@10->main::@1] jmp b2 // main::@4 b4: // bucket_idx++; - // [32] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 + // [45] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 inc bucket_idx // if(bucket_idx==NUM_BUCKETS) - // [33] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 + // [46] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS cmp bucket_idx bne b11 // main::@12 // (*BORDERCOL)--; - // [34] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [47] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL // main::@13 b13: // (*(COLS+999))++; - // [35] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp b13 // main::@11 b11: // (*BORDERCOL)--; - // [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 + // [49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [10] phi from main::@11 to main::@1 [phi:main::@11->main::@1] - // [10] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy + // [23] phi from main::@11 to main::@1 [phi:main::@11->main::@1] + // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#1 [phi:main::@11->main::@1#0] -- register_copy jmp b2 // main::@16 b16: - // [37] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [50] (word~) main::min_offset#7 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda min_offset sta min_offset_7 lda min_offset+1 sta min_offset_7+1 - // [17] phi from main::@16 to main::@5 [phi:main::@16->main::@5] - // [17] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy - // [17] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy - // [17] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy + // [30] phi from main::@16 to main::@5 [phi:main::@16->main::@5] + // [30] phi (word) main::min_offset#5 = (word~) main::min_offset#7 [phi:main::@16->main::@5#0] -- register_copy + // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#4 [phi:main::@16->main::@5#1] -- register_copy + // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@16->main::@5#2] -- register_copy jmp b5 // main::@17 b17: - // [38] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [51] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda min_offset_5 sta min_offset lda min_offset_5+1 @@ -9158,7 +9876,7 @@ main: { jmp b6 // main::@18 b18: - // [39] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [52] (word~) main::min_offset#10 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda min_offset_5 sta min_offset lda min_offset_5+1 @@ -9167,99 +9885,109 @@ main: { } // init_buckets // Initialize buckets containing indices of chars on the screen with specific distances to the center. +// init_buckets(byte* zeropage($34) screen) init_buckets: { .label _5 = $14 - .label _9 = $3d - .label _10 = $3f - .label _12 = $3b - .label _13 = $3d + .label _9 = $48 + .label _10 = $4a + .label _12 = $45 + .label _13 = $48 + .label screen = $34 .label dist = 8 .label i1 = $a .label i2 = $c - .label bucket = $3d + .label distance = $47 + .label bucket = $48 .label dist_3 = $e .label i4 = $10 .label dist_5 = $e .label _15 = $14 - .label _16 = $3b - .label _17 = $3d - // [41] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] - // [41] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuxx=vbuc1 - ldx #0 + .label _16 = $45 + .label _17 = $48 + .label dist_8 = $e + // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 + ldy #0 // Init bucket sizes to 0 - // [41] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] - // [41] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [54] 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 - // [42] *((const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 - sta BUCKET_SIZES,x + sta (BUCKET_SIZES),y // for(byte i:0..NUM_BUCKETS-1) - // [43] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuxx=_inc_vbuxx - inx - // [44] 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 + // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy + iny + // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #NUM_BUCKETS-1+1 bne b1 - // [45] phi from init_buckets::@1 to init_buckets::@2 [phi:init_buckets::@1->init_buckets::@2] - // [45] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@1->init_buckets::@2#0] -- vwuz1=vwuc1 + // init_buckets::@2 + // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + lda screen + sta dist + lda screen+1 + sta dist+1 + // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + lda #<0 sta i1 sta i1+1 - // [45] phi (byte*) init_buckets::dist#4 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@1->init_buckets::@2#1] -- pbuz1=pbuc1 - lda #SCREEN_DIST - sta dist+1 - // [45] phi from init_buckets::@2 to init_buckets::@2 [phi:init_buckets::@2->init_buckets::@2] - // [45] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@2->init_buckets::@2#0] -- register_copy - // [45] 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: + // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy + // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] + // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy + // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy + // init_buckets::@3 + b3: // BUCKET_SIZES[*dist]++; - // [46] *((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 + // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 ldy #0 lda (dist),y - tax - inc BUCKET_SIZES,x + tay + lda (BUCKET_SIZES),y + clc + adc #1 + sta (BUCKET_SIZES),y // dist++; - // [47] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc dist bne !+ inc dist+1 !: // for( word i:0..999) - // [48] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc i1 bne !+ inc i1+1 !: - // [49] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@2 -- vwuz1_neq_vwuc1_then_la1 + // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 lda i1+1 cmp #>$3e8 - bne b2 + bne b3 lda i1 cmp #<$3e8 - bne b2 - // [50] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] - // [50] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + bne b3 + // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] + // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 lda #<0 sta i2 sta i2+1 // Allocate the buckets - // [50] phi from init_buckets::@6 to init_buckets::@3 [phi:init_buckets::@6->init_buckets::@3] - // [50] 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: + // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] + // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy + // init_buckets::@4 + b4: // malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [51] (byte*~) init_buckets::$15 ← (const byte[NUM_BUCKETS#0]) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuc1_plus_vwuz2 - lda i2 + // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 + lda BUCKET_SIZES clc - adc #BUCKET_SIZES + lda BUCKET_SIZES+1 + adc i2+1 sta _15+1 - // [52] (word) malloc::size#1 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 + // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 ldy #0 lda (malloc.size),y asl @@ -9267,31 +9995,31 @@ init_buckets: { tya rol sta malloc.size+1 - // [53] call malloc - // [78] phi from init_buckets::@3 to malloc [phi:init_buckets::@3->malloc] - // [78] phi (word) malloc::size#2 = (word) malloc::size#1 [phi:init_buckets::@3->malloc#0] -- register_copy - // [78] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_buckets::@3->malloc#1] -- register_copy + // [67] call malloc + // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] + // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy jsr malloc - // init_buckets::@6 + // init_buckets::@8 // malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [54] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 + // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 // BUCKETS[i] = malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [55] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda i2 asl sta _12 lda i2+1 rol sta _12+1 - // [56] (word**~) init_buckets::$16 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptc1_plus_vwuz1 - clc + // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 lda _16 - adc #BUCKETS + adc BUCKETS+1 sta _16+1 - // [57] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 + // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 ldy #0 lda _5 sta (_16),y @@ -9299,74 +10027,76 @@ init_buckets: { lda _5+1 sta (_16),y // for( word i:0..NUM_BUCKETS-1) - // [58] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc i2 bne !+ inc i2+1 !: - // [59] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 lda i2+1 cmp #>NUM_BUCKETS-1+1 - bne b3 + bne b4 lda i2 cmp #init_buckets::@4] - // [60] 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 - // [60] phi from init_buckets::@4 to init_buckets::@4 [phi:init_buckets::@4->init_buckets::@4] - // [60] 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 - // [61] *((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) - // [62] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuxx=_inc_vbuxx - inx - // [63] 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 bne b4 - // [64] phi from init_buckets::@4 to init_buckets::@5 [phi:init_buckets::@4->init_buckets::@5] - // [64] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@4->init_buckets::@5#0] -- vwuz1=vwuc1 - sta i4 - sta i4+1 - // [64] phi (byte*) init_buckets::dist#5 = (const byte[$3e8]) SCREEN_DIST#0 [phi:init_buckets::@4->init_buckets::@5#1] -- pbuz1=pbuc1 - lda #SCREEN_DIST - sta dist_5+1 - // [64] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] - // [64] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy - // [64] 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::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5] + // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 + ldy #0 + // Iterate all distances and fill the buckets with indices into the screens + // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy // init_buckets::@5 b5: + // BUCKET_IDX[i]=0 + // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + lda #0 + sta (BUCKET_IDX),y + // for(byte i:0..NUM_BUCKETS-1) + // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy + iny + // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 + cpy #NUM_BUCKETS-1+1 + bne b5 + // init_buckets::@6 + // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + lda screen + sta dist_8 + lda screen+1 + sta dist_8+1 + // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] + // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 + lda #<0 + sta i4 + sta i4+1 + // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy + // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] + // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy + // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy + // init_buckets::@7 + b7: // distance = *dist - // [65] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuxx=_deref_pbuz1 + // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_5),y - tax + sta distance // (word)distance - // [66] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuxx - txa + // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 sta _9 tya sta _9+1 // bucket = BUCKETS[(word)distance] - // [67] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl _13 rol _13+1 - // [68] (word**~) init_buckets::$17 ← (const word*[NUM_BUCKETS#0]) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptc1_plus_vwuz1 - clc + // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 lda _17 - adc #BUCKETS + adc BUCKETS+1 sta _17+1 - // [69] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 + // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 lda (bucket),y pha iny @@ -9375,19 +10105,20 @@ init_buckets: { pla sta bucket // dist-screen - // [70] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (const byte[$3e8]) SCREEN_DIST#0 -- vwuz1=pbuz2_minus_pbuc1 + // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 lda dist_5 sec - sbc #SCREEN_DIST + sbc screen+1 sta _10+1 // bucket[BUCKET_IDX[distance]] = dist-screen - // [71] (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 + // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 + ldy distance + lda (BUCKET_IDX),y asl - // [72] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 + // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 tay lda _10 sta (bucket),y @@ -9395,30 +10126,34 @@ init_buckets: { lda _10+1 sta (bucket),y // BUCKET_IDX[distance]++; - // [73] *((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 + // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 + ldy distance + lda (BUCKET_IDX),y + clc + adc #1 + sta (BUCKET_IDX),y // *dist++; - // [74] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [89] (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) - // [75] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc i4 bne !+ inc i4+1 !: - // [76] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@5 -- vwuz1_neq_vwuc1_then_la1 + // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 lda i4+1 cmp #>$3e8 - bne b5 + bne b7 lda i4 cmp #<$3e8 - bne b5 + bne b7 // init_buckets::@return // } - // [77] return + // [92] return rts } // malloc @@ -9429,7 +10164,7 @@ malloc: { .label mem = $14 .label size = $14 // mem = heap_head-size - // [79] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#2 -- pbuz1=pbuz2_minus_vwuz1 + // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 lda heap_head sec sbc mem @@ -9438,95 +10173,107 @@ malloc: { sbc mem+1 sta mem+1 // heap_head = mem - // [80] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda mem sta heap_head lda mem+1 sta heap_head+1 // malloc::@return // } - // [81] return + // [96] 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(byte* zeropage($17) screen) init_angle_screen: { .label _10 = $21 - .label xw = $41 - .label yw = $43 - .label angle_w = $21 - .label ang_w = $45 - .label x = $1b - .label xb = $1c + .label screen = $17 .label screen_topline = $19 .label screen_bottomline = $17 + .label xw = $4c + .label yw = $4e + .label angle_w = $21 + .label ang_w = $50 + .label x = $1b + .label xb = $1c .label y = $16 - // [83] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - // [83] 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 + lda screen+1 + adc #>$28*$c sta screen_topline+1 - // [83] 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 + lda screen_bottomline+1 + adc #>$28*$c sta screen_bottomline+1 - // [83] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [99] phi (byte*) init_angle_screen::screen_topline#5 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [99] phi (byte*) init_angle_screen::screen_bottomline#5 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [99] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y - // [83] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] - // [83] 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 - // [83] 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 - // [83] 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 + // [99] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1] + // [99] 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 + // [99] 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 + // [99] 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: - // [84] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [84] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [100] 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 - // [84] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [100] 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 - // [84] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] - // [84] 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 - // [84] 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 + // [100] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2] + // [100] 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 + // [100] 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 - // [85] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [101] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda x asl // 39-x*2 - // [86] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa + // [102] (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 } - // [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [103] (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 - // [88] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [104] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda y asl // (word){ y*2, 0 } - // [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [105] (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) - // [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [92] call atan2_16 + // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [108] call atan2_16 jsr atan2_16 - // [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@4 // angle_w = atan2_16(xw, yw) - // [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [95] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [111] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc _10 @@ -9535,50 +10282,50 @@ init_angle_screen: { inc _10+1 !: // ang_w = >(angle_w+0x0080) - // [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2 + // [112] (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 - // [97] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [113] *((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 - // [98] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [114] (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 - // [99] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12 -- pbuz1_derefidx_vbuz2=vbuaa + // [115] *((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 - // [100] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [116] (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 - // [101] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [117] *((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 - // [102] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [118] (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 - // [103] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [119] *((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--) - // [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [106] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@2 -- vbuz1_lt_vbuc1_then_la1 + // [122] 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 - // [107] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [123] (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 @@ -9587,7 +10334,7 @@ init_angle_screen: { sbc #>$28 sta screen_topline+1 // screen_bottomline += 40 - // [108] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [124] (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 @@ -9596,22 +10343,22 @@ init_angle_screen: { inc screen_bottomline+1 !: // for(byte y: 0..12) - // [109] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 + // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1 inc y - // [110] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [126] 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 // } - // [111] return + // [127] 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($41) x, signed word zeropage($43) y) +// atan2_16(signed word zeropage($4c) x, signed word zeropage($4e) y) atan2_16: { .label _2 = $1d .label _7 = $1f @@ -9621,16 +10368,16 @@ atan2_16: { .label xd = $25 .label yd = $23 .label return = $21 - .label x = $41 - .label y = $43 + .label x = $4c + .label y = $4e // (y>=0)?y:-y - // [112] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [128] 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 - // [113] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc y @@ -9638,18 +10385,18 @@ atan2_16: { lda #0 sbc y+1 sta _2+1 - // [114] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] - // [114] 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 + // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [130] 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 - // [115] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [131] 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 - // [116] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc x @@ -9657,42 +10404,42 @@ atan2_16: { lda #0 sbc x+1 sta _7+1 - // [117] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] - // [117] 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 + // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [133] 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: - // [118] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [118] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [134] 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 - // [118] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax - // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [134] 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) - // [119] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [135] 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 - // [120] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] - // [120] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [136] 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 - // [121] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr angle+1 ror angle // if(x<0) - // [122] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [138] 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 - // [123] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc angle @@ -9700,17 +10447,17 @@ atan2_16: { lda #>$8000 sbc angle+1 sta angle+1 - // [124] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] - // [124] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [140] 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) - // [125] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [141] 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 - // [126] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc angle @@ -9718,69 +10465,69 @@ atan2_16: { lda #0 sbc angle+1 sta angle+1 - // [127] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] - // [127] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [143] 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 // } - // [128] return + // [144] return rts // atan2_16::@11 b11: - // [129] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [130] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda xi sta xd lda xi+1 sta xd+1 - // [131] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [147] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda yi sta yd lda yi+1 sta yd+1 - // [132] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] - // [132] 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 - // [132] 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 - // [132] phi (byte) atan2_16::shift#2 = (byte~) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [148] 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 + // [148] 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 + // [148] 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) - // [133] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [149] 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) - // [134] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [150] 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 - // [135] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [151] (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 - // [136] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [152] (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 - // [137] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] - // [137] 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 - // [137] 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 + // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [153] 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 + // [153] 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) - // [138] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [154] 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 - // [139] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [155] (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 @@ -9789,7 +10536,7 @@ atan2_16: { sbc yd+1 sta xi+1 // yi += xd - // [140] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [156] (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 @@ -9798,10 +10545,10 @@ atan2_16: { adc xd+1 sta yi+1 // angle -= CORDIC_ATAN2_ANGLES_16[i] - // [141] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [142] (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 + // [158] (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 @@ -9810,30 +10557,30 @@ atan2_16: { lda angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta angle+1 - // [143] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] - // [143] 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 - // [143] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [143] 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 + // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [159] 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 + // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [159] 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) - // [144] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [145] 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 + // [161] 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: - // [118] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] - // [118] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [118] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [118] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [118] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [134] 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 - // [146] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [162] (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 @@ -9842,7 +10589,7 @@ atan2_16: { adc yd+1 sta xi+1 // yi -= xd - // [147] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [163] (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 @@ -9851,10 +10598,10 @@ atan2_16: { sbc xd+1 sta yi+1 // angle += CORDIC_ATAN2_ANGLES_16[i] - // [148] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [149] (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 + // [165] (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 @@ -9867,7 +10614,7 @@ atan2_16: { // atan2_16::@14 b14: // xd >>= 2 - // [150] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [166] (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 @@ -9877,7 +10624,7 @@ atan2_16: { ror xd+1 ror xd // yd >>= 2 - // [151] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [167] (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 @@ -9887,13 +10634,13 @@ atan2_16: { ror yd+1 ror yd // shift -=2 - // [152] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp b13 // atan2_16::@4 b4: - // [153] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [169] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda x sta xi lda x+1 @@ -9901,7 +10648,7 @@ atan2_16: { jmp b6 // atan2_16::@1 b1: - // [154] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda y sta yi lda y+1 @@ -9912,113 +10659,117 @@ atan2_16: { // Populates 1000 bytes (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision // Utilizes symmetry around the center +// init_dist_screen(byte* zeropage($28) screen) init_dist_screen: { - .label yds = $46 - .label xds = $48 - .label ds = $48 + .label screen = $28 + .label screen_bottomline = $2a + .label yds = $51 + .label xds = $53 + .label ds = $53 .label x = $2c .label xb = $2d .label screen_topline = $28 - .label screen_bottomline = $2a .label y = $27 // init_squares() - // [156] call init_squares - // [226] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [172] call init_squares + // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares - // [157] phi from init_dist_screen to init_dist_screen::@1 [phi:init_dist_screen->init_dist_screen::@1] - // [157] 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 + lda screen+1 + adc #>$28*$18 sta screen_bottomline+1 - // [157] 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 - // [157] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [174] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1] + // [174] phi (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@10->init_dist_screen::@1#0] -- register_copy + // [174] phi (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@10->init_dist_screen::@1#1] -- register_copy + // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta y - // [157] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] - // [157] 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 - // [157] 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 - // [157] 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 + // [174] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1] + // [174] 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 + // [174] 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 + // [174] 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 - // [158] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [175] (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) - // [159] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [176] 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 - // [160] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [161] 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] - // [161] 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 + // [178] 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] + // [178] 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) - // [162] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [163] call sqr - // [222] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] - // [222] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [180] call sqr + // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) - // [164] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [181] (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 + // init_dist_screen::@11 // yds = sqr(yd) - // [165] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [166] phi from init_dist_screen::@10 to init_dist_screen::@5 [phi:init_dist_screen::@10->init_dist_screen::@5] - // [166] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@10->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [183] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5] + // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@11->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta xb - // [166] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@10->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta x - // [166] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - // [166] 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 - // [166] 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 + // [183] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5] + // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@13->init_dist_screen::@5#0] -- register_copy + // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@13->init_dist_screen::@5#1] -- register_copy // init_dist_screen::@5 b5: // x2 = x*2 - // [167] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [184] (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) - // [168] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 -- vbuaa_ge_vbuc1_then_la1 + // [185] 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 - // [169] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [170] 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] - // [170] 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 + // [187] 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] + // [187] 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) - // [171] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [172] call sqr - // [222] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] - // [222] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy + // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [189] call sqr + // [239] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr] + // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [173] (word) sqr::return#3 ← (word) sqr::return#0 - // init_dist_screen::@11 + // [190] (word) sqr::return#3 ← (word) sqr::return#0 + // init_dist_screen::@12 // xds = sqr(xd) - // [174] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [175] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [192] (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 @@ -10027,39 +10778,39 @@ init_dist_screen: { adc yds+1 sta ds+1 // sqrt(ds) - // [176] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [177] call sqrt + // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [194] call sqrt jsr sqrt - // [178] (byte) sqrt::return#2 ← (byte) sqrt::return#0 - // init_dist_screen::@12 + // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // init_dist_screen::@13 // d = sqrt(ds) - // [179] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [180] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [197] *((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 - // [181] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [198] *((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 - // [182] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [199] *((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 - // [183] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [200] *((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--) - // [184] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc x - // [185] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec xb - // [186] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 -- vbuz1_lt_vbuc1_then_la1 + // [203] 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 - // [187] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [204] (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 @@ -10068,7 +10819,7 @@ init_dist_screen: { inc screen_topline+1 !: // screen_bottomline -= 40 - // [188] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [205] (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 @@ -10077,27 +10828,27 @@ init_dist_screen: { sbc #>$28 sta screen_bottomline+1 // for(byte y: 0..12) - // [189] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc y - // [190] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [207] 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 // } - // [191] return + // [208] return rts // init_dist_screen::@6 b6: // (x2>=39)?(x2-39):(39-x2) - // [192] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [209] (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) - // [193] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp b4 @@ -10106,29 +10857,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($48) val) +// sqrt(word zeropage($53) val) sqrt: { .label _1 = $2e .label _3 = $2e .label found = $2e - .label val = $48 + .label val = $53 // bsearch16u(val, SQUARES, NUM_SQUARES) - // [194] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [195] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta bsearch16u.items lda SQUARES+1 sta bsearch16u.items+1 - // [196] call bsearch16u - // [203] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [213] call bsearch16u + // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u // bsearch16u(val, SQUARES, NUM_SQUARES) - // [197] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 // sqrt::@1 // found = bsearch16u(val, SQUARES, NUM_SQUARES) - // [198] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 // found-SQUARES - // [199] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda _3 sec sbc SQUARES @@ -10136,15 +10887,15 @@ sqrt: { lda _3+1 sbc SQUARES+1 sta _3+1 - // [200] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr _1+1 ror _1 // (byte)(found-SQUARES) - // [201] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda _1 // sqrt::@return // } - // [202] return + // [219] return rts } // bsearch16u @@ -10153,27 +10904,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($48) key, word* zeropage($2e) items, byte register(X) num) +// bsearch16u(word zeropage($53) key, word* zeropage($2e) items, byte register(X) num) bsearch16u: { .label _2 = $2e - .label pivot = $4a - .label result = $4c + .label pivot = $55 + .label result = $57 .label return = $2e .label items = $2e - .label key = $48 - // [204] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [204] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + .label key = $53 + // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [221] 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) - // [205] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [222] 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 - // [206] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [223] 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 @@ -10185,7 +10936,7 @@ bsearch16u: { !: bcc b2 // bsearch16u::@1 - // [207] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda _2 sec sbc #<1*SIZEOF_WORD @@ -10193,26 +10944,26 @@ bsearch16u: { lda _2+1 sbc #>1*SIZEOF_WORD sta _2+1 - // [208] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [208] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy // bsearch16u::@2 b2: - // [209] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [209] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy // bsearch16u::@return // } - // [210] return + // [227] return rts // bsearch16u::@4 b4: // num >> 1 - // [211] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [212] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [213] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc adc items sta pivot @@ -10220,7 +10971,7 @@ bsearch16u: { adc items+1 sta pivot+1 // result = (signed word)key-(signed word)*pivot - // [214] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [231] (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 @@ -10231,12 +10982,12 @@ bsearch16u: { sbc (pivot),y sta result+1 // if (result == 0) - // [215] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [232] 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 - // [216] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda pivot sta return lda pivot+1 @@ -10245,7 +10996,7 @@ bsearch16u: { // bsearch16u::@6 b6: // if (result > 0) - // [217] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda result+1 bmi b7 bne !+ @@ -10254,7 +11005,7 @@ bsearch16u: { !: // bsearch16u::@9 // items = pivot+1 - // [218] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [235] (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 @@ -10263,21 +11014,21 @@ bsearch16u: { adc pivot+1 sta items+1 // num--; - // [219] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex - // [220] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [220] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [220] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 b7: // num >>= 1 - // [221] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [204] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [204] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [204] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp b3 } // sqr @@ -10285,12 +11036,12 @@ bsearch16u: { // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { - .label return = $48 - .label return_2 = $46 + .label return = $53 + .label return_2 = $51 // return SQUARES[val]; - // [223] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [224] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta return @@ -10299,7 +11050,7 @@ sqr: { sta return+1 // sqr::@return // } - // [225] return + // [242] return rts } // init_squares @@ -10309,44 +11060,40 @@ init_squares: { .label squares = $32 .label sqr = $30 // malloc(NUM_SQUARES*sizeof(word)) - // [227] call malloc - // [78] phi from init_squares to malloc [phi:init_squares->malloc] - // [78] phi (word) malloc::size#2 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [244] call malloc + // [93] phi from init_squares to malloc [phi:init_squares->malloc] + // [93] phi (word) malloc::size#7 = (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 - // [78] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:init_squares->malloc#1] -- pbuz1=pbuc1 - lda #HEAP_TOP - sta heap_head+1 + // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc // init_squares::@2 // malloc(NUM_SQUARES*sizeof(word)) - // [228] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 // squares = SQUARES - // [229] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda SQUARES sta squares lda SQUARES+1 sta squares+1 - // [230] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] - // [230] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [230] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 txa sta sqr sta sqr+1 - // [230] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] - // [230] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [230] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [230] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [247] 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 - // [231] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda sqr sta (squares),y @@ -10354,7 +11101,7 @@ init_squares: { lda sqr+1 sta (squares),y // *squares++ = sqr; - // [232] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc squares @@ -10363,15 +11110,15 @@ init_squares: { inc squares+1 !: // i*2 - // [233] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 - // [234] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 - // [235] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc sqr sta sqr @@ -10379,33 +11126,20 @@ init_squares: { inc sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) - // [236] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [237] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [254] 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 // } - // [238] return + // [255] return rts } // File Data - // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... +// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i