mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-08-07 22:25:13 +00:00
8219 lines
524 KiB
Plaintext
8219 lines
524 KiB
Plaintext
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
|
|
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
|
|
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
|
|
Fixing pointer increment (word*) init_squares::squares ← ++ (word*) init_squares::squares
|
|
Fixing pointer addition (word~) sqrt::$1 ← (word*) sqrt::found - (word*) SQUARES
|
|
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)
|
|
Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift
|
|
Identified constant variable (byte*) HEAP_TOP
|
|
Culled Empty Block (label) malloc::@1
|
|
Culled Empty Block (label) @1
|
|
Culled Empty Block (label) @2
|
|
Culled Empty Block (label) bsearch16u::@11
|
|
Culled Empty Block (label) bsearch16u::@12
|
|
Culled Empty Block (label) bsearch16u::@14
|
|
Culled Empty Block (label) bsearch16u::@16
|
|
Culled Empty Block (label) bsearch16u::@17
|
|
Culled Empty Block (label) bsearch16u::@4
|
|
Culled Empty Block (label) bsearch16u::@5
|
|
Culled Empty Block (label) init_squares::@2
|
|
Culled Empty Block (label) @4
|
|
Culled Empty Block (label) sqr::@1
|
|
Culled Empty Block (label) @5
|
|
Culled Empty Block (label) sqrt::@1
|
|
Culled Empty Block (label) atan2_16::@9
|
|
Culled Empty Block (label) atan2_16::@10
|
|
Culled Empty Block (label) atan2_16::@11
|
|
Culled Empty Block (label) atan2_16::@12
|
|
Culled Empty Block (label) atan2_16::@28
|
|
Culled Empty Block (label) atan2_16::@29
|
|
Culled Empty Block (label) atan2_16::@21
|
|
Culled Empty Block (label) atan2_16::@22
|
|
Culled Empty Block (label) atan2_16::@23
|
|
Culled Empty Block (label) atan2_16::@31
|
|
Culled Empty Block (label) atan2_16::@32
|
|
Culled Empty Block (label) atan2_16::@14
|
|
Culled Empty Block (label) @7
|
|
Culled Empty Block (label) init_buckets::@4
|
|
Culled Empty Block (label) @10
|
|
Culled Empty Block (label) init_angle_screen::@4
|
|
Culled Empty Block (label) @11
|
|
Culled Empty Block (label) init_dist_screen::@13
|
|
Culled Empty Block (label) init_dist_screen::@14
|
|
Culled Empty Block (label) init_dist_screen::@9
|
|
Culled Empty Block (label) init_dist_screen::@10
|
|
Culled Empty Block (label) init_dist_screen::@12
|
|
|
|
CONTROL FLOW GRAPH SSA
|
|
@begin: scope:[] from
|
|
(byte*) HEAP_TOP#0 ← ((byte*)) (number) $a000
|
|
(byte*) heap_head#0 ← (byte*) HEAP_TOP#0
|
|
to:@3
|
|
malloc: scope:[malloc] from @13 @8 @9 init_squares
|
|
(word) malloc::size#4 ← phi( @13/(word) malloc::size#2 @8/(word) malloc::size#1 @9/(word) malloc::size#3 init_squares/(word) malloc::size#0 )
|
|
(byte*) heap_head#13 ← phi( @13/(byte*) heap_head#5 @8/(byte*) heap_head#25 @9/(byte*) heap_head#26 init_squares/(byte*) heap_head#27 )
|
|
(byte*~) malloc::$0 ← (byte*) heap_head#13 - (word) malloc::size#4
|
|
(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#6 ← phi( malloc/(void*) malloc::return#0 )
|
|
(void*) malloc::return#1 ← (void*) malloc::return#6
|
|
(byte*) heap_head#2 ← (byte*) heap_head#14
|
|
return
|
|
to:@return
|
|
bsearch16u: scope:[bsearch16u] from sqrt
|
|
(word) bsearch16u::key#4 ← phi( sqrt/(word) bsearch16u::key#0 )
|
|
(word*) bsearch16u::items#7 ← phi( sqrt/(word*) bsearch16u::items#1 )
|
|
(byte) bsearch16u::num#7 ← phi( sqrt/(byte) bsearch16u::num#2 )
|
|
to:bsearch16u::@6
|
|
bsearch16u::@6: scope:[bsearch16u] from bsearch16u bsearch16u::@10
|
|
(word) bsearch16u::key#3 ← phi( bsearch16u/(word) bsearch16u::key#4 bsearch16u::@10/(word) bsearch16u::key#5 )
|
|
(word*) bsearch16u::items#6 ← phi( bsearch16u/(word*) bsearch16u::items#7 bsearch16u::@10/(word*) bsearch16u::items#8 )
|
|
(byte) bsearch16u::num#3 ← phi( bsearch16u/(byte) bsearch16u::num#7 bsearch16u::@10/(byte) bsearch16u::num#0 )
|
|
(bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
|
|
if((bool~) bsearch16u::$5) goto bsearch16u::@7
|
|
to:bsearch16u::@8
|
|
bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6
|
|
(word) bsearch16u::key#1 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 )
|
|
(word*) bsearch16u::items#2 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 )
|
|
(byte) bsearch16u::num#4 ← phi( bsearch16u::@6/(byte) bsearch16u::num#3 )
|
|
(byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
|
|
(byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
|
|
(word*~) bsearch16u::$7 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
|
|
(word*) bsearch16u::pivot#0 ← (word*~) bsearch16u::$7
|
|
(signed word~) bsearch16u::$8 ← ((signed word)) (word) bsearch16u::key#1
|
|
(signed word~) bsearch16u::$9 ← ((signed word)) *((word*) bsearch16u::pivot#0)
|
|
(signed word~) bsearch16u::$10 ← (signed word~) bsearch16u::$8 - (signed word~) bsearch16u::$9
|
|
(signed word) bsearch16u::result#0 ← (signed word~) bsearch16u::$10
|
|
(bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0
|
|
(bool~) bsearch16u::$12 ← ! (bool~) bsearch16u::$11
|
|
if((bool~) bsearch16u::$12) goto bsearch16u::@9
|
|
to:bsearch16u::@13
|
|
bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6
|
|
(word) bsearch16u::key#2 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 )
|
|
(word*) bsearch16u::items#3 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 )
|
|
(bool~) bsearch16u::$0 ← *((word*) bsearch16u::items#3) <= (word) bsearch16u::key#2
|
|
if((bool~) bsearch16u::$0) goto bsearch16u::@1
|
|
to:bsearch16u::@2
|
|
bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@7
|
|
(word) bsearch16u::key#7 ← phi( bsearch16u::@7/(word) bsearch16u::key#1 )
|
|
(word*) bsearch16u::items#9 ← phi( bsearch16u::@7/(word*) bsearch16u::items#2 )
|
|
(word*) bsearch16u::pivot#3 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 )
|
|
(byte) bsearch16u::num#8 ← phi( bsearch16u::@7/(byte) bsearch16u::num#4 )
|
|
(signed word) bsearch16u::result#1 ← phi( bsearch16u::@7/(signed word) bsearch16u::result#0 )
|
|
(bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (number) 0
|
|
(bool~) bsearch16u::$14 ← ! (bool~) bsearch16u::$13
|
|
if((bool~) bsearch16u::$14) goto bsearch16u::@10
|
|
to:bsearch16u::@15
|
|
bsearch16u::@13: scope:[bsearch16u] from bsearch16u::@7
|
|
(word*) bsearch16u::pivot#1 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 )
|
|
(word*) bsearch16u::return#0 ← (word*) bsearch16u::pivot#1
|
|
to:bsearch16u::@return
|
|
bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@13 bsearch16u::@3
|
|
(word*) bsearch16u::return#4 ← phi( bsearch16u::@13/(word*) bsearch16u::return#0 bsearch16u::@3/(word*) bsearch16u::return#2 )
|
|
(word*) bsearch16u::return#1 ← (word*) bsearch16u::return#4
|
|
return
|
|
to:@return
|
|
bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@15 bsearch16u::@9
|
|
(word) bsearch16u::key#5 ← phi( bsearch16u::@15/(word) bsearch16u::key#6 bsearch16u::@9/(word) bsearch16u::key#7 )
|
|
(word*) bsearch16u::items#8 ← phi( bsearch16u::@15/(word*) bsearch16u::items#0 bsearch16u::@9/(word*) bsearch16u::items#9 )
|
|
(byte) bsearch16u::num#5 ← phi( bsearch16u::@15/(byte) bsearch16u::num#1 bsearch16u::@9/(byte) bsearch16u::num#8 )
|
|
(byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
|
|
to:bsearch16u::@6
|
|
bsearch16u::@15: scope:[bsearch16u] from bsearch16u::@9
|
|
(word) bsearch16u::key#6 ← phi( bsearch16u::@9/(word) bsearch16u::key#7 )
|
|
(byte) bsearch16u::num#6 ← phi( bsearch16u::@9/(byte) bsearch16u::num#8 )
|
|
(word*) bsearch16u::pivot#2 ← phi( bsearch16u::@9/(word*) bsearch16u::pivot#3 )
|
|
(number~) bsearch16u::$17 ← (number) 1 * (const byte) SIZEOF_WORD
|
|
(word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot#2 + (number~) bsearch16u::$17
|
|
(word*) bsearch16u::items#0 ← (word*~) bsearch16u::$15
|
|
(byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#6
|
|
to:bsearch16u::@10
|
|
bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@8
|
|
(word*) bsearch16u::items#4 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 )
|
|
(word*~) bsearch16u::$3 ← (word*) bsearch16u::items#4
|
|
to:bsearch16u::@3
|
|
bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@8
|
|
(word*) bsearch16u::items#5 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 )
|
|
(number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD
|
|
(word*~) bsearch16u::$1 ← (word*) bsearch16u::items#5 - (number~) bsearch16u::$18
|
|
(word*~) bsearch16u::$2 ← (word*~) bsearch16u::$1
|
|
to:bsearch16u::@3
|
|
bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@2
|
|
(word*~) bsearch16u::$4 ← phi( bsearch16u::@1/(word*~) bsearch16u::$3 bsearch16u::@2/(word*~) bsearch16u::$2 )
|
|
(word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4
|
|
to:bsearch16u::@return
|
|
@3: scope:[] from @begin
|
|
(byte*) heap_head#37 ← phi( @begin/(byte*) heap_head#0 )
|
|
(byte) NUM_SQUARES#0 ← (number) $ff
|
|
(word*) SQUARES#0 ← (word*) 0
|
|
to:@6
|
|
init_squares: scope:[init_squares] from init_dist_screen
|
|
(byte*) heap_head#27 ← phi( init_dist_screen/(byte*) heap_head#31 )
|
|
(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
|
|
call malloc
|
|
(void*) malloc::return#2 ← (void*) malloc::return#1
|
|
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#7 ← phi( init_squares/(void*) malloc::return#2 )
|
|
(void*~) init_squares::$1 ← (void*) malloc::return#7
|
|
(byte*) heap_head#3 ← (byte*) heap_head#15
|
|
(word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1
|
|
(word*) init_squares::squares#0 ← (word*) SQUARES#1
|
|
(word) init_squares::sqr#0 ← (number) 0
|
|
(number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1
|
|
(byte) init_squares::i#0 ← (byte) 0
|
|
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#28 ← phi( init_squares::@1/(byte*) heap_head#28 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 )
|
|
*((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
|
|
(word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
|
|
(number~) init_squares::$3 ← (byte) init_squares::i#2 * (number) 2
|
|
(number~) init_squares::$4 ← (number~) init_squares::$3 + (number) 1
|
|
(word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (number~) init_squares::$4
|
|
(byte) init_squares::i#1 ← (byte) init_squares::i#2 + rangenext(0,init_squares::$2)
|
|
(bool~) init_squares::$5 ← (byte) init_squares::i#1 != rangelast(0,init_squares::$2)
|
|
if((bool~) init_squares::$5) goto init_squares::@1
|
|
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#28 )
|
|
(byte*) heap_head#4 ← (byte*) heap_head#16
|
|
(word*) SQUARES#2 ← (word*) SQUARES#8
|
|
return
|
|
to:@return
|
|
sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8
|
|
(word*) SQUARES#9 ← phi( init_dist_screen::@4/(word*) SQUARES#18 init_dist_screen::@8/(word*) SQUARES#19 )
|
|
(byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
|
|
(byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
|
|
(word) sqr::return#0 ← *((word*) SQUARES#9 + (byte~) sqr::$0)
|
|
to:sqr::@return
|
|
sqr::@return: scope:[sqr] from sqr
|
|
(word) sqr::return#4 ← phi( sqr/(word) sqr::return#0 )
|
|
(word) sqr::return#1 ← (word) sqr::return#4
|
|
return
|
|
to:@return
|
|
sqrt: scope:[sqrt] from init_dist_screen::@17
|
|
(byte) NUM_SQUARES#8 ← phi( init_dist_screen::@17/(byte) NUM_SQUARES#13 )
|
|
(word*) SQUARES#10 ← phi( init_dist_screen::@17/(word*) SQUARES#20 )
|
|
(word) sqrt::val#1 ← phi( init_dist_screen::@17/(word) sqrt::val#0 )
|
|
(word) bsearch16u::key#0 ← (word) sqrt::val#1
|
|
(word*) bsearch16u::items#1 ← (word*) SQUARES#10
|
|
(byte) bsearch16u::num#2 ← (byte) NUM_SQUARES#8
|
|
call bsearch16u
|
|
(word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
|
|
to:sqrt::@2
|
|
sqrt::@2: scope:[sqrt] from sqrt
|
|
(word*) SQUARES#11 ← phi( sqrt/(word*) SQUARES#10 )
|
|
(word*) bsearch16u::return#5 ← phi( sqrt/(word*) bsearch16u::return#3 )
|
|
(word*~) sqrt::$0 ← (word*) bsearch16u::return#5
|
|
(word*) sqrt::found#0 ← (word*~) sqrt::$0
|
|
(word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*) SQUARES#11
|
|
(word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD
|
|
(byte~) sqrt::$2 ← ((byte)) (word~) sqrt::$1
|
|
(byte) sqrt::sq#0 ← (byte~) sqrt::$2
|
|
(byte) sqrt::return#0 ← (byte) sqrt::sq#0
|
|
to:sqrt::@return
|
|
sqrt::@return: scope:[sqrt] from sqrt::@2
|
|
(byte) sqrt::return#3 ← phi( sqrt::@2/(byte) sqrt::return#0 )
|
|
(byte) sqrt::return#1 ← (byte) sqrt::return#3
|
|
return
|
|
to:@return
|
|
@6: scope:[] from @3
|
|
(word*) SQUARES#40 ← phi( @3/(word*) SQUARES#0 )
|
|
(byte) NUM_SQUARES#31 ← phi( @3/(byte) NUM_SQUARES#0 )
|
|
(byte*) heap_head#34 ← phi( @3/(byte*) heap_head#37 )
|
|
(byte) CORDIC_ITERATIONS_16#0 ← (number) $f
|
|
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 ← kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
}}
|
|
to:@8
|
|
atan2_16: scope:[atan2_16] from init_angle_screen::@2
|
|
(signed word) atan2_16::x#9 ← phi( init_angle_screen::@2/(signed word) atan2_16::x#0 )
|
|
(signed word) atan2_16::y#1 ← phi( init_angle_screen::@2/(signed word) atan2_16::y#0 )
|
|
(bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
|
|
if((bool~) atan2_16::$0) goto atan2_16::@1
|
|
to:atan2_16::@2
|
|
atan2_16::@1: scope:[atan2_16] from atan2_16
|
|
(signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 )
|
|
(signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 )
|
|
(signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2
|
|
to:atan2_16::@3
|
|
atan2_16::@2: scope:[atan2_16] from atan2_16
|
|
(signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 )
|
|
(signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 )
|
|
(signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3
|
|
(signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1
|
|
to:atan2_16::@3
|
|
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
|
|
(signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 )
|
|
(signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 )
|
|
(signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 )
|
|
(signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4
|
|
(bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
|
|
if((bool~) atan2_16::$5) goto atan2_16::@4
|
|
to:atan2_16::@5
|
|
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
|
|
(signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
|
|
(signed word) atan2_16::yi#12 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
|
|
(signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
|
|
(signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2
|
|
to:atan2_16::@6
|
|
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
|
|
(signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
|
|
(signed word) atan2_16::yi#13 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
|
|
(signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
|
|
(signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3
|
|
(signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6
|
|
to:atan2_16::@6
|
|
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
|
|
(signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 )
|
|
(signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 )
|
|
(signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 )
|
|
(signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 )
|
|
(signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9
|
|
(word) atan2_16::angle#0 ← (number) 0
|
|
(number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (number) 1
|
|
(byte) atan2_16::i#0 ← (byte) 0
|
|
to:atan2_16::@15
|
|
atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6
|
|
(signed word) atan2_16::y#7 ← phi( atan2_16::@27/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
|
|
(signed word) atan2_16::x#7 ← phi( atan2_16::@27/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
|
|
(word) atan2_16::angle#12 ← phi( atan2_16::@27/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
|
|
(byte) atan2_16::i#6 ← phi( atan2_16::@27/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
|
|
(signed word) atan2_16::xi#6 ← phi( atan2_16::@27/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
|
|
(signed word) atan2_16::yi#3 ← phi( atan2_16::@27/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#9 )
|
|
(bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (number) 0
|
|
(bool~) atan2_16::$18 ← ! (bool~) atan2_16::$17
|
|
if((bool~) atan2_16::$18) goto atan2_16::@16
|
|
to:atan2_16::@17
|
|
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
|
|
(signed word) atan2_16::y#19 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 )
|
|
(signed word) atan2_16::x#17 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 )
|
|
(word) atan2_16::angle#19 ← phi( atan2_16::@15/(word) atan2_16::angle#12 )
|
|
(byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 )
|
|
(signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 )
|
|
(signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(signed word) atan2_16::xi#6 )
|
|
(signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3
|
|
(signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#4
|
|
(byte) atan2_16::shift#0 ← (byte) atan2_16::i#2
|
|
to:atan2_16::@18
|
|
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@27
|
|
(signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@27/(signed word) atan2_16::y#8 )
|
|
(signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@27/(signed word) atan2_16::x#8 )
|
|
(word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@27/(word) atan2_16::angle#13 )
|
|
(word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
|
|
(bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
|
|
(bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10
|
|
if((bool~) atan2_16::$11) goto atan2_16::@7
|
|
to:atan2_16::@33
|
|
atan2_16::@18: scope:[atan2_16] from atan2_16::@16 atan2_16::@19
|
|
(signed word) atan2_16::y#18 ← phi( atan2_16::@16/(signed word) atan2_16::y#19 atan2_16::@19/(signed word) atan2_16::y#20 )
|
|
(signed word) atan2_16::x#16 ← phi( atan2_16::@16/(signed word) atan2_16::x#17 atan2_16::@19/(signed word) atan2_16::x#18 )
|
|
(word) atan2_16::angle#18 ← phi( atan2_16::@16/(word) atan2_16::angle#19 atan2_16::@19/(word) atan2_16::angle#20 )
|
|
(byte) atan2_16::i#10 ← phi( atan2_16::@16/(byte) atan2_16::i#2 atan2_16::@19/(byte) atan2_16::i#11 )
|
|
(signed word) atan2_16::xi#11 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 atan2_16::@19/(signed word) atan2_16::xi#12 )
|
|
(signed word) atan2_16::yi#14 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 atan2_16::@19/(signed word) atan2_16::yi#15 )
|
|
(signed word) atan2_16::yd#7 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 atan2_16::@19/(signed word) atan2_16::yd#1 )
|
|
(signed word) atan2_16::xd#7 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 atan2_16::@19/(signed word) atan2_16::xd#1 )
|
|
(byte) atan2_16::shift#2 ← phi( atan2_16::@16/(byte) atan2_16::shift#0 atan2_16::@19/(byte) atan2_16::shift#1 )
|
|
(bool~) atan2_16::$19 ← (byte) atan2_16::shift#2 >= (number) 2
|
|
if((bool~) atan2_16::$19) goto atan2_16::@19
|
|
to:atan2_16::@20
|
|
atan2_16::@19: scope:[atan2_16] from atan2_16::@18
|
|
(signed word) atan2_16::y#20 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
|
|
(signed word) atan2_16::x#18 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
|
|
(word) atan2_16::angle#20 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
|
|
(byte) atan2_16::i#11 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
|
|
(signed word) atan2_16::xi#12 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
|
|
(signed word) atan2_16::yi#15 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
|
|
(byte) atan2_16::shift#3 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
|
|
(signed word) atan2_16::yd#3 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
|
|
(signed word) atan2_16::xd#3 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
|
|
(signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
|
|
(signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
|
|
(byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
|
|
to:atan2_16::@18
|
|
atan2_16::@20: scope:[atan2_16] from atan2_16::@18
|
|
(signed word) atan2_16::y#16 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
|
|
(signed word) atan2_16::x#14 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
|
|
(word) atan2_16::angle#16 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
|
|
(byte) atan2_16::i#8 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
|
|
(signed word) atan2_16::xi#9 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
|
|
(signed word) atan2_16::yd#8 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
|
|
(signed word) atan2_16::xd#8 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
|
|
(signed word) atan2_16::yi#10 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
|
|
(byte) atan2_16::shift#4 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
|
|
(bool~) atan2_16::$25 ← (number) 0 != (byte) atan2_16::shift#4
|
|
(bool~) atan2_16::$20 ← ! (bool~) atan2_16::$25
|
|
if((bool~) atan2_16::$20) goto atan2_16::@25
|
|
to:atan2_16::@24
|
|
atan2_16::@25: scope:[atan2_16] from atan2_16::@20 atan2_16::@24
|
|
(signed word) atan2_16::y#14 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 atan2_16::@24/(signed word) atan2_16::y#17 )
|
|
(signed word) atan2_16::x#13 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 atan2_16::@24/(signed word) atan2_16::x#15 )
|
|
(word) atan2_16::angle#14 ← phi( atan2_16::@20/(word) atan2_16::angle#16 atan2_16::@24/(word) atan2_16::angle#17 )
|
|
(byte) atan2_16::i#7 ← phi( atan2_16::@20/(byte) atan2_16::i#8 atan2_16::@24/(byte) atan2_16::i#9 )
|
|
(signed word) atan2_16::xd#9 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 atan2_16::@24/(signed word) atan2_16::xd#2 )
|
|
(signed word) atan2_16::yd#9 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 atan2_16::@24/(signed word) atan2_16::yd#2 )
|
|
(signed word) atan2_16::xi#7 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 atan2_16::@24/(signed word) atan2_16::xi#10 )
|
|
(signed word) atan2_16::yi#5 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 atan2_16::@24/(signed word) atan2_16::yi#11 )
|
|
(bool~) atan2_16::$21 ← (signed word) atan2_16::yi#5 >= (number) 0
|
|
if((bool~) atan2_16::$21) goto atan2_16::@26
|
|
to:atan2_16::@30
|
|
atan2_16::@24: scope:[atan2_16] from atan2_16::@20
|
|
(signed word) atan2_16::y#17 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 )
|
|
(signed word) atan2_16::x#15 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 )
|
|
(word) atan2_16::angle#17 ← phi( atan2_16::@20/(word) atan2_16::angle#16 )
|
|
(byte) atan2_16::i#9 ← phi( atan2_16::@20/(byte) atan2_16::i#8 )
|
|
(signed word) atan2_16::xi#10 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 )
|
|
(signed word) atan2_16::yi#11 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 )
|
|
(signed word) atan2_16::yd#4 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 )
|
|
(signed word) atan2_16::xd#4 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 )
|
|
(signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
|
|
(signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
|
|
to:atan2_16::@25
|
|
atan2_16::@26: scope:[atan2_16] from atan2_16::@25
|
|
(signed word) atan2_16::y#10 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
|
|
(signed word) atan2_16::x#11 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
|
|
(word) atan2_16::angle#7 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
|
|
(byte) atan2_16::i#3 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
|
|
(signed word) atan2_16::xd#5 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
|
|
(signed word) atan2_16::yi#6 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
|
|
(signed word) atan2_16::yd#5 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
|
|
(signed word) atan2_16::xi#4 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 )
|
|
(signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#5
|
|
(signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#6 - (signed word) atan2_16::xd#5
|
|
(byte~) atan2_16::$23 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
|
|
(word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
|
|
to:atan2_16::@27
|
|
atan2_16::@30: scope:[atan2_16] from atan2_16::@25
|
|
(signed word) atan2_16::y#11 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
|
|
(signed word) atan2_16::x#12 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
|
|
(word) atan2_16::angle#8 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
|
|
(byte) atan2_16::i#4 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
|
|
(signed word) atan2_16::xd#6 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
|
|
(signed word) atan2_16::yi#7 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
|
|
(signed word) atan2_16::yd#6 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
|
|
(signed word) atan2_16::xi#5 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 )
|
|
(signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#6
|
|
(signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#7 + (signed word) atan2_16::xd#6
|
|
(byte~) atan2_16::$24 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
|
|
(word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
|
|
to:atan2_16::@27
|
|
atan2_16::@27: scope:[atan2_16] from atan2_16::@26 atan2_16::@30
|
|
(signed word) atan2_16::y#8 ← phi( atan2_16::@26/(signed word) atan2_16::y#10 atan2_16::@30/(signed word) atan2_16::y#11 )
|
|
(signed word) atan2_16::xi#8 ← phi( atan2_16::@26/(signed word) atan2_16::xi#1 atan2_16::@30/(signed word) atan2_16::xi#2 )
|
|
(signed word) atan2_16::x#8 ← phi( atan2_16::@26/(signed word) atan2_16::x#11 atan2_16::@30/(signed word) atan2_16::x#12 )
|
|
(word) atan2_16::angle#13 ← phi( atan2_16::@26/(word) atan2_16::angle#2 atan2_16::@30/(word) atan2_16::angle#3 )
|
|
(signed word) atan2_16::yi#8 ← phi( atan2_16::@26/(signed word) atan2_16::yi#1 atan2_16::@30/(signed word) atan2_16::yi#2 )
|
|
(byte) atan2_16::i#5 ← phi( atan2_16::@26/(byte) atan2_16::i#3 atan2_16::@30/(byte) atan2_16::i#4 )
|
|
(byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,atan2_16::$16)
|
|
(bool~) atan2_16::$22 ← (byte) atan2_16::i#1 != rangelast(0,atan2_16::$16)
|
|
if((bool~) atan2_16::$22) goto atan2_16::@15
|
|
to:atan2_16::@17
|
|
atan2_16::@7: scope:[atan2_16] from atan2_16::@17 atan2_16::@33
|
|
(word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@33/(word) atan2_16::angle#4 )
|
|
(signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@33/(signed word) atan2_16::y#6 )
|
|
(bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
|
|
(bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13
|
|
if((bool~) atan2_16::$14) goto atan2_16::@8
|
|
to:atan2_16::@13
|
|
atan2_16::@33: scope:[atan2_16] from atan2_16::@17
|
|
(signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 )
|
|
(word) atan2_16::angle#9 ← phi( atan2_16::@17/(word) atan2_16::angle#1 )
|
|
(number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
|
|
(word) atan2_16::angle#4 ← (number~) atan2_16::$12
|
|
to:atan2_16::@7
|
|
atan2_16::@8: scope:[atan2_16] from atan2_16::@13 atan2_16::@7
|
|
(word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 )
|
|
(word) atan2_16::return#0 ← (word) atan2_16::angle#10
|
|
to:atan2_16::@return
|
|
atan2_16::@13: scope:[atan2_16] from atan2_16::@7
|
|
(word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 )
|
|
(word~) atan2_16::$15 ← - (word) atan2_16::angle#11
|
|
(word) atan2_16::angle#5 ← (word~) atan2_16::$15
|
|
to:atan2_16::@8
|
|
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
|
|
(word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 )
|
|
(word) atan2_16::return#1 ← (word) atan2_16::return#3
|
|
return
|
|
to:@return
|
|
@8: scope:[] from @6
|
|
(word*) SQUARES#39 ← phi( @6/(word*) SQUARES#40 )
|
|
(byte) NUM_SQUARES#29 ← phi( @6/(byte) NUM_SQUARES#31 )
|
|
(byte*) heap_head#25 ← phi( @6/(byte*) heap_head#34 )
|
|
(word) malloc::size#1 ← (number) $3e8
|
|
call malloc
|
|
(void*) malloc::return#3 ← (void*) malloc::return#1
|
|
to:@13
|
|
@13: scope:[] from @8
|
|
(word*) SQUARES#38 ← phi( @8/(word*) SQUARES#39 )
|
|
(byte) NUM_SQUARES#27 ← phi( @8/(byte) NUM_SQUARES#29 )
|
|
(byte*) heap_head#17 ← phi( @8/(byte*) heap_head#2 )
|
|
(void*) malloc::return#8 ← phi( @8/(void*) malloc::return#3 )
|
|
(void*~) $0 ← (void*) malloc::return#8
|
|
(byte*) heap_head#5 ← (byte*) heap_head#17
|
|
(byte*) SCREEN_DIST#0 ← ((byte*)) (void*~) $0
|
|
(word) malloc::size#2 ← (number) $3e8
|
|
call malloc
|
|
(void*) malloc::return#4 ← (void*) malloc::return#1
|
|
to:@14
|
|
@14: scope:[] from @13
|
|
(word*) SQUARES#36 ← phi( @13/(word*) SQUARES#38 )
|
|
(byte) NUM_SQUARES#25 ← phi( @13/(byte) NUM_SQUARES#27 )
|
|
(byte*) heap_head#18 ← phi( @13/(byte*) heap_head#2 )
|
|
(void*) malloc::return#9 ← phi( @13/(void*) malloc::return#4 )
|
|
(void*~) $1 ← (void*) malloc::return#9
|
|
(byte*) heap_head#6 ← (byte*) heap_head#18
|
|
(byte*) SCREEN_ANGLE#0 ← ((byte*)) (void*~) $1
|
|
to:@9
|
|
main: scope:[main] from @12
|
|
(word*) SQUARES#21 ← phi( @12/(word*) SQUARES#25 )
|
|
(byte*) heap_head#29 ← phi( @12/(byte*) heap_head#33 )
|
|
(byte) NUM_SQUARES#14 ← phi( @12/(byte) NUM_SQUARES#17 )
|
|
(byte*) init_dist_screen::screen#0 ← (byte*) SCREEN_DIST#0
|
|
call init_dist_screen
|
|
to:main::@1
|
|
main::@1: scope:[main] from main
|
|
(word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 )
|
|
(byte*) heap_head#19 ← phi( main/(byte*) heap_head#11 )
|
|
(byte) NUM_SQUARES#9 ← phi( main/(byte) NUM_SQUARES#4 )
|
|
(byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#9
|
|
(byte*) heap_head#7 ← (byte*) heap_head#19
|
|
(word*) SQUARES#3 ← (word*) SQUARES#12
|
|
(byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_ANGLE#0
|
|
call init_angle_screen
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1
|
|
(word*) SQUARES#26 ← phi( main::@1/(word*) SQUARES#3 )
|
|
(byte*) heap_head#35 ← phi( main::@1/(byte*) heap_head#7 )
|
|
(byte) NUM_SQUARES#18 ← phi( main::@1/(byte) NUM_SQUARES#1 )
|
|
call init_buckets
|
|
to:main::@3
|
|
main::@3: scope:[main] from main::@2
|
|
(word*) SQUARES#22 ← phi( main::@2/(word*) SQUARES#26 )
|
|
(byte*) heap_head#30 ← phi( main::@2/(byte*) heap_head#35 )
|
|
(byte) NUM_SQUARES#15 ← phi( main::@2/(byte) NUM_SQUARES#18 )
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@3
|
|
(word*) SQUARES#13 ← phi( main::@3/(word*) SQUARES#22 )
|
|
(byte*) heap_head#20 ← phi( main::@3/(byte*) heap_head#30 )
|
|
(byte) NUM_SQUARES#10 ← phi( main::@3/(byte) NUM_SQUARES#15 )
|
|
(byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10
|
|
(byte*) heap_head#8 ← (byte*) heap_head#20
|
|
(word*) SQUARES#4 ← (word*) SQUARES#13
|
|
return
|
|
to:@return
|
|
@9: scope:[] from @14
|
|
(word*) SQUARES#33 ← phi( @14/(word*) SQUARES#36 )
|
|
(byte) NUM_SQUARES#22 ← phi( @14/(byte) NUM_SQUARES#25 )
|
|
(byte*) heap_head#26 ← phi( @14/(byte*) heap_head#6 )
|
|
(byte) NUM_BUCKETS#0 ← (number) $30
|
|
(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:@15
|
|
@15: scope:[] from @9
|
|
(word*) SQUARES#32 ← phi( @9/(word*) SQUARES#33 )
|
|
(byte) NUM_SQUARES#21 ← phi( @9/(byte) NUM_SQUARES#22 )
|
|
(byte*) heap_head#21 ← phi( @9/(byte*) heap_head#2 )
|
|
(void*) malloc::return#10 ← phi( @9/(void*) malloc::return#5 )
|
|
(void*~) $3 ← (void*) malloc::return#10
|
|
(byte*) heap_head#9 ← (byte*) heap_head#21
|
|
(byte[]) BUCKET_SIZES#0 ← ((byte*)) (void*~) $3
|
|
to:@12
|
|
init_buckets: scope:[init_buckets] from main::@2
|
|
(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) init_buckets::i#2 ← phi( init_buckets/(byte) init_buckets::i#0 init_buckets::@1/(byte) init_buckets::i#1 )
|
|
*((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*) init_buckets::dist#0 ← (byte*) SCREEN_DIST#0
|
|
(word) init_buckets::i1#0 ← (word) 0
|
|
to:init_buckets::@3
|
|
init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3
|
|
(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#2 ← phi( init_buckets::@2/(byte*) init_buckets::dist#0 init_buckets::@3/(byte*) init_buckets::dist#1 )
|
|
*((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2))
|
|
(byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#2
|
|
(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)
|
|
if((bool~) init_buckets::$2) goto init_buckets::@3
|
|
to:init_buckets::@return
|
|
init_buckets::@return: scope:[init_buckets] from init_buckets::@3
|
|
return
|
|
to:@return
|
|
init_angle_screen: scope:[init_angle_screen] from main::@1
|
|
(byte*) init_angle_screen::screen#1 ← phi( main::@1/(byte*) init_angle_screen::screen#0 )
|
|
(byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
|
|
(byte*) init_angle_screen::screen_topline#0 ← (byte*~) init_angle_screen::$0
|
|
(byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
|
|
(byte*) init_angle_screen::screen_bottomline#0 ← (byte*~) init_angle_screen::$1
|
|
(byte) init_angle_screen::y#0 ← (byte) 0
|
|
to:init_angle_screen::@1
|
|
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@3
|
|
(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 )
|
|
(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 )
|
|
(byte) init_angle_screen::y#4 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@3/(byte) init_angle_screen::y#1 )
|
|
(byte) init_angle_screen::x#0 ← (number) 0
|
|
(byte) init_angle_screen::xb#0 ← (number) $27
|
|
to:init_angle_screen::@2
|
|
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
|
|
(byte*) init_angle_screen::screen_topline#4 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_topline#5 init_angle_screen::@5/(byte*) init_angle_screen::screen_topline#2 )
|
|
(byte) init_angle_screen::xb#3 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@5/(byte) init_angle_screen::xb#1 )
|
|
(byte*) init_angle_screen::screen_bottomline#4 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_bottomline#5 init_angle_screen::@5/(byte*) init_angle_screen::screen_bottomline#2 )
|
|
(byte) init_angle_screen::y#2 ← phi( init_angle_screen::@1/(byte) init_angle_screen::y#4 init_angle_screen::@5/(byte) init_angle_screen::y#5 )
|
|
(byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) init_angle_screen::x#0 init_angle_screen::@5/(byte) init_angle_screen::x#1 )
|
|
(number~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (number) 2
|
|
(number~) init_angle_screen::$3 ← (number) $27 - (number~) init_angle_screen::$2
|
|
(word~) init_angle_screen::$4 ← ((word)) { (number~) init_angle_screen::$3, (number) 0 }
|
|
(signed word~) init_angle_screen::$5 ← ((signed word)) (word~) init_angle_screen::$4
|
|
(signed word) init_angle_screen::xw#0 ← (signed word~) init_angle_screen::$5
|
|
(number~) init_angle_screen::$6 ← (byte) init_angle_screen::y#2 * (number) 2
|
|
(word~) init_angle_screen::$7 ← ((word)) { (number~) init_angle_screen::$6, (number) 0 }
|
|
(signed word~) init_angle_screen::$8 ← ((signed word)) (word~) init_angle_screen::$7
|
|
(signed word) init_angle_screen::yw#0 ← (signed word~) init_angle_screen::$8
|
|
(signed word) atan2_16::x#0 ← (signed word) init_angle_screen::xw#0
|
|
(signed word) atan2_16::y#0 ← (signed word) init_angle_screen::yw#0
|
|
call atan2_16
|
|
(word) atan2_16::return#2 ← (word) atan2_16::return#1
|
|
to:init_angle_screen::@5
|
|
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@2
|
|
(byte) init_angle_screen::y#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#2 )
|
|
(byte) init_angle_screen::x#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#2 )
|
|
(byte*) init_angle_screen::screen_topline#2 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#4 )
|
|
(byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#3 )
|
|
(byte*) init_angle_screen::screen_bottomline#2 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#4 )
|
|
(word) atan2_16::return#4 ← phi( init_angle_screen::@2/(word) atan2_16::return#2 )
|
|
(word~) init_angle_screen::$9 ← (word) atan2_16::return#4
|
|
(word) init_angle_screen::angle_w#0 ← (word~) init_angle_screen::$9
|
|
(number~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (number) $80
|
|
(number~) init_angle_screen::$11 ← > (number~) init_angle_screen::$10
|
|
(byte) init_angle_screen::ang_w#0 ← (number~) init_angle_screen::$11
|
|
*((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
|
|
(byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0
|
|
*((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12
|
|
(number~) init_angle_screen::$13 ← (number) $80 + (byte) init_angle_screen::ang_w#0
|
|
*((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::x#3) ← (number~) init_angle_screen::$13
|
|
(number~) init_angle_screen::$14 ← (number) $80 - (byte) init_angle_screen::ang_w#0
|
|
*((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::x#3) ← (number~) init_angle_screen::$14
|
|
(byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#3
|
|
(byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
|
|
(bool~) init_angle_screen::$15 ← (byte) init_angle_screen::x#1 <= (number) $13
|
|
if((bool~) init_angle_screen::$15) goto init_angle_screen::@2
|
|
to:init_angle_screen::@3
|
|
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@5
|
|
(byte) init_angle_screen::y#3 ← phi( init_angle_screen::@5/(byte) init_angle_screen::y#5 )
|
|
(byte*) init_angle_screen::screen_bottomline#3 ← phi( init_angle_screen::@5/(byte*) init_angle_screen::screen_bottomline#2 )
|
|
(byte*) init_angle_screen::screen_topline#3 ← phi( init_angle_screen::@5/(byte*) init_angle_screen::screen_topline#2 )
|
|
(byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
|
|
(byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
|
|
(byte) init_angle_screen::y#1 ← (byte) init_angle_screen::y#3 + rangenext(0,$c)
|
|
(bool~) init_angle_screen::$16 ← (byte) init_angle_screen::y#1 != rangelast(0,$c)
|
|
if((bool~) init_angle_screen::$16) goto init_angle_screen::@1
|
|
to:init_angle_screen::@return
|
|
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@3
|
|
return
|
|
to:@return
|
|
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#31 ← phi( main/(byte*) heap_head#29 )
|
|
(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#35 ← 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
|
|
(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
|
|
(byte*) init_dist_screen::screen_bottomline#0 ← (byte*~) init_dist_screen::$1
|
|
(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#47 ← phi( init_dist_screen::@11/(byte*) heap_head#32 init_dist_screen::@15/(byte*) heap_head#10 )
|
|
(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#34 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#16 init_dist_screen::@15/(byte) NUM_SQUARES#35 )
|
|
(word*) SQUARES#34 ← 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
|
|
(byte) init_dist_screen::y2#0 ← (number~) init_dist_screen::$2
|
|
(bool~) init_dist_screen::$3 ← (byte) init_dist_screen::y2#0 >= (number) $18
|
|
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#45 ← phi( init_dist_screen::@1/(byte*) heap_head#47 )
|
|
(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#32 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#34 )
|
|
(word*) SQUARES#27 ← phi( init_dist_screen::@1/(word*) SQUARES#34 )
|
|
(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#46 ← phi( init_dist_screen::@1/(byte*) heap_head#47 )
|
|
(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#33 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#34 )
|
|
(word*) SQUARES#28 ← phi( init_dist_screen::@1/(word*) SQUARES#34 )
|
|
(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#44 ← phi( init_dist_screen::@2/(byte*) heap_head#45 init_dist_screen::@3/(byte*) heap_head#46 )
|
|
(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#30 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#32 init_dist_screen::@3/(byte) NUM_SQUARES#33 )
|
|
(word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#27 init_dist_screen::@3/(word*) SQUARES#28 )
|
|
(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
|
|
(byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
|
|
call sqr
|
|
(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#43 ← phi( init_dist_screen::@4/(byte*) heap_head#44 )
|
|
(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#28 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#30 )
|
|
(word*) SQUARES#37 ← phi( init_dist_screen::@4/(word*) SQUARES#18 )
|
|
(word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 )
|
|
(word~) init_dist_screen::$9 ← (word) sqr::return#5
|
|
(word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9
|
|
(byte) init_dist_screen::x#0 ← (number) 0
|
|
(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#42 ← phi( init_dist_screen::@16/(byte*) heap_head#43 init_dist_screen::@18/(byte*) heap_head#36 )
|
|
(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#26 ← phi( init_dist_screen::@16/(byte) NUM_SQUARES#28 init_dist_screen::@18/(byte) NUM_SQUARES#20 )
|
|
(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#35 ← phi( init_dist_screen::@16/(word*) SQUARES#37 init_dist_screen::@18/(word*) SQUARES#31 )
|
|
(byte) init_dist_screen::x#2 ← phi( init_dist_screen::@16/(byte) init_dist_screen::x#0 init_dist_screen::@18/(byte) init_dist_screen::x#1 )
|
|
(number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (number) 2
|
|
(byte) init_dist_screen::x2#0 ← (number~) init_dist_screen::$10
|
|
(bool~) init_dist_screen::$11 ← (byte) init_dist_screen::x2#0 >= (number) $27
|
|
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#40 ← phi( init_dist_screen::@5/(byte*) heap_head#42 )
|
|
(byte) init_dist_screen::y#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 )
|
|
(byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 )
|
|
(byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 )
|
|
(byte) init_dist_screen::x#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
|
|
(byte*) init_dist_screen::screen_topline#6 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#8 )
|
|
(byte) NUM_SQUARES#23 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#26 )
|
|
(word) init_dist_screen::yds#3 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#5 )
|
|
(word*) SQUARES#29 ← phi( init_dist_screen::@5/(word*) SQUARES#35 )
|
|
(byte) init_dist_screen::x2#1 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x2#0 )
|
|
(number~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (number) $27
|
|
(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#41 ← phi( init_dist_screen::@5/(byte*) heap_head#42 )
|
|
(byte) init_dist_screen::y#8 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#9 )
|
|
(byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#7 )
|
|
(byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#8 )
|
|
(byte) init_dist_screen::x#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
|
|
(byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#8 )
|
|
(byte) NUM_SQUARES#24 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#26 )
|
|
(word) init_dist_screen::yds#4 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#5 )
|
|
(word*) SQUARES#30 ← phi( init_dist_screen::@5/(word*) SQUARES#35 )
|
|
(byte) init_dist_screen::x2#2 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x2#0 )
|
|
(number~) init_dist_screen::$12 ← (number) $27 - (byte) init_dist_screen::x2#2
|
|
(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#39 ← phi( init_dist_screen::@6/(byte*) heap_head#40 init_dist_screen::@7/(byte*) heap_head#41 )
|
|
(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 )
|
|
(byte) init_dist_screen::x#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#6 init_dist_screen::@7/(byte) init_dist_screen::x#7 )
|
|
(byte*) init_dist_screen::screen_topline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#7 )
|
|
(byte) NUM_SQUARES#19 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#23 init_dist_screen::@7/(byte) NUM_SQUARES#24 )
|
|
(word) init_dist_screen::yds#2 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#3 init_dist_screen::@7/(word) init_dist_screen::yds#4 )
|
|
(word*) SQUARES#19 ← phi( init_dist_screen::@6/(word*) SQUARES#29 init_dist_screen::@7/(word*) SQUARES#30 )
|
|
(number~) init_dist_screen::$16 ← phi( init_dist_screen::@6/(number~) init_dist_screen::$15 init_dist_screen::@7/(number~) init_dist_screen::$13 )
|
|
(byte) init_dist_screen::xd#0 ← (number~) init_dist_screen::$16
|
|
(byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
|
|
call sqr
|
|
(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#38 ← phi( init_dist_screen::@8/(byte*) heap_head#39 )
|
|
(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 )
|
|
(byte) init_dist_screen::x#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::x#5 )
|
|
(byte*) init_dist_screen::screen_topline#4 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_topline#5 )
|
|
(byte) NUM_SQUARES#13 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#19 )
|
|
(word*) SQUARES#20 ← phi( init_dist_screen::@8/(word*) SQUARES#19 )
|
|
(word) init_dist_screen::yds#1 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#2 )
|
|
(word) sqr::return#6 ← phi( init_dist_screen::@8/(word) sqr::return#3 )
|
|
(word~) init_dist_screen::$17 ← (word) sqr::return#6
|
|
(word) init_dist_screen::xds#0 ← (word~) init_dist_screen::$17
|
|
(word~) init_dist_screen::$18 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#1
|
|
(word) init_dist_screen::ds#0 ← (word~) init_dist_screen::$18
|
|
(word) sqrt::val#0 ← (word) init_dist_screen::ds#0
|
|
call sqrt
|
|
(byte) sqrt::return#2 ← (byte) sqrt::return#1
|
|
to:init_dist_screen::@18
|
|
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#31 ← phi( init_dist_screen::@17/(word*) SQUARES#20 )
|
|
(byte*) heap_head#36 ← phi( init_dist_screen::@17/(byte*) heap_head#38 )
|
|
(byte) NUM_SQUARES#20 ← 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 )
|
|
(byte*) init_dist_screen::screen_bottomline#2 ← phi( init_dist_screen::@17/(byte*) init_dist_screen::screen_bottomline#4 )
|
|
(byte) init_dist_screen::x#3 ← phi( init_dist_screen::@17/(byte) init_dist_screen::x#4 )
|
|
(byte*) init_dist_screen::screen_topline#2 ← phi( init_dist_screen::@17/(byte*) init_dist_screen::screen_topline#4 )
|
|
(byte) sqrt::return#4 ← phi( init_dist_screen::@17/(byte) sqrt::return#2 )
|
|
(byte~) init_dist_screen::$19 ← (byte) sqrt::return#4
|
|
(byte) init_dist_screen::d#0 ← (byte~) init_dist_screen::$19
|
|
*((byte*) init_dist_screen::screen_topline#2 + (byte) init_dist_screen::x#3) ← (byte) init_dist_screen::d#0
|
|
*((byte*) init_dist_screen::screen_bottomline#2 + (byte) init_dist_screen::x#3) ← (byte) init_dist_screen::d#0
|
|
*((byte*) init_dist_screen::screen_topline#2 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
|
|
*((byte*) init_dist_screen::screen_bottomline#2 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
|
|
(byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#3
|
|
(byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
|
|
(bool~) init_dist_screen::$20 ← (byte) init_dist_screen::x#1 <= (number) $13
|
|
if((bool~) init_dist_screen::$20) goto init_dist_screen::@5
|
|
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#31 )
|
|
(byte*) heap_head#32 ← phi( init_dist_screen::@18/(byte*) heap_head#36 )
|
|
(byte) NUM_SQUARES#16 ← phi( init_dist_screen::@18/(byte) NUM_SQUARES#20 )
|
|
(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 )
|
|
(byte*) init_dist_screen::screen_topline#3 ← phi( init_dist_screen::@18/(byte*) init_dist_screen::screen_topline#2 )
|
|
(byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#3 + (number) $28
|
|
(byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#3 - (number) $28
|
|
(byte) init_dist_screen::y#1 ← (byte) init_dist_screen::y#3 + rangenext(0,$c)
|
|
(bool~) init_dist_screen::$21 ← (byte) init_dist_screen::y#1 != rangelast(0,$c)
|
|
if((bool~) init_dist_screen::$21) goto init_dist_screen::@1
|
|
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#32 )
|
|
(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
|
|
(word*) SQUARES#6 ← (word*) SQUARES#15
|
|
return
|
|
to:@return
|
|
@12: scope:[] from @15
|
|
(word*) SQUARES#25 ← phi( @15/(word*) SQUARES#32 )
|
|
(byte*) heap_head#33 ← phi( @15/(byte*) heap_head#9 )
|
|
(byte) NUM_SQUARES#17 ← phi( @15/(byte) NUM_SQUARES#21 )
|
|
call main
|
|
to:@16
|
|
@16: scope:[] from @12
|
|
(word*) SQUARES#16 ← phi( @12/(word*) SQUARES#4 )
|
|
(byte*) heap_head#24 ← phi( @12/(byte*) heap_head#8 )
|
|
(byte) NUM_SQUARES#12 ← phi( @12/(byte) NUM_SQUARES#2 )
|
|
(byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12
|
|
(byte*) heap_head#12 ← (byte*) heap_head#24
|
|
(word*) SQUARES#7 ← (word*) SQUARES#16
|
|
to:@end
|
|
@end: scope:[] from @16
|
|
|
|
SYMBOL TABLE SSA
|
|
(void*~) $0
|
|
(void*~) $1
|
|
(byte~) $2
|
|
(void*~) $3
|
|
(label) @12
|
|
(label) @13
|
|
(label) @14
|
|
(label) @15
|
|
(label) @16
|
|
(label) @3
|
|
(label) @6
|
|
(label) @8
|
|
(label) @9
|
|
(label) @begin
|
|
(label) @end
|
|
(byte[]) BUCKET_SIZES
|
|
(byte[]) BUCKET_SIZES#0
|
|
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
|
|
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0
|
|
(byte) CORDIC_ITERATIONS_16
|
|
(byte) CORDIC_ITERATIONS_16#0
|
|
(byte*) HEAP_TOP
|
|
(byte*) HEAP_TOP#0
|
|
(byte) NUM_BUCKETS
|
|
(byte) NUM_BUCKETS#0
|
|
(byte) NUM_SQUARES
|
|
(byte) NUM_SQUARES#0
|
|
(byte) NUM_SQUARES#1
|
|
(byte) NUM_SQUARES#10
|
|
(byte) NUM_SQUARES#11
|
|
(byte) NUM_SQUARES#12
|
|
(byte) NUM_SQUARES#13
|
|
(byte) NUM_SQUARES#14
|
|
(byte) NUM_SQUARES#15
|
|
(byte) NUM_SQUARES#16
|
|
(byte) NUM_SQUARES#17
|
|
(byte) NUM_SQUARES#18
|
|
(byte) NUM_SQUARES#19
|
|
(byte) NUM_SQUARES#2
|
|
(byte) NUM_SQUARES#20
|
|
(byte) NUM_SQUARES#21
|
|
(byte) NUM_SQUARES#22
|
|
(byte) NUM_SQUARES#23
|
|
(byte) NUM_SQUARES#24
|
|
(byte) NUM_SQUARES#25
|
|
(byte) NUM_SQUARES#26
|
|
(byte) NUM_SQUARES#27
|
|
(byte) NUM_SQUARES#28
|
|
(byte) NUM_SQUARES#29
|
|
(byte) NUM_SQUARES#3
|
|
(byte) NUM_SQUARES#30
|
|
(byte) NUM_SQUARES#31
|
|
(byte) NUM_SQUARES#32
|
|
(byte) NUM_SQUARES#33
|
|
(byte) NUM_SQUARES#34
|
|
(byte) NUM_SQUARES#35
|
|
(byte) NUM_SQUARES#4
|
|
(byte) NUM_SQUARES#5
|
|
(byte) NUM_SQUARES#6
|
|
(byte) NUM_SQUARES#7
|
|
(byte) NUM_SQUARES#8
|
|
(byte) NUM_SQUARES#9
|
|
(byte*) SCREEN_ANGLE
|
|
(byte*) SCREEN_ANGLE#0
|
|
(byte*) SCREEN_DIST
|
|
(byte*) SCREEN_DIST#0
|
|
(const byte) SIZEOF_BYTE = (byte) 1
|
|
(const byte) SIZEOF_WORD = (byte) 2
|
|
(word*) SQUARES
|
|
(word*) SQUARES#0
|
|
(word*) SQUARES#1
|
|
(word*) SQUARES#10
|
|
(word*) SQUARES#11
|
|
(word*) SQUARES#12
|
|
(word*) SQUARES#13
|
|
(word*) SQUARES#14
|
|
(word*) SQUARES#15
|
|
(word*) SQUARES#16
|
|
(word*) SQUARES#17
|
|
(word*) SQUARES#18
|
|
(word*) SQUARES#19
|
|
(word*) SQUARES#2
|
|
(word*) SQUARES#20
|
|
(word*) SQUARES#21
|
|
(word*) SQUARES#22
|
|
(word*) SQUARES#23
|
|
(word*) SQUARES#24
|
|
(word*) SQUARES#25
|
|
(word*) SQUARES#26
|
|
(word*) SQUARES#27
|
|
(word*) SQUARES#28
|
|
(word*) SQUARES#29
|
|
(word*) SQUARES#3
|
|
(word*) SQUARES#30
|
|
(word*) SQUARES#31
|
|
(word*) SQUARES#32
|
|
(word*) SQUARES#33
|
|
(word*) SQUARES#34
|
|
(word*) SQUARES#35
|
|
(word*) SQUARES#36
|
|
(word*) SQUARES#37
|
|
(word*) SQUARES#38
|
|
(word*) SQUARES#39
|
|
(word*) SQUARES#4
|
|
(word*) SQUARES#40
|
|
(word*) SQUARES#5
|
|
(word*) SQUARES#6
|
|
(word*) SQUARES#7
|
|
(word*) SQUARES#8
|
|
(word*) SQUARES#9
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
(bool~) atan2_16::$0
|
|
(signed word~) atan2_16::$1
|
|
(bool~) atan2_16::$10
|
|
(bool~) atan2_16::$11
|
|
(number~) atan2_16::$12
|
|
(bool~) atan2_16::$13
|
|
(bool~) atan2_16::$14
|
|
(word~) atan2_16::$15
|
|
(number~) atan2_16::$16
|
|
(bool~) atan2_16::$17
|
|
(bool~) atan2_16::$18
|
|
(bool~) atan2_16::$19
|
|
(signed word~) atan2_16::$2
|
|
(bool~) atan2_16::$20
|
|
(bool~) atan2_16::$21
|
|
(bool~) atan2_16::$22
|
|
(byte~) atan2_16::$23
|
|
(byte~) atan2_16::$24
|
|
(bool~) atan2_16::$25
|
|
(signed word~) atan2_16::$3
|
|
(signed word~) atan2_16::$4
|
|
(bool~) atan2_16::$5
|
|
(signed word~) atan2_16::$6
|
|
(signed word~) atan2_16::$7
|
|
(signed word~) atan2_16::$8
|
|
(signed word~) atan2_16::$9
|
|
(label) atan2_16::@1
|
|
(label) atan2_16::@13
|
|
(label) atan2_16::@15
|
|
(label) atan2_16::@16
|
|
(label) atan2_16::@17
|
|
(label) atan2_16::@18
|
|
(label) atan2_16::@19
|
|
(label) atan2_16::@2
|
|
(label) atan2_16::@20
|
|
(label) atan2_16::@24
|
|
(label) atan2_16::@25
|
|
(label) atan2_16::@26
|
|
(label) atan2_16::@27
|
|
(label) atan2_16::@3
|
|
(label) atan2_16::@30
|
|
(label) atan2_16::@33
|
|
(label) atan2_16::@4
|
|
(label) atan2_16::@5
|
|
(label) atan2_16::@6
|
|
(label) atan2_16::@7
|
|
(label) atan2_16::@8
|
|
(label) atan2_16::@return
|
|
(word) atan2_16::angle
|
|
(word) atan2_16::angle#0
|
|
(word) atan2_16::angle#1
|
|
(word) atan2_16::angle#10
|
|
(word) atan2_16::angle#11
|
|
(word) atan2_16::angle#12
|
|
(word) atan2_16::angle#13
|
|
(word) atan2_16::angle#14
|
|
(word) atan2_16::angle#15
|
|
(word) atan2_16::angle#16
|
|
(word) atan2_16::angle#17
|
|
(word) atan2_16::angle#18
|
|
(word) atan2_16::angle#19
|
|
(word) atan2_16::angle#2
|
|
(word) atan2_16::angle#20
|
|
(word) atan2_16::angle#3
|
|
(word) atan2_16::angle#4
|
|
(word) atan2_16::angle#5
|
|
(word) atan2_16::angle#6
|
|
(word) atan2_16::angle#7
|
|
(word) atan2_16::angle#8
|
|
(word) atan2_16::angle#9
|
|
(byte) atan2_16::i
|
|
(byte) atan2_16::i#0
|
|
(byte) atan2_16::i#1
|
|
(byte) atan2_16::i#10
|
|
(byte) atan2_16::i#11
|
|
(byte) atan2_16::i#2
|
|
(byte) atan2_16::i#3
|
|
(byte) atan2_16::i#4
|
|
(byte) atan2_16::i#5
|
|
(byte) atan2_16::i#6
|
|
(byte) atan2_16::i#7
|
|
(byte) atan2_16::i#8
|
|
(byte) atan2_16::i#9
|
|
(word) atan2_16::return
|
|
(word) atan2_16::return#0
|
|
(word) atan2_16::return#1
|
|
(word) atan2_16::return#2
|
|
(word) atan2_16::return#3
|
|
(word) atan2_16::return#4
|
|
(byte) atan2_16::shift
|
|
(byte) atan2_16::shift#0
|
|
(byte) atan2_16::shift#1
|
|
(byte) atan2_16::shift#2
|
|
(byte) atan2_16::shift#3
|
|
(byte) atan2_16::shift#4
|
|
(signed word) atan2_16::x
|
|
(signed word) atan2_16::x#0
|
|
(signed word) atan2_16::x#1
|
|
(signed word) atan2_16::x#10
|
|
(signed word) atan2_16::x#11
|
|
(signed word) atan2_16::x#12
|
|
(signed word) atan2_16::x#13
|
|
(signed word) atan2_16::x#14
|
|
(signed word) atan2_16::x#15
|
|
(signed word) atan2_16::x#16
|
|
(signed word) atan2_16::x#17
|
|
(signed word) atan2_16::x#18
|
|
(signed word) atan2_16::x#2
|
|
(signed word) atan2_16::x#3
|
|
(signed word) atan2_16::x#4
|
|
(signed word) atan2_16::x#5
|
|
(signed word) atan2_16::x#6
|
|
(signed word) atan2_16::x#7
|
|
(signed word) atan2_16::x#8
|
|
(signed word) atan2_16::x#9
|
|
(signed word) atan2_16::xd
|
|
(signed word) atan2_16::xd#0
|
|
(signed word) atan2_16::xd#1
|
|
(signed word) atan2_16::xd#2
|
|
(signed word) atan2_16::xd#3
|
|
(signed word) atan2_16::xd#4
|
|
(signed word) atan2_16::xd#5
|
|
(signed word) atan2_16::xd#6
|
|
(signed word) atan2_16::xd#7
|
|
(signed word) atan2_16::xd#8
|
|
(signed word) atan2_16::xd#9
|
|
(signed word) atan2_16::xi
|
|
(signed word) atan2_16::xi#0
|
|
(signed word) atan2_16::xi#1
|
|
(signed word) atan2_16::xi#10
|
|
(signed word) atan2_16::xi#11
|
|
(signed word) atan2_16::xi#12
|
|
(signed word) atan2_16::xi#2
|
|
(signed word) atan2_16::xi#3
|
|
(signed word) atan2_16::xi#4
|
|
(signed word) atan2_16::xi#5
|
|
(signed word) atan2_16::xi#6
|
|
(signed word) atan2_16::xi#7
|
|
(signed word) atan2_16::xi#8
|
|
(signed word) atan2_16::xi#9
|
|
(signed word) atan2_16::y
|
|
(signed word) atan2_16::y#0
|
|
(signed word) atan2_16::y#1
|
|
(signed word) atan2_16::y#10
|
|
(signed word) atan2_16::y#11
|
|
(signed word) atan2_16::y#12
|
|
(signed word) atan2_16::y#13
|
|
(signed word) atan2_16::y#14
|
|
(signed word) atan2_16::y#15
|
|
(signed word) atan2_16::y#16
|
|
(signed word) atan2_16::y#17
|
|
(signed word) atan2_16::y#18
|
|
(signed word) atan2_16::y#19
|
|
(signed word) atan2_16::y#2
|
|
(signed word) atan2_16::y#20
|
|
(signed word) atan2_16::y#3
|
|
(signed word) atan2_16::y#4
|
|
(signed word) atan2_16::y#5
|
|
(signed word) atan2_16::y#6
|
|
(signed word) atan2_16::y#7
|
|
(signed word) atan2_16::y#8
|
|
(signed word) atan2_16::y#9
|
|
(signed word) atan2_16::yd
|
|
(signed word) atan2_16::yd#0
|
|
(signed word) atan2_16::yd#1
|
|
(signed word) atan2_16::yd#2
|
|
(signed word) atan2_16::yd#3
|
|
(signed word) atan2_16::yd#4
|
|
(signed word) atan2_16::yd#5
|
|
(signed word) atan2_16::yd#6
|
|
(signed word) atan2_16::yd#7
|
|
(signed word) atan2_16::yd#8
|
|
(signed word) atan2_16::yd#9
|
|
(signed word) atan2_16::yi
|
|
(signed word) atan2_16::yi#0
|
|
(signed word) atan2_16::yi#1
|
|
(signed word) atan2_16::yi#10
|
|
(signed word) atan2_16::yi#11
|
|
(signed word) atan2_16::yi#12
|
|
(signed word) atan2_16::yi#13
|
|
(signed word) atan2_16::yi#14
|
|
(signed word) atan2_16::yi#15
|
|
(signed word) atan2_16::yi#2
|
|
(signed word) atan2_16::yi#3
|
|
(signed word) atan2_16::yi#4
|
|
(signed word) atan2_16::yi#5
|
|
(signed word) atan2_16::yi#6
|
|
(signed word) atan2_16::yi#7
|
|
(signed word) atan2_16::yi#8
|
|
(signed word) atan2_16::yi#9
|
|
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
|
|
(bool~) bsearch16u::$0
|
|
(word*~) bsearch16u::$1
|
|
(signed word~) bsearch16u::$10
|
|
(bool~) bsearch16u::$11
|
|
(bool~) bsearch16u::$12
|
|
(bool~) bsearch16u::$13
|
|
(bool~) bsearch16u::$14
|
|
(word*~) bsearch16u::$15
|
|
(byte~) bsearch16u::$16
|
|
(number~) bsearch16u::$17
|
|
(number~) bsearch16u::$18
|
|
(word*~) bsearch16u::$2
|
|
(word*~) bsearch16u::$3
|
|
(word*~) bsearch16u::$4
|
|
(bool~) bsearch16u::$5
|
|
(byte~) bsearch16u::$6
|
|
(word*~) bsearch16u::$7
|
|
(signed word~) bsearch16u::$8
|
|
(signed word~) bsearch16u::$9
|
|
(label) bsearch16u::@1
|
|
(label) bsearch16u::@10
|
|
(label) bsearch16u::@13
|
|
(label) bsearch16u::@15
|
|
(label) bsearch16u::@2
|
|
(label) bsearch16u::@3
|
|
(label) bsearch16u::@6
|
|
(label) bsearch16u::@7
|
|
(label) bsearch16u::@8
|
|
(label) bsearch16u::@9
|
|
(label) bsearch16u::@return
|
|
(word*) bsearch16u::items
|
|
(word*) bsearch16u::items#0
|
|
(word*) bsearch16u::items#1
|
|
(word*) bsearch16u::items#2
|
|
(word*) bsearch16u::items#3
|
|
(word*) bsearch16u::items#4
|
|
(word*) bsearch16u::items#5
|
|
(word*) bsearch16u::items#6
|
|
(word*) bsearch16u::items#7
|
|
(word*) bsearch16u::items#8
|
|
(word*) bsearch16u::items#9
|
|
(word) bsearch16u::key
|
|
(word) bsearch16u::key#0
|
|
(word) bsearch16u::key#1
|
|
(word) bsearch16u::key#2
|
|
(word) bsearch16u::key#3
|
|
(word) bsearch16u::key#4
|
|
(word) bsearch16u::key#5
|
|
(word) bsearch16u::key#6
|
|
(word) bsearch16u::key#7
|
|
(byte) bsearch16u::num
|
|
(byte) bsearch16u::num#0
|
|
(byte) bsearch16u::num#1
|
|
(byte) bsearch16u::num#2
|
|
(byte) bsearch16u::num#3
|
|
(byte) bsearch16u::num#4
|
|
(byte) bsearch16u::num#5
|
|
(byte) bsearch16u::num#6
|
|
(byte) bsearch16u::num#7
|
|
(byte) bsearch16u::num#8
|
|
(word*) bsearch16u::pivot
|
|
(word*) bsearch16u::pivot#0
|
|
(word*) bsearch16u::pivot#1
|
|
(word*) bsearch16u::pivot#2
|
|
(word*) bsearch16u::pivot#3
|
|
(signed word) bsearch16u::result
|
|
(signed word) bsearch16u::result#0
|
|
(signed word) bsearch16u::result#1
|
|
(word*) bsearch16u::return
|
|
(word*) bsearch16u::return#0
|
|
(word*) bsearch16u::return#1
|
|
(word*) bsearch16u::return#2
|
|
(word*) bsearch16u::return#3
|
|
(word*) bsearch16u::return#4
|
|
(word*) bsearch16u::return#5
|
|
(byte*) heap_head
|
|
(byte*) heap_head#0
|
|
(byte*) heap_head#1
|
|
(byte*) heap_head#10
|
|
(byte*) heap_head#11
|
|
(byte*) heap_head#12
|
|
(byte*) heap_head#13
|
|
(byte*) heap_head#14
|
|
(byte*) heap_head#15
|
|
(byte*) heap_head#16
|
|
(byte*) heap_head#17
|
|
(byte*) heap_head#18
|
|
(byte*) heap_head#19
|
|
(byte*) heap_head#2
|
|
(byte*) heap_head#20
|
|
(byte*) heap_head#21
|
|
(byte*) heap_head#22
|
|
(byte*) heap_head#23
|
|
(byte*) heap_head#24
|
|
(byte*) heap_head#25
|
|
(byte*) heap_head#26
|
|
(byte*) heap_head#27
|
|
(byte*) heap_head#28
|
|
(byte*) heap_head#29
|
|
(byte*) heap_head#3
|
|
(byte*) heap_head#30
|
|
(byte*) heap_head#31
|
|
(byte*) heap_head#32
|
|
(byte*) heap_head#33
|
|
(byte*) heap_head#34
|
|
(byte*) heap_head#35
|
|
(byte*) heap_head#36
|
|
(byte*) heap_head#37
|
|
(byte*) heap_head#38
|
|
(byte*) heap_head#39
|
|
(byte*) heap_head#4
|
|
(byte*) heap_head#40
|
|
(byte*) heap_head#41
|
|
(byte*) heap_head#42
|
|
(byte*) heap_head#43
|
|
(byte*) heap_head#44
|
|
(byte*) heap_head#45
|
|
(byte*) heap_head#46
|
|
(byte*) heap_head#47
|
|
(byte*) heap_head#5
|
|
(byte*) heap_head#6
|
|
(byte*) heap_head#7
|
|
(byte*) heap_head#8
|
|
(byte*) heap_head#9
|
|
(void()) init_angle_screen((byte*) init_angle_screen::screen)
|
|
(byte*~) init_angle_screen::$0
|
|
(byte*~) init_angle_screen::$1
|
|
(number~) init_angle_screen::$10
|
|
(number~) init_angle_screen::$11
|
|
(byte~) init_angle_screen::$12
|
|
(number~) init_angle_screen::$13
|
|
(number~) init_angle_screen::$14
|
|
(bool~) init_angle_screen::$15
|
|
(bool~) init_angle_screen::$16
|
|
(number~) init_angle_screen::$2
|
|
(number~) init_angle_screen::$3
|
|
(word~) init_angle_screen::$4
|
|
(signed word~) init_angle_screen::$5
|
|
(number~) init_angle_screen::$6
|
|
(word~) init_angle_screen::$7
|
|
(signed word~) init_angle_screen::$8
|
|
(word~) init_angle_screen::$9
|
|
(label) init_angle_screen::@1
|
|
(label) init_angle_screen::@2
|
|
(label) init_angle_screen::@3
|
|
(label) init_angle_screen::@5
|
|
(label) init_angle_screen::@return
|
|
(byte) init_angle_screen::ang_w
|
|
(byte) init_angle_screen::ang_w#0
|
|
(word) init_angle_screen::angle_w
|
|
(word) init_angle_screen::angle_w#0
|
|
(byte*) init_angle_screen::screen
|
|
(byte*) init_angle_screen::screen#0
|
|
(byte*) init_angle_screen::screen#1
|
|
(byte*) init_angle_screen::screen_bottomline
|
|
(byte*) init_angle_screen::screen_bottomline#0
|
|
(byte*) init_angle_screen::screen_bottomline#1
|
|
(byte*) init_angle_screen::screen_bottomline#2
|
|
(byte*) init_angle_screen::screen_bottomline#3
|
|
(byte*) init_angle_screen::screen_bottomline#4
|
|
(byte*) init_angle_screen::screen_bottomline#5
|
|
(byte*) init_angle_screen::screen_topline
|
|
(byte*) init_angle_screen::screen_topline#0
|
|
(byte*) init_angle_screen::screen_topline#1
|
|
(byte*) init_angle_screen::screen_topline#2
|
|
(byte*) init_angle_screen::screen_topline#3
|
|
(byte*) init_angle_screen::screen_topline#4
|
|
(byte*) init_angle_screen::screen_topline#5
|
|
(byte) init_angle_screen::x
|
|
(byte) init_angle_screen::x#0
|
|
(byte) init_angle_screen::x#1
|
|
(byte) init_angle_screen::x#2
|
|
(byte) init_angle_screen::x#3
|
|
(byte) init_angle_screen::xb
|
|
(byte) init_angle_screen::xb#0
|
|
(byte) init_angle_screen::xb#1
|
|
(byte) init_angle_screen::xb#2
|
|
(byte) init_angle_screen::xb#3
|
|
(signed word) init_angle_screen::xw
|
|
(signed word) init_angle_screen::xw#0
|
|
(byte) init_angle_screen::y
|
|
(byte) init_angle_screen::y#0
|
|
(byte) init_angle_screen::y#1
|
|
(byte) init_angle_screen::y#2
|
|
(byte) init_angle_screen::y#3
|
|
(byte) init_angle_screen::y#4
|
|
(byte) init_angle_screen::y#5
|
|
(signed word) init_angle_screen::yw
|
|
(signed word) init_angle_screen::yw#0
|
|
(void()) init_buckets()
|
|
(number~) init_buckets::$0
|
|
(bool~) init_buckets::$1
|
|
(bool~) init_buckets::$2
|
|
(label) init_buckets::@1
|
|
(label) init_buckets::@2
|
|
(label) init_buckets::@3
|
|
(label) init_buckets::@return
|
|
(byte*) init_buckets::dist
|
|
(byte*) init_buckets::dist#0
|
|
(byte*) init_buckets::dist#1
|
|
(byte*) init_buckets::dist#2
|
|
(byte) init_buckets::i
|
|
(byte) init_buckets::i#0
|
|
(byte) init_buckets::i#1
|
|
(byte) init_buckets::i#2
|
|
(word) init_buckets::i1
|
|
(word) init_buckets::i1#0
|
|
(word) init_buckets::i1#1
|
|
(word) init_buckets::i1#2
|
|
(void()) init_dist_screen((byte*) init_dist_screen::screen)
|
|
(byte*~) init_dist_screen::$1
|
|
(number~) init_dist_screen::$10
|
|
(bool~) init_dist_screen::$11
|
|
(number~) init_dist_screen::$12
|
|
(number~) init_dist_screen::$13
|
|
(number~) init_dist_screen::$14
|
|
(number~) init_dist_screen::$15
|
|
(number~) init_dist_screen::$16
|
|
(word~) init_dist_screen::$17
|
|
(word~) init_dist_screen::$18
|
|
(byte~) init_dist_screen::$19
|
|
(number~) init_dist_screen::$2
|
|
(bool~) init_dist_screen::$20
|
|
(bool~) init_dist_screen::$21
|
|
(bool~) init_dist_screen::$3
|
|
(number~) init_dist_screen::$4
|
|
(number~) init_dist_screen::$5
|
|
(number~) init_dist_screen::$6
|
|
(number~) init_dist_screen::$7
|
|
(number~) init_dist_screen::$8
|
|
(word~) init_dist_screen::$9
|
|
(label) init_dist_screen::@1
|
|
(label) init_dist_screen::@11
|
|
(label) init_dist_screen::@15
|
|
(label) init_dist_screen::@16
|
|
(label) init_dist_screen::@17
|
|
(label) init_dist_screen::@18
|
|
(label) init_dist_screen::@2
|
|
(label) init_dist_screen::@3
|
|
(label) init_dist_screen::@4
|
|
(label) init_dist_screen::@5
|
|
(label) init_dist_screen::@6
|
|
(label) init_dist_screen::@7
|
|
(label) init_dist_screen::@8
|
|
(label) init_dist_screen::@return
|
|
(byte) init_dist_screen::d
|
|
(byte) init_dist_screen::d#0
|
|
(word) init_dist_screen::ds
|
|
(word) init_dist_screen::ds#0
|
|
(byte*) init_dist_screen::screen
|
|
(byte*) init_dist_screen::screen#0
|
|
(byte*) init_dist_screen::screen#1
|
|
(byte*) init_dist_screen::screen#2
|
|
(byte*) init_dist_screen::screen_bottomline
|
|
(byte*) init_dist_screen::screen_bottomline#0
|
|
(byte*) init_dist_screen::screen_bottomline#1
|
|
(byte*) init_dist_screen::screen_bottomline#10
|
|
(byte*) init_dist_screen::screen_bottomline#11
|
|
(byte*) init_dist_screen::screen_bottomline#12
|
|
(byte*) init_dist_screen::screen_bottomline#13
|
|
(byte*) init_dist_screen::screen_bottomline#2
|
|
(byte*) init_dist_screen::screen_bottomline#3
|
|
(byte*) init_dist_screen::screen_bottomline#4
|
|
(byte*) init_dist_screen::screen_bottomline#5
|
|
(byte*) init_dist_screen::screen_bottomline#6
|
|
(byte*) init_dist_screen::screen_bottomline#7
|
|
(byte*) init_dist_screen::screen_bottomline#8
|
|
(byte*) init_dist_screen::screen_bottomline#9
|
|
(byte*) init_dist_screen::screen_topline
|
|
(byte*) init_dist_screen::screen_topline#0
|
|
(byte*) init_dist_screen::screen_topline#1
|
|
(byte*) init_dist_screen::screen_topline#10
|
|
(byte*) init_dist_screen::screen_topline#11
|
|
(byte*) init_dist_screen::screen_topline#12
|
|
(byte*) init_dist_screen::screen_topline#13
|
|
(byte*) init_dist_screen::screen_topline#2
|
|
(byte*) init_dist_screen::screen_topline#3
|
|
(byte*) init_dist_screen::screen_topline#4
|
|
(byte*) init_dist_screen::screen_topline#5
|
|
(byte*) init_dist_screen::screen_topline#6
|
|
(byte*) init_dist_screen::screen_topline#7
|
|
(byte*) init_dist_screen::screen_topline#8
|
|
(byte*) init_dist_screen::screen_topline#9
|
|
(byte) init_dist_screen::x
|
|
(byte) init_dist_screen::x#0
|
|
(byte) init_dist_screen::x#1
|
|
(byte) init_dist_screen::x#2
|
|
(byte) init_dist_screen::x#3
|
|
(byte) init_dist_screen::x#4
|
|
(byte) init_dist_screen::x#5
|
|
(byte) init_dist_screen::x#6
|
|
(byte) init_dist_screen::x#7
|
|
(byte) init_dist_screen::x2
|
|
(byte) init_dist_screen::x2#0
|
|
(byte) init_dist_screen::x2#1
|
|
(byte) init_dist_screen::x2#2
|
|
(byte) init_dist_screen::xb
|
|
(byte) init_dist_screen::xb#0
|
|
(byte) init_dist_screen::xb#1
|
|
(byte) init_dist_screen::xb#2
|
|
(byte) init_dist_screen::xb#3
|
|
(byte) init_dist_screen::xb#4
|
|
(byte) init_dist_screen::xb#5
|
|
(byte) init_dist_screen::xb#6
|
|
(byte) init_dist_screen::xb#7
|
|
(byte) init_dist_screen::xd
|
|
(byte) init_dist_screen::xd#0
|
|
(word) init_dist_screen::xds
|
|
(word) init_dist_screen::xds#0
|
|
(byte) init_dist_screen::y
|
|
(byte) init_dist_screen::y#0
|
|
(byte) init_dist_screen::y#1
|
|
(byte) init_dist_screen::y#10
|
|
(byte) init_dist_screen::y#11
|
|
(byte) init_dist_screen::y#12
|
|
(byte) init_dist_screen::y#13
|
|
(byte) init_dist_screen::y#2
|
|
(byte) init_dist_screen::y#3
|
|
(byte) init_dist_screen::y#4
|
|
(byte) init_dist_screen::y#5
|
|
(byte) init_dist_screen::y#6
|
|
(byte) init_dist_screen::y#7
|
|
(byte) init_dist_screen::y#8
|
|
(byte) init_dist_screen::y#9
|
|
(byte) init_dist_screen::y2
|
|
(byte) init_dist_screen::y2#0
|
|
(byte) init_dist_screen::y2#1
|
|
(byte) init_dist_screen::y2#2
|
|
(byte) init_dist_screen::yd
|
|
(byte) init_dist_screen::yd#0
|
|
(word) init_dist_screen::yds
|
|
(word) init_dist_screen::yds#0
|
|
(word) init_dist_screen::yds#1
|
|
(word) init_dist_screen::yds#2
|
|
(word) init_dist_screen::yds#3
|
|
(word) init_dist_screen::yds#4
|
|
(word) init_dist_screen::yds#5
|
|
(word) init_dist_screen::yds#6
|
|
(void()) init_squares()
|
|
(byte~) init_squares::$0
|
|
(void*~) init_squares::$1
|
|
(number~) init_squares::$2
|
|
(number~) init_squares::$3
|
|
(number~) init_squares::$4
|
|
(bool~) init_squares::$5
|
|
(label) init_squares::@1
|
|
(label) init_squares::@3
|
|
(label) init_squares::@return
|
|
(byte) init_squares::i
|
|
(byte) init_squares::i#0
|
|
(byte) init_squares::i#1
|
|
(byte) init_squares::i#2
|
|
(word) init_squares::sqr
|
|
(word) init_squares::sqr#0
|
|
(word) init_squares::sqr#1
|
|
(word) init_squares::sqr#2
|
|
(word*) init_squares::squares
|
|
(word*) init_squares::squares#0
|
|
(word*) init_squares::squares#1
|
|
(word*) init_squares::squares#2
|
|
(void()) main()
|
|
(label) main::@1
|
|
(label) main::@2
|
|
(label) main::@3
|
|
(label) main::@return
|
|
(void*()) malloc((word) malloc::size)
|
|
(byte*~) malloc::$0
|
|
(label) malloc::@return
|
|
(byte*) malloc::mem
|
|
(byte*) malloc::mem#0
|
|
(void*) malloc::return
|
|
(void*) malloc::return#0
|
|
(void*) malloc::return#1
|
|
(void*) malloc::return#10
|
|
(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()) sqr((byte) sqr::val)
|
|
(byte~) sqr::$0
|
|
(label) sqr::@return
|
|
(word) sqr::return
|
|
(word) sqr::return#0
|
|
(word) sqr::return#1
|
|
(word) sqr::return#2
|
|
(word) sqr::return#3
|
|
(word) sqr::return#4
|
|
(word) sqr::return#5
|
|
(word) sqr::return#6
|
|
(byte) sqr::val
|
|
(byte) sqr::val#0
|
|
(byte) sqr::val#1
|
|
(byte) sqr::val#2
|
|
(byte()) sqrt((word) sqrt::val)
|
|
(word*~) sqrt::$0
|
|
(word~) sqrt::$1
|
|
(byte~) sqrt::$2
|
|
(word~) sqrt::$3
|
|
(label) sqrt::@2
|
|
(label) sqrt::@return
|
|
(word*) sqrt::found
|
|
(word*) sqrt::found#0
|
|
(byte) sqrt::return
|
|
(byte) sqrt::return#0
|
|
(byte) sqrt::return#1
|
|
(byte) sqrt::return#2
|
|
(byte) sqrt::return#3
|
|
(byte) sqrt::return#4
|
|
(byte) sqrt::sq
|
|
(byte) sqrt::sq#0
|
|
(word) sqrt::val
|
|
(word) sqrt::val#0
|
|
(word) sqrt::val#1
|
|
|
|
Fixing inline constructor with init_angle_screen::$17 ← (byte)init_angle_screen::$3 w= (byte)0
|
|
Fixing inline constructor with init_angle_screen::$18 ← (byte)init_angle_screen::$6 w= (byte)0
|
|
Successful SSA optimization Pass2FixInlineConstructorsNew
|
|
Adding number conversion cast (unumber) 0 in (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
|
|
Adding number conversion cast (unumber) 1 in (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
|
|
Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0
|
|
Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (number) 0
|
|
Adding number conversion cast (unumber) 1 in (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
|
|
Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$17 ← (number) 1 * (const byte) SIZEOF_WORD
|
|
Adding number conversion cast (unumber) bsearch16u::$17 in (number~) bsearch16u::$17 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD
|
|
Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD
|
|
Adding number conversion cast (unumber) bsearch16u::$18 in (number~) bsearch16u::$18 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD
|
|
Adding number conversion cast (unumber) $ff in (byte) NUM_SQUARES#0 ← (number) $ff
|
|
Adding number conversion cast (unumber) 0 in (word) init_squares::sqr#0 ← (number) 0
|
|
Adding number conversion cast (unumber) 1 in (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1
|
|
Adding number conversion cast (unumber) init_squares::$2 in (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (unumber)(number) 1
|
|
Adding number conversion cast (unumber) 2 in (number~) init_squares::$3 ← (byte) init_squares::i#2 * (number) 2
|
|
Adding number conversion cast (unumber) init_squares::$3 in (number~) init_squares::$3 ← (byte) init_squares::i#2 * (unumber)(number) 2
|
|
Adding number conversion cast (unumber) 1 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (number) 1
|
|
Adding number conversion cast (unumber) init_squares::$4 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (unumber)(number) 1
|
|
Adding number conversion cast (unumber) $f in (byte) CORDIC_ITERATIONS_16#0 ← (number) $f
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
|
|
Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0
|
|
Adding number conversion cast (unumber) 1 in (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (number) 1
|
|
Adding number conversion cast (unumber) atan2_16::$16 in (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (unumber)(number) 1
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (number) 0
|
|
Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
|
|
Adding number conversion cast (unumber) 2 in (bool~) atan2_16::$19 ← (byte) atan2_16::shift#2 >= (number) 2
|
|
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
|
|
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
|
|
Adding number conversion cast (unumber) 2 in (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
|
|
Adding number conversion cast (unumber) 0 in (bool~) atan2_16::$25 ← (number) 0 != (byte) atan2_16::shift#4
|
|
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$21 ← (signed word) atan2_16::yi#5 >= (number) 0
|
|
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
|
|
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
|
|
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) $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[]) BUCKET_SIZES#0 + (byte) init_buckets::i#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
|
|
Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27
|
|
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (number) 2
|
|
Adding number conversion cast (unumber) init_angle_screen::$2 in (number~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (unumber)(number) 2
|
|
Adding number conversion cast (unumber) $27 in (number~) init_angle_screen::$3 ← (number) $27 - (unumber~) init_angle_screen::$2
|
|
Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (unumber)(number) $27 - (unumber~) init_angle_screen::$2
|
|
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$6 ← (byte) init_angle_screen::y#2 * (number) 2
|
|
Adding number conversion cast (unumber) init_angle_screen::$6 in (number~) init_angle_screen::$6 ← (byte) init_angle_screen::y#2 * (unumber)(number) 2
|
|
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (number) $80
|
|
Adding number conversion cast (unumber) init_angle_screen::$10 in (number~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (unumber)(number) $80
|
|
Adding number conversion cast (unumber) init_angle_screen::$11 in (number~) init_angle_screen::$11 ← > (unumber~) init_angle_screen::$10
|
|
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$13 ← (number) $80 + (byte) init_angle_screen::ang_w#0
|
|
Adding number conversion cast (unumber) init_angle_screen::$13 in (number~) init_angle_screen::$13 ← (unumber)(number) $80 + (byte) init_angle_screen::ang_w#0
|
|
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$14 ← (number) $80 - (byte) init_angle_screen::ang_w#0
|
|
Adding number conversion cast (unumber) init_angle_screen::$14 in (number~) init_angle_screen::$14 ← (unumber)(number) $80 - (byte) init_angle_screen::ang_w#0
|
|
Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$15 ← (byte) init_angle_screen::x#1 <= (number) $13
|
|
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
|
|
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
|
|
Adding number conversion cast (unumber) $30 in (byte) NUM_SQUARES#3 ← (number) $30
|
|
Adding number conversion cast (unumber) $28*$18 in (byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18
|
|
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2
|
|
Adding number conversion cast (unumber) init_dist_screen::$2 in (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (unumber)(number) 2
|
|
Adding number conversion cast (unumber) $18 in (bool~) init_dist_screen::$3 ← (byte) init_dist_screen::y2#0 >= (number) $18
|
|
Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18
|
|
Adding number conversion cast (unumber) init_dist_screen::$6 in (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (unumber)(number) $18
|
|
Adding number conversion cast (unumber) init_dist_screen::$7 in (number~) init_dist_screen::$7 ← (unumber~) init_dist_screen::$6
|
|
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#44 ← phi( init_dist_screen::@2/(byte*) heap_head#45 init_dist_screen::@3/(byte*) heap_head#46 )
|
|
(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#30 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#32 init_dist_screen::@3/(byte) NUM_SQUARES#33 )
|
|
(word*) SQUARES#18 ← phi( init_dist_screen::@2/(word*) SQUARES#27 init_dist_screen::@3/(word*) SQUARES#28 )
|
|
(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
|
|
Adding number conversion cast (unumber) $27 in (byte) init_dist_screen::xb#0 ← (number) $27
|
|
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (number) 2
|
|
Adding number conversion cast (unumber) init_dist_screen::$10 in (number~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (unumber)(number) 2
|
|
Adding number conversion cast (unumber) $27 in (bool~) init_dist_screen::$11 ← (byte) init_dist_screen::x2#0 >= (number) $27
|
|
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (number) $27
|
|
Adding number conversion cast (unumber) init_dist_screen::$14 in (number~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (unumber)(number) $27
|
|
Adding number conversion cast (unumber) init_dist_screen::$15 in (number~) init_dist_screen::$15 ← (unumber~) init_dist_screen::$14
|
|
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#39 ← phi( init_dist_screen::@6/(byte*) heap_head#40 init_dist_screen::@7/(byte*) heap_head#41 )
|
|
(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 )
|
|
(byte) init_dist_screen::x#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#6 init_dist_screen::@7/(byte) init_dist_screen::x#7 )
|
|
(byte*) init_dist_screen::screen_topline#5 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#7 )
|
|
(byte) NUM_SQUARES#19 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#23 init_dist_screen::@7/(byte) NUM_SQUARES#24 )
|
|
(word) init_dist_screen::yds#2 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#3 init_dist_screen::@7/(word) init_dist_screen::yds#4 )
|
|
(word*) SQUARES#19 ← phi( init_dist_screen::@6/(word*) SQUARES#29 init_dist_screen::@7/(word*) SQUARES#30 )
|
|
(number~) init_dist_screen::$16 ← phi( init_dist_screen::@6/(unumber~) init_dist_screen::$15 init_dist_screen::@7/(unumber~) init_dist_screen::$13 )
|
|
Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$20 ← (byte) init_dist_screen::x#1 <= (number) $13
|
|
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#3 + (number) $28
|
|
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#3 - (number) $28
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Inlining cast (byte*) HEAP_TOP#0 ← (byte*)(number) $a000
|
|
Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
|
|
Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1
|
|
Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0)
|
|
Inlining cast (byte) NUM_SQUARES#0 ← (unumber)(number) $ff
|
|
Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1
|
|
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) NUM_BUCKETS#0 ← (unumber)(number) $30
|
|
Inlining cast (byte[]) BUCKET_SIZES#0 ← (byte*)(void*~) $3
|
|
Inlining cast *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (unumber)(number) 0
|
|
Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0
|
|
Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27
|
|
Inlining cast (signed word~) init_angle_screen::$5 ← (signed word)(word~) init_angle_screen::$4
|
|
Inlining cast (signed word~) init_angle_screen::$8 ← (signed word)(word~) init_angle_screen::$7
|
|
Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30
|
|
Inlining cast (byte) init_dist_screen::x#0 ← (unumber)(number) 0
|
|
Inlining cast (byte) init_dist_screen::xb#0 ← (unumber)(number) $27
|
|
Successful SSA optimization Pass2InlineCast
|
|
Simplifying constant pointer cast (byte*) 40960
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $ff
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $f
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
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 integer cast $30
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast $80
|
|
Simplifying constant integer cast $13
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $30
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast $18
|
|
Simplifying constant integer cast $18
|
|
Simplifying constant integer cast $18
|
|
Simplifying constant integer cast 0
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast 2
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast $27
|
|
Simplifying constant integer cast $13
|
|
Simplifying constant integer cast $28
|
|
Simplifying constant integer cast $28
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) $ff
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) $f
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized signed number type (signed byte) 0
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized signed number type (signed byte) 2
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized signed number type (signed byte) 0
|
|
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) $30
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $80
|
|
Finalized unsigned number type (byte) $13
|
|
Finalized unsigned number type (byte) $28
|
|
Finalized unsigned number type (byte) $28
|
|
Finalized unsigned number type (byte) $30
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $18
|
|
Finalized unsigned number type (byte) $18
|
|
Finalized unsigned number type (byte) $18
|
|
Finalized unsigned number type (byte) 0
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) 2
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) $27
|
|
Finalized unsigned number type (byte) $13
|
|
Finalized unsigned number type (byte) $28
|
|
Finalized unsigned number type (byte) $28
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inferred type updated to byte in (unumber~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
|
|
Inferred type updated to byte in (unumber~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
|
|
Inferred type updated to byte in (unumber~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (byte) 1
|
|
Inferred type updated to byte in (unumber~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
|
|
Inferred type updated to byte in (unumber~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
|
|
Inferred type updated to byte in (unumber~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (byte) 1
|
|
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
|
|
Inferred type updated to byte in (unumber~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (byte) 1
|
|
Inferred type updated to byte in (unumber~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2
|
|
Inferred type updated to byte in (unumber~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2
|
|
Inferred type updated to byte in (unumber~) init_angle_screen::$6 ← (byte) init_angle_screen::y#2 * (byte) 2
|
|
Inferred type updated to word in (unumber~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80
|
|
Inferred type updated to byte in (unumber~) init_angle_screen::$11 ← > (word~) init_angle_screen::$10
|
|
Inferred type updated to byte in (unumber~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
|
|
Inferred type updated to byte in (unumber~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (byte) 2
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (byte) $18
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$7 ← (byte~) init_dist_screen::$6
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$4 ← (byte) $18 - (byte) init_dist_screen::y2#2
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$5 ← (byte~) init_dist_screen::$4
|
|
Inferred type updated to byte for (unumber~) init_dist_screen::$8
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 * (byte) 2
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$14 ← (byte) init_dist_screen::x2#1 - (byte) $27
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$15 ← (byte~) init_dist_screen::$14
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$12 ← (byte) $27 - (byte) init_dist_screen::x2#2
|
|
Inferred type updated to byte in (unumber~) init_dist_screen::$13 ← (byte~) init_dist_screen::$12
|
|
Inferred type updated to byte for (unumber~) init_dist_screen::$16
|
|
Inversing boolean not [25] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [24] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (signed byte) 0
|
|
Inversing boolean not [32] (bool~) bsearch16u::$14 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [31] (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (signed byte) 0
|
|
Inversing boolean not [133] (bool~) atan2_16::$18 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [132] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (signed byte) 0
|
|
Inversing boolean not [142] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [141] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
|
|
Inversing boolean not [153] (bool~) atan2_16::$20 ← (byte) 0 == (byte) atan2_16::shift#4 from [152] (bool~) atan2_16::$25 ← (byte) 0 != (byte) atan2_16::shift#4
|
|
Inversing boolean not [177] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [176] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
|
|
Successful SSA optimization Pass2UnaryNotSimplification
|
|
Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#37 (byte*) heap_head#34 (byte*) heap_head#25
|
|
Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0
|
|
Alias (void*) malloc::return#0 = (void*) malloc::return#6 (void*) malloc::return#1
|
|
Alias (byte*) heap_head#1 = (byte*) heap_head#14 (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
|
|
Alias (word*) bsearch16u::pivot#0 = (word*~) bsearch16u::$7 (word*) bsearch16u::pivot#3 (word*) bsearch16u::pivot#1 (word*) bsearch16u::return#0 (word*) bsearch16u::pivot#2
|
|
Alias (signed word) bsearch16u::result#0 = (signed word~) bsearch16u::$10 (signed word) bsearch16u::result#1
|
|
Alias (word*) bsearch16u::return#1 = (word*) bsearch16u::return#4
|
|
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#7
|
|
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#28 (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#29 (byte) NUM_SQUARES#27 (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#22 (byte) NUM_SQUARES#21 (byte) NUM_SQUARES#17
|
|
Alias (word*) SQUARES#0 = (word*) SQUARES#40 (word*) SQUARES#39 (word*) SQUARES#38 (word*) SQUARES#36 (word*) SQUARES#33 (word*) SQUARES#32 (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
|
|
Alias (signed word) atan2_16::yi#0 = (signed word~) atan2_16::$4 (signed word) atan2_16::yi#12 (signed word) atan2_16::yi#13
|
|
Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#2 (signed word~) atan2_16::$8 (signed word) atan2_16::x#3
|
|
Alias (signed word) atan2_16::y#12 = (signed word) atan2_16::y#15 (signed word) atan2_16::y#13
|
|
Alias (signed word~) atan2_16::$7 = (signed word~) atan2_16::$6
|
|
Alias (signed word) atan2_16::xi#0 = (signed word~) atan2_16::$9
|
|
Alias (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#6 (signed word) atan2_16::xd#0
|
|
Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yd#0
|
|
Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::shift#0
|
|
Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#19
|
|
Alias (signed word) atan2_16::x#17 = (signed word) atan2_16::x#7
|
|
Alias (signed word) atan2_16::y#19 = (signed word) atan2_16::y#7
|
|
Alias (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#7 (signed word) atan2_16::xd#8 (signed word) atan2_16::xd#4
|
|
Alias (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#7 (signed word) atan2_16::yd#8 (signed word) atan2_16::yd#4
|
|
Alias (byte) atan2_16::shift#2 = (byte) atan2_16::shift#3 (byte) atan2_16::shift#4
|
|
Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#15 (signed word) atan2_16::yi#14 (signed word) atan2_16::yi#11
|
|
Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#12 (signed word) atan2_16::xi#11 (signed word) atan2_16::xi#9
|
|
Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#11 (byte) atan2_16::i#8 (byte) atan2_16::i#9
|
|
Alias (word) atan2_16::angle#16 = (word) atan2_16::angle#20 (word) atan2_16::angle#18 (word) atan2_16::angle#17
|
|
Alias (signed word) atan2_16::x#14 = (signed word) atan2_16::x#18 (signed word) atan2_16::x#16 (signed word) atan2_16::x#15
|
|
Alias (signed word) atan2_16::y#16 = (signed word) atan2_16::y#20 (signed word) atan2_16::y#18 (signed word) atan2_16::y#17
|
|
Alias (signed word) atan2_16::xi#4 = (signed word) atan2_16::xi#7 (signed word) atan2_16::xi#5
|
|
Alias (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#9 (signed word) atan2_16::yd#6
|
|
Alias (signed word) atan2_16::yi#5 = (signed word) atan2_16::yi#6 (signed word) atan2_16::yi#7
|
|
Alias (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#9 (signed word) atan2_16::xd#6
|
|
Alias (byte) atan2_16::i#3 = (byte) atan2_16::i#7 (byte) atan2_16::i#4
|
|
Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#7 (word) atan2_16::angle#8
|
|
Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#13 (signed word) atan2_16::x#12
|
|
Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#11
|
|
Alias (word) atan2_16::angle#1 = (word) atan2_16::angle#9
|
|
Alias (signed word) atan2_16::y#5 = (signed word) atan2_16::y#6
|
|
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 (void*) malloc::return#3 = (void*) malloc::return#8
|
|
Alias (byte*) heap_head#17 = (byte*) heap_head#5
|
|
Alias (void*) malloc::return#4 = (void*) malloc::return#9
|
|
Alias (byte*) heap_head#18 = (byte*) heap_head#6 (byte*) heap_head#26
|
|
Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#2
|
|
Alias (byte*) heap_head#19 = (byte*) heap_head#7 (byte*) heap_head#35 (byte*) heap_head#30 (byte*) heap_head#20 (byte*) heap_head#8
|
|
Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#26 (word*) SQUARES#22 (word*) SQUARES#13 (word*) SQUARES#4
|
|
Alias (word) malloc::size#3 = (byte~) $2
|
|
Alias (void*) malloc::return#10 = (void*) malloc::return#5
|
|
Alias (byte*) heap_head#21 = (byte*) heap_head#9 (byte*) heap_head#33
|
|
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
|
|
Alias (signed word) init_angle_screen::xw#0 = (signed word~) init_angle_screen::$5
|
|
Alias (word~) init_angle_screen::$7 = (word~) init_angle_screen::$18
|
|
Alias (signed word) init_angle_screen::yw#0 = (signed word~) init_angle_screen::$8
|
|
Alias (word) atan2_16::return#2 = (word) atan2_16::return#4
|
|
Alias (byte*) init_angle_screen::screen_bottomline#2 = (byte*) init_angle_screen::screen_bottomline#4 (byte*) init_angle_screen::screen_bottomline#3
|
|
Alias (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#3
|
|
Alias (byte*) init_angle_screen::screen_topline#2 = (byte*) init_angle_screen::screen_topline#4 (byte*) init_angle_screen::screen_topline#3
|
|
Alias (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#3
|
|
Alias (byte) init_angle_screen::y#2 = (byte) init_angle_screen::y#5 (byte) init_angle_screen::y#3
|
|
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#35
|
|
Alias (byte*) heap_head#10 = (byte*) heap_head#22
|
|
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#27 = (word*) SQUARES#34 (word*) SQUARES#28
|
|
Alias (byte) NUM_SQUARES#32 = (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#33
|
|
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#45 = (byte*) heap_head#47 (byte*) heap_head#46
|
|
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#37
|
|
Alias (byte) NUM_SQUARES#28 = (byte) NUM_SQUARES#30
|
|
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#43 = (byte*) heap_head#44
|
|
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#29 = (word*) SQUARES#35 (word*) SQUARES#30
|
|
Alias (word) init_dist_screen::yds#3 = (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#4
|
|
Alias (byte) NUM_SQUARES#23 = (byte) NUM_SQUARES#26 (byte) NUM_SQUARES#24
|
|
Alias (byte*) init_dist_screen::screen_topline#6 = (byte*) init_dist_screen::screen_topline#8 (byte*) init_dist_screen::screen_topline#7
|
|
Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#6 (byte) init_dist_screen::x#7
|
|
Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 (byte*) init_dist_screen::screen_bottomline#7
|
|
Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#6
|
|
Alias (byte) init_dist_screen::y#7 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#8
|
|
Alias (byte*) heap_head#40 = (byte*) heap_head#42 (byte*) heap_head#41
|
|
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
|
|
Alias (word) sqr::return#3 = (word) sqr::return#6
|
|
Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#2 (word) init_dist_screen::yds#6
|
|
Alias (word*) SQUARES#15 = (word*) SQUARES#20 (word*) SQUARES#19 (word*) SQUARES#31 (word*) SQUARES#24 (word*) SQUARES#6
|
|
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#13 (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#4
|
|
Alias (byte*) init_dist_screen::screen_topline#2 = (byte*) init_dist_screen::screen_topline#4 (byte*) init_dist_screen::screen_topline#5 (byte*) init_dist_screen::screen_topline#3
|
|
Alias (byte) init_dist_screen::x#3 = (byte) init_dist_screen::x#4 (byte) init_dist_screen::x#5
|
|
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#38 (byte*) heap_head#39 (byte*) heap_head#36 (byte*) heap_head#32 (byte*) heap_head#23
|
|
Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$17
|
|
Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$18
|
|
Alias (byte) sqrt::return#2 = (byte) sqrt::return#4
|
|
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 (word*) SQUARES#16 = (word*) SQUARES#7
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#5
|
|
Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#5 (signed word) atan2_16::x#10
|
|
Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#12 (signed word) atan2_16::y#9
|
|
Alias (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#9
|
|
Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#5
|
|
Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#4
|
|
Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#3 (byte) atan2_16::i#5
|
|
Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#16
|
|
Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) atan2_16::x#8
|
|
Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8
|
|
Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5
|
|
Alias (word*) SQUARES#18 = (word*) SQUARES#27
|
|
Alias (byte) NUM_SQUARES#28 = (byte) NUM_SQUARES#32
|
|
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#43 = (byte*) heap_head#45
|
|
Alias (word*) SQUARES#15 = (word*) SQUARES#29
|
|
Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3
|
|
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#23
|
|
Alias (byte*) init_dist_screen::screen_topline#2 = (byte*) init_dist_screen::screen_topline#6
|
|
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#40
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Self Phi Eliminated (word) bsearch16u::key#1
|
|
Self Phi Eliminated (byte*) heap_head#16
|
|
Self Phi Eliminated (word*) SQUARES#17
|
|
Self Phi Eliminated (signed word) atan2_16::yi#10
|
|
Self Phi Eliminated (signed word) atan2_16::xi#10
|
|
Self Phi Eliminated (byte) atan2_16::i#10
|
|
Self Phi Eliminated (word) atan2_16::angle#14
|
|
Self Phi Eliminated (signed word) atan2_16::x#11
|
|
Self Phi Eliminated (signed word) atan2_16::y#10
|
|
Self Phi Eliminated (byte) 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
|
|
Self Phi Eliminated (word*) SQUARES#15
|
|
Self Phi Eliminated (word) init_dist_screen::yds#1
|
|
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
|
|
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#27 (byte*) heap_head#31
|
|
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 (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
|
|
Identical Phi Values (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#11
|
|
Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0
|
|
Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0
|
|
Identical Phi Values (signed word) atan2_16::yi#10 (signed word) atan2_16::yi#3
|
|
Identical Phi Values (signed word) atan2_16::xi#10 (signed word) atan2_16::xi#3
|
|
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#17 (byte*) heap_head#1
|
|
Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#1
|
|
Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0
|
|
Identical Phi Values (byte*) heap_head#29 (byte*) heap_head#21
|
|
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#19 (byte*) heap_head#11
|
|
Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15
|
|
Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#1
|
|
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#31 (byte*) heap_head#29
|
|
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 (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#28
|
|
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#43
|
|
Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#1
|
|
Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#19
|
|
Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#12
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#18
|
|
Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17
|
|
Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Simple Condition (bool~) bsearch16u::$5 [14] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7
|
|
Simple Condition (bool~) bsearch16u::$12 [26] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9
|
|
Simple Condition (bool~) bsearch16u::$0 [29] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1
|
|
Simple Condition (bool~) bsearch16u::$14 [33] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10
|
|
Simple Condition (bool~) init_squares::$5 [78] if((byte) init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1
|
|
Simple Condition (bool~) atan2_16::$0 [111] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
|
|
Simple Condition (bool~) atan2_16::$5 [120] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
|
|
Simple Condition (bool~) atan2_16::$18 [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16
|
|
Simple Condition (bool~) atan2_16::$11 [143] if((signed word) atan2_16::x#17>=(signed byte) 0) goto atan2_16::@7
|
|
Simple Condition (bool~) atan2_16::$19 [146] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19
|
|
Simple Condition (bool~) atan2_16::$20 [154] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25
|
|
Simple Condition (bool~) atan2_16::$21 [157] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
|
|
Simple Condition (bool~) atan2_16::$22 [174] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15
|
|
Simple Condition (bool~) atan2_16::$14 [178] if((signed word) atan2_16::y#19>=(signed byte) 0) goto atan2_16::@8
|
|
Simple Condition (bool~) init_buckets::$1 [238] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1
|
|
Simple Condition (bool~) init_buckets::$2 [246] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3
|
|
Simple Condition (bool~) init_angle_screen::$15 [289] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2
|
|
Simple Condition (bool~) init_angle_screen::$16 [295] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
|
|
Simple Condition (bool~) init_dist_screen::$3 [311] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
|
|
Simple Condition (bool~) init_dist_screen::$11 [332] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
|
|
Simple Condition (bool~) init_dist_screen::$20 [362] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
|
|
Simple Condition (bool~) init_dist_screen::$21 [368] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Negating conditional jump and destination [174] if((byte) atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [42] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
|
|
Constant right-side identified [49] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant (const byte*) HEAP_TOP#0 = (byte*) 40960
|
|
Constant (const byte) bsearch16u::$17 = 1*SIZEOF_WORD
|
|
Constant (const byte) bsearch16u::$18 = 1*SIZEOF_WORD
|
|
Constant (const byte) NUM_SQUARES#0 = $ff
|
|
Constant (const word*) SQUARES#0 = (word*) 0
|
|
Constant (const word) init_squares::sqr#0 = 0
|
|
Constant (const byte) init_squares::i#0 = 0
|
|
Constant (const byte) CORDIC_ITERATIONS_16#0 = $f
|
|
Constant (const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
}}
|
|
Constant (const word) atan2_16::angle#0 = 0
|
|
Constant (const byte) atan2_16::i#0 = 0
|
|
Constant (const word) malloc::size#1 = $3e8
|
|
Constant (const word) malloc::size#2 = $3e8
|
|
Constant (const byte) NUM_BUCKETS#0 = $30
|
|
Constant (const byte) init_buckets::i#0 = 0
|
|
Constant (const word) init_buckets::i1#0 = 0
|
|
Constant (const byte) init_angle_screen::y#0 = 0
|
|
Constant (const byte) init_angle_screen::x#0 = 0
|
|
Constant (const byte) init_angle_screen::xb#0 = $27
|
|
Constant (const byte) NUM_SQUARES#3 = $30
|
|
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
|
|
Resolved ranged next value [244] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++
|
|
Resolved ranged comparison value [246] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8
|
|
Resolved ranged next value [293] init_angle_screen::y#1 ← ++ init_angle_screen::y#4 to ++
|
|
Resolved ranged comparison value [295] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
|
|
Resolved ranged next value [366] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
|
|
Resolved ranged comparison value [368] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
|
|
Rewriting conditional comparison [289] if((byte) init_angle_screen::x#1<=(byte) $13) goto init_angle_screen::@2
|
|
Rewriting conditional comparison [362] if((byte) init_dist_screen::x#1<=(byte) $13) goto init_dist_screen::@5
|
|
Eliminating unused variable - keeping the phi block (byte*) heap_head#43
|
|
Eliminating unused constant (const byte) NUM_SQUARES#0
|
|
Eliminating unused constant (const word*) SQUARES#0
|
|
Successful SSA optimization PassNEliminateUnusedVars
|
|
Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i1#1!=(number) $3e8) goto init_buckets::@3
|
|
Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#1<(byte) $13+(number) 1) goto init_angle_screen::@2
|
|
Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#1<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@2
|
|
Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1
|
|
Adding number conversion cast (unumber) $13+1 in if((byte) init_dist_screen::x#1<(byte) $13+(number) 1) goto init_dist_screen::@5
|
|
Adding number conversion cast (unumber) 1 in if((byte) init_dist_screen::x#1<(unumber)(byte) $13+(number) 1) goto init_dist_screen::@5
|
|
Adding number conversion cast (unumber) $d in if((byte) init_dist_screen::y#1!=(number) $d) goto init_dist_screen::@1
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast $3e8
|
|
Simplifying constant integer cast (byte~) init_angle_screen::$3
|
|
Simplifying constant integer cast (byte~) init_angle_screen::$6
|
|
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $d
|
|
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast $d
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (word) $3e8
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) $d
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) $d
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Self Phi Eliminated (signed word) atan2_16::x#17
|
|
Self Phi Eliminated (signed word) atan2_16::y#19
|
|
Self Phi Eliminated (word*) SQUARES#18
|
|
Self Phi Eliminated (byte) NUM_SQUARES#28
|
|
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#28 (const byte) NUM_SQUARES#3
|
|
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 [107] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
|
|
Constant right-side identified [112] (byte~) init_buckets::$0 ← (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 word) malloc::size#3 = NUM_BUCKETS#0*SIZEOF_BYTE
|
|
Constant (const byte) init_buckets::$0 = NUM_BUCKETS#0-1
|
|
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 [115] init_buckets::i#1 ← ++ init_buckets::i#2 to ++
|
|
Resolved ranged comparison value [116] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(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
|
|
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17
|
|
Adding number conversion cast (unumber) init_buckets::$0+1 in if((byte) init_buckets::i#1!=(const byte) init_buckets::$0+(number) 1) goto init_buckets::@1
|
|
Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i#1!=(unumber)(const byte) init_buckets::$0+(number) 1) goto init_buckets::@1
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant integer cast (const byte) init_squares::$2+(unumber)(number) 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast (const byte) atan2_16::$16+(unumber)(number) 1
|
|
Simplifying constant integer cast 1
|
|
Simplifying constant integer cast (const byte) init_buckets::$0+(unumber)(number) 1
|
|
Simplifying constant integer cast 1
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Finalized unsigned number type (byte) 1
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
|
|
Inlining Noop Cast [10] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0
|
|
Inlining Noop Cast [11] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0)
|
|
Successful SSA optimization Pass2NopCastInlining
|
|
Inlining Noop Cast [25] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
|
|
Inlining Noop Cast [90] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
|
|
Inlining Noop Cast [94] (void*) malloc::return#4 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
|
|
Inlining Noop Cast [104] (void*) malloc::return#10 ← (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 [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 [106] (byte[]) BUCKET_SIZES#0 ← (byte*)(void*~) $3 keeping BUCKET_SIZES#0
|
|
Inlining Noop Cast [125] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$4 keeping init_angle_screen::xw#0
|
|
Inlining Noop Cast [128] (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
|
|
Rewriting multiplication to use shift [39] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
|
|
Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD
|
|
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 [122] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 * (byte) 2
|
|
Rewriting multiplication to use shift [126] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 * (byte) 2
|
|
Rewriting multiplication to use shift [154] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
|
|
Rewriting multiplication to use shift [164] (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 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
|
|
Inlining constant with var siblings (const word) atan2_16::angle#0
|
|
Inlining constant with var siblings (const byte) atan2_16::i#0
|
|
Inlining constant with var siblings (const byte) init_buckets::i#0
|
|
Inlining constant with var siblings (const word) init_buckets::i1#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_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
|
|
Constant inlined init_buckets::$0 = (const byte) NUM_BUCKETS#0-(byte) 1
|
|
Constant inlined malloc::size#3 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE
|
|
Constant inlined init_buckets::i1#0 = (word) 0
|
|
Constant inlined malloc::size#2 = (word) $3e8
|
|
Constant inlined init_squares::sqr#0 = (byte) 0
|
|
Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3
|
|
Constant inlined init_angle_screen::xb#0 = (byte) $27
|
|
Constant inlined atan2_16::i#0 = (byte) 0
|
|
Constant inlined init_angle_screen::y#0 = (byte) 0
|
|
Constant inlined init_angle_screen::x#0 = (byte) 0
|
|
Constant inlined malloc::size#1 = (word) $3e8
|
|
Constant inlined atan2_16::angle#0 = (byte) 0
|
|
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::i#0 = (byte) 0
|
|
Constant inlined init_dist_screen::y#0 = (byte) 0
|
|
Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD
|
|
Constant inlined init_dist_screen::xb#0 = (byte) $27
|
|
Constant inlined init_dist_screen::x#0 = (byte) 0
|
|
Constant inlined init_squares::i#0 = (byte) 0
|
|
Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1
|
|
Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
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)
|
|
Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17)
|
|
Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2_16::@17)
|
|
Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25)
|
|
Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7)
|
|
Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8)
|
|
Added new block during phi lifting init_buckets::@5(between init_buckets::@1 and init_buckets::@1)
|
|
Added new block during phi lifting init_buckets::@6(between init_buckets::@3 and init_buckets::@3)
|
|
Added new block during phi lifting init_angle_screen::@6(between init_angle_screen::@3 and init_angle_screen::@1)
|
|
Added new block during phi lifting init_angle_screen::@7(between init_angle_screen::@5 and init_angle_screen::@2)
|
|
Added new block during phi lifting init_dist_screen::@19(between init_dist_screen::@11 and init_dist_screen::@1)
|
|
Added new block during phi lifting init_dist_screen::@20(between init_dist_screen::@18 and init_dist_screen::@5)
|
|
Adding NOP phi() at start of @begin
|
|
Adding NOP phi() at start of @3
|
|
Adding NOP phi() at start of @6
|
|
Adding NOP phi() at start of @8
|
|
Adding NOP phi() at start of @12
|
|
Adding NOP phi() at start of @16
|
|
Adding NOP phi() at start of @end
|
|
Adding NOP phi() at start of main::@2
|
|
Adding NOP phi() at start of main::@3
|
|
Adding NOP phi() at start of init_buckets
|
|
Adding NOP phi() at start of init_dist_screen
|
|
CALL GRAPH
|
|
Calls in [] to malloc:4 malloc:7 malloc:10 main:13
|
|
Calls in [main] to init_dist_screen:17 init_angle_screen:19 init_buckets:21
|
|
Calls in [init_angle_screen] to atan2_16:53
|
|
Calls in [init_dist_screen] to init_squares:149 sqr:161 sqr:172 sqrt:177
|
|
Calls in [sqrt] to bsearch16u:203
|
|
Calls in [init_squares] to malloc:243
|
|
|
|
Created 44 initial phi equivalence classes
|
|
Coalesced [6] heap_head#48 ← heap_head#1
|
|
Coalesced (already) [9] heap_head#49 ← heap_head#1
|
|
Coalesced [30] init_buckets::dist#3 ← init_buckets::dist#0
|
|
Coalesced [37] init_buckets::dist#4 ← init_buckets::dist#1
|
|
Coalesced [38] init_buckets::i1#3 ← init_buckets::i1#1
|
|
Coalesced [39] init_buckets::i#3 ← init_buckets::i#1
|
|
Coalesced [42] init_angle_screen::screen_bottomline#6 ← init_angle_screen::screen_bottomline#0
|
|
Coalesced [43] init_angle_screen::screen_topline#6 ← init_angle_screen::screen_topline#0
|
|
Coalesced [73] init_angle_screen::y#6 ← init_angle_screen::y#1
|
|
Coalesced [74] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#1
|
|
Coalesced [75] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#1
|
|
Coalesced [76] init_angle_screen::x#4 ← init_angle_screen::x#1
|
|
Coalesced [77] init_angle_screen::xb#4 ← init_angle_screen::xb#1
|
|
Coalesced [80] atan2_16::yi#17 ← atan2_16::$2
|
|
Coalesced [84] atan2_16::xi#14 ← atan2_16::$7
|
|
Coalesced [86] atan2_16::yi#19 ← atan2_16::yi#0
|
|
Coalesced [87] atan2_16::xi#16 ← atan2_16::xi#0
|
|
Coalesced [90] atan2_16::angle#22 ← atan2_16::angle#12
|
|
Coalesced [95] atan2_16::angle#27 ← atan2_16::angle#4
|
|
Coalesced [99] atan2_16::return#5 ← atan2_16::angle#5
|
|
Coalesced [102] atan2_16::return#6 ← atan2_16::angle#11
|
|
Coalesced [103] atan2_16::angle#26 ← atan2_16::angle#1
|
|
Not coalescing [104] atan2_16::shift#5 ← atan2_16::i#2
|
|
Not coalescing [105] atan2_16::xd#10 ← atan2_16::xi#3
|
|
Not coalescing [106] atan2_16::yd#10 ← atan2_16::yi#3
|
|
Coalesced [112] atan2_16::yd#13 ← atan2_16::yd#2
|
|
Coalesced [113] atan2_16::xd#13 ← atan2_16::xd#2
|
|
Coalesced [120] atan2_16::yi#21 ← atan2_16::yi#2
|
|
Coalesced [121] atan2_16::angle#25 ← atan2_16::angle#3
|
|
Coalesced [122] atan2_16::xi#18 ← atan2_16::xi#2
|
|
Coalesced [126] atan2_16::yi#18 ← atan2_16::yi#8
|
|
Coalesced [127] atan2_16::xi#15 ← atan2_16::xi#8
|
|
Coalesced [128] atan2_16::i#12 ← atan2_16::i#1
|
|
Coalesced [129] atan2_16::angle#21 ← atan2_16::angle#13
|
|
Coalesced (already) [130] atan2_16::angle#23 ← atan2_16::angle#13
|
|
Coalesced [135] atan2_16::yi#20 ← atan2_16::yi#1
|
|
Coalesced [136] atan2_16::angle#24 ← atan2_16::angle#2
|
|
Coalesced [137] atan2_16::xi#17 ← atan2_16::xi#1
|
|
Coalesced [138] atan2_16::yd#12 ← atan2_16::yd#3
|
|
Coalesced [139] atan2_16::xd#12 ← atan2_16::xd#3
|
|
Coalesced [143] atan2_16::shift#6 ← atan2_16::shift#1
|
|
Coalesced [144] atan2_16::xd#11 ← atan2_16::xd#1
|
|
Coalesced [145] atan2_16::yd#11 ← atan2_16::yd#1
|
|
Not coalescing [146] atan2_16::xi#13 ← atan2_16::x#0
|
|
Not coalescing [147] atan2_16::yi#16 ← atan2_16::y#0
|
|
Coalesced [151] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0
|
|
Coalesced [152] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0
|
|
Coalesced [157] init_dist_screen::yd#2 ← init_dist_screen::$5
|
|
Coalesced [160] sqr::val#3 ← sqr::val#0
|
|
Coalesced [168] init_dist_screen::xd#2 ← init_dist_screen::$13
|
|
Coalesced [171] sqr::val#4 ← sqr::val#1
|
|
Coalesced [192] init_dist_screen::y#14 ← init_dist_screen::y#1
|
|
Coalesced [193] init_dist_screen::screen_topline#14 ← init_dist_screen::screen_topline#1
|
|
Coalesced [194] init_dist_screen::screen_bottomline#14 ← init_dist_screen::screen_bottomline#1
|
|
Coalesced [195] init_dist_screen::x#8 ← init_dist_screen::x#1
|
|
Coalesced [196] init_dist_screen::xb#8 ← init_dist_screen::xb#1
|
|
Coalesced [198] init_dist_screen::xd#1 ← init_dist_screen::$15
|
|
Coalesced [200] init_dist_screen::yd#1 ← init_dist_screen::$7
|
|
Coalesced [210] bsearch16u::items#10 ← bsearch16u::items#1
|
|
Coalesced [215] bsearch16u::return#9 ← bsearch16u::$2
|
|
Coalesced [217] bsearch16u::return#7 ← bsearch16u::return#2
|
|
Coalesced [220] bsearch16u::return#8 ← bsearch16u::items#2
|
|
Not coalescing [226] bsearch16u::return#6 ← bsearch16u::pivot#0
|
|
Coalesced [230] bsearch16u::num#10 ← bsearch16u::num#1
|
|
Coalesced [231] bsearch16u::items#12 ← bsearch16u::items#0
|
|
Coalesced [234] bsearch16u::num#9 ← bsearch16u::num#0
|
|
Coalesced [235] bsearch16u::items#11 ← bsearch16u::items#8
|
|
Coalesced [236] bsearch16u::num#11 ← bsearch16u::num#3
|
|
Coalesced (already) [237] bsearch16u::items#13 ← bsearch16u::items#2
|
|
Coalesced (already) [242] heap_head#50 ← heap_head#1
|
|
Coalesced [246] init_squares::squares#4 ← init_squares::squares#0
|
|
Coalesced [256] init_squares::sqr#3 ← init_squares::sqr#1
|
|
Coalesced [257] init_squares::squares#3 ← init_squares::squares#1
|
|
Coalesced [258] init_squares::i#3 ← init_squares::i#1
|
|
Not coalescing [261] heap_head#1 ← malloc::mem#0
|
|
Coalesced down to 35 phi equivalence classes
|
|
Culled Empty Block (label) @3
|
|
Culled Empty Block (label) @6
|
|
Culled Empty Block (label) @16
|
|
Culled Empty Block (label) main::@3
|
|
Culled Empty Block (label) init_buckets::@6
|
|
Culled Empty Block (label) init_buckets::@5
|
|
Culled Empty Block (label) init_angle_screen::@6
|
|
Culled Empty Block (label) init_angle_screen::@7
|
|
Culled Empty Block (label) atan2_16::@35
|
|
Culled Empty Block (label) atan2_16::@39
|
|
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::@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 @8 to @1
|
|
Renumbering block @9 to @2
|
|
Renumbering block @12 to @3
|
|
Renumbering block @13 to @4
|
|
Renumbering block @14 to @5
|
|
Renumbering block @15 to @6
|
|
Renumbering block bsearch16u::@2 to bsearch16u::@1
|
|
Renumbering block bsearch16u::@3 to bsearch16u::@2
|
|
Renumbering block bsearch16u::@6 to bsearch16u::@3
|
|
Renumbering block bsearch16u::@7 to bsearch16u::@4
|
|
Renumbering block bsearch16u::@8 to bsearch16u::@5
|
|
Renumbering block bsearch16u::@9 to bsearch16u::@6
|
|
Renumbering block bsearch16u::@10 to bsearch16u::@7
|
|
Renumbering block bsearch16u::@13 to bsearch16u::@8
|
|
Renumbering block bsearch16u::@15 to bsearch16u::@9
|
|
Renumbering block init_squares::@3 to init_squares::@2
|
|
Renumbering block sqrt::@2 to sqrt::@1
|
|
Renumbering block atan2_16::@13 to atan2_16::@9
|
|
Renumbering block atan2_16::@15 to atan2_16::@10
|
|
Renumbering block atan2_16::@16 to atan2_16::@11
|
|
Renumbering block atan2_16::@17 to atan2_16::@12
|
|
Renumbering block atan2_16::@18 to atan2_16::@13
|
|
Renumbering block atan2_16::@19 to atan2_16::@14
|
|
Renumbering block atan2_16::@20 to atan2_16::@15
|
|
Renumbering block atan2_16::@24 to atan2_16::@16
|
|
Renumbering block atan2_16::@25 to atan2_16::@17
|
|
Renumbering block atan2_16::@26 to atan2_16::@18
|
|
Renumbering block atan2_16::@27 to atan2_16::@19
|
|
Renumbering block atan2_16::@30 to atan2_16::@20
|
|
Renumbering block atan2_16::@33 to atan2_16::@21
|
|
Renumbering block 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::@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::@2
|
|
Adding NOP phi() at start of init_buckets
|
|
Adding NOP phi() at start of init_dist_screen
|
|
Adding NOP phi() at start of bsearch16u
|
|
Adding NOP phi() at start of init_squares
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
@begin: scope:[] from
|
|
[0] phi()
|
|
to:@1
|
|
@1: scope:[] from @begin
|
|
[1] phi()
|
|
[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
|
|
to:@3
|
|
@3: scope:[] from @6
|
|
[9] phi()
|
|
[10] call main
|
|
to:@end
|
|
@end: scope:[] from @3
|
|
[11] phi()
|
|
main: scope:[main] from @3
|
|
[12] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
|
|
[13] call init_dist_screen
|
|
to:main::@1
|
|
main::@1: scope:[main] from main
|
|
[14] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
|
|
[15] call init_angle_screen
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1
|
|
[16] phi()
|
|
[17] call init_buckets
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@2
|
|
[18] return
|
|
to:@return
|
|
init_buckets: scope:[init_buckets] from main::@2
|
|
[19] phi()
|
|
to:init_buckets::@1
|
|
init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1
|
|
[20] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
|
|
[21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
|
|
[22] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
|
|
[23] 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
|
|
[24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0
|
|
to:init_buckets::@3
|
|
init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3
|
|
[25] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 )
|
|
[25] (byte*) init_buckets::dist#2 ← phi( init_buckets::@2/(byte*) init_buckets::dist#0 init_buckets::@3/(byte*) init_buckets::dist#1 )
|
|
[26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2))
|
|
[27] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#2
|
|
[28] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
|
|
[29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3
|
|
to:init_buckets::@return
|
|
init_buckets::@return: scope:[init_buckets] from init_buckets::@3
|
|
[30] return
|
|
to:@return
|
|
init_angle_screen: scope:[init_angle_screen] from main::@1
|
|
[31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
|
|
[32] (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
|
|
[33] (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 )
|
|
[33] (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 )
|
|
[33] (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
|
|
[34] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@4/(byte) init_angle_screen::xb#1 )
|
|
[34] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::x#1 )
|
|
[35] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1
|
|
[36] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2
|
|
[37] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$3 w= (byte) 0
|
|
[38] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1
|
|
[39] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$6 w= (byte) 0
|
|
[40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
|
|
[41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
|
|
[42] call atan2_16
|
|
[43] (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
|
|
[44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
|
|
[45] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80
|
|
[46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10
|
|
[47] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
|
|
[48] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0
|
|
[49] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$12
|
|
[50] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
|
|
[51] *((byte*) init_angle_screen::screen_topline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$13
|
|
[52] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
|
|
[53] *((byte*) init_angle_screen::screen_bottomline#5 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
|
|
[54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
|
|
[55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
|
|
[56] 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
|
|
[57] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#5 - (byte) $28
|
|
[58] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#5 + (byte) $28
|
|
[59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4
|
|
[60] 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
|
|
[61] return
|
|
to:@return
|
|
atan2_16: scope:[atan2_16] from init_angle_screen::@2
|
|
[62] 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
|
|
[63] (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
|
|
[64] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
|
|
[65] 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
|
|
[66] (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
|
|
[67] (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
|
|
[68] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
|
|
[68] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
|
|
[68] (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 )
|
|
[68] (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 )
|
|
[69] 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
|
|
[70] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
|
|
[71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
|
|
[72] 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
|
|
[73] (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
|
|
[74] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
|
|
[75] 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
|
|
[76] (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
|
|
[77] (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
|
|
[78] return
|
|
to:@return
|
|
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
|
|
[79] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
|
|
[80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
|
|
[81] (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
|
|
[82] (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 )
|
|
[82] (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 )
|
|
[82] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
|
|
[83] 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
|
|
[84] 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
|
|
[85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
|
|
[86] (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
|
|
[87] (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 )
|
|
[87] (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 )
|
|
[88] 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
|
|
[89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
|
|
[90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
|
|
[91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
|
|
[92] (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
|
|
[93] (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 )
|
|
[93] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
|
|
[93] (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 )
|
|
[94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
|
|
[95] 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
|
|
[96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
|
|
[97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
|
|
[98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
|
|
[99] (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
|
|
[100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
|
|
[101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
|
|
[102] (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
|
|
[103] (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
|
|
[104] (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
|
|
[105] phi()
|
|
[106] call init_squares
|
|
to:init_dist_screen::@10
|
|
init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen
|
|
[107] (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::@10 init_dist_screen::@9
|
|
[108] (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 )
|
|
[108] (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 )
|
|
[108] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 )
|
|
[109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
|
|
[110] 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
|
|
[111] (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
|
|
[112] (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 )
|
|
[113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
|
|
[114] call sqr
|
|
[115] (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
|
|
[116] (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::@11 init_dist_screen::@13
|
|
[117] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 )
|
|
[117] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 )
|
|
[118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
|
|
[119] 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
|
|
[120] (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
|
|
[121] (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 )
|
|
[122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
|
|
[123] call sqr
|
|
[124] (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::@8
|
|
[125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
|
|
[126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
|
|
[127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
|
|
[128] call sqrt
|
|
[129] (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
|
|
[130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
|
|
[131] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
|
|
[132] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
|
|
[133] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
|
|
[134] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
|
|
[135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
|
|
[136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
|
|
[137] 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::@13
|
|
[138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
|
|
[139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
|
|
[140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
|
|
[141] 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
|
|
[142] return
|
|
to:@return
|
|
init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5
|
|
[143] (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
|
|
[144] (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::@12
|
|
[145] (word) bsearch16u::key#0 ← (word) sqrt::val#0
|
|
[146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
|
|
[147] call bsearch16u
|
|
[148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
|
|
to:sqrt::@1
|
|
sqrt::@1: scope:[sqrt] from sqrt
|
|
[149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
|
|
[150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
|
|
[151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
|
|
[152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
|
|
to:sqrt::@return
|
|
sqrt::@return: scope:[sqrt] from sqrt::@1
|
|
[153] return
|
|
to:@return
|
|
bsearch16u: scope:[bsearch16u] from sqrt
|
|
[154] phi()
|
|
to:bsearch16u::@3
|
|
bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7
|
|
[155] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
|
|
[155] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
|
|
[156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
|
|
to:bsearch16u::@5
|
|
bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3
|
|
[157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
|
|
to:bsearch16u::@1
|
|
bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5
|
|
[158] (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
|
|
[159] (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
|
|
[160] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
|
|
[161] return
|
|
to:@return
|
|
bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3
|
|
[162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
|
|
[163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
|
|
[164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
|
|
[165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
|
|
[166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
|
|
to:bsearch16u::@8
|
|
bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4
|
|
[167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
|
|
to:bsearch16u::@return
|
|
bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4
|
|
[168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
|
|
to:bsearch16u::@9
|
|
bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6
|
|
[169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
|
|
[170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
|
|
to:bsearch16u::@7
|
|
bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9
|
|
[171] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
|
|
[171] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
|
|
[172] (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
|
|
[173] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
|
|
[174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
|
|
[175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
|
|
to:sqr::@return
|
|
sqr::@return: scope:[sqr] from sqr
|
|
[176] return
|
|
to:@return
|
|
init_squares: scope:[init_squares] from init_dist_screen
|
|
[177] phi()
|
|
[178] call malloc
|
|
to:init_squares::@2
|
|
init_squares::@2: scope:[init_squares] from init_squares
|
|
[179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
|
|
[180] (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
|
|
[181] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
|
|
[181] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
|
|
[181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
|
|
[182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
|
|
[183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
|
|
[184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
|
|
[185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
|
|
[186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
|
|
[187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
|
|
[188] 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
|
|
[189] return
|
|
to:@return
|
|
malloc: scope:[malloc] from @1 @2 @4 init_squares
|
|
[190] (word) malloc::size#4 ← phi( @4/(word) $3e8 @1/(word) $3e8 @2/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
|
|
[190] (byte*) heap_head#13 ← phi( @4/(byte*) heap_head#1 @1/(const byte*) HEAP_TOP#0 @2/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
|
|
[191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4
|
|
[192] (byte*) heap_head#1 ← (byte*) malloc::mem#0
|
|
to:malloc::@return
|
|
malloc::@return: scope:[malloc] from malloc
|
|
[193] return
|
|
to:@return
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
(byte[]) BUCKET_SIZES
|
|
(void*) BUCKET_SIZES#0 0.1111111111111111
|
|
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
|
|
(byte) CORDIC_ITERATIONS_16
|
|
(byte*) HEAP_TOP
|
|
(byte) NUM_BUCKETS
|
|
(byte) NUM_SQUARES
|
|
(byte*) SCREEN_ANGLE
|
|
(void*) SCREEN_ANGLE#0 0.2857142857142857
|
|
(byte*) SCREEN_DIST
|
|
(void*) SCREEN_DIST#0 0.11764705882352941
|
|
(word*) SQUARES
|
|
(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
|
|
(byte~) atan2_16::$24 2002.0
|
|
(signed word~) atan2_16::$7 4.0
|
|
(word) atan2_16::angle
|
|
(word) atan2_16::angle#1 3.0
|
|
(word) atan2_16::angle#11 4.0
|
|
(word) atan2_16::angle#12 190.66666666666666
|
|
(word) atan2_16::angle#13 1334.6666666666667
|
|
(word) atan2_16::angle#2 2002.0
|
|
(word) atan2_16::angle#3 2002.0
|
|
(word) atan2_16::angle#4 4.0
|
|
(word) atan2_16::angle#5 4.0
|
|
(word) atan2_16::angle#6 2004.0
|
|
(byte) atan2_16::i
|
|
(byte) atan2_16::i#1 1501.5
|
|
(byte) atan2_16::i#2 208.54166666666669
|
|
(word) atan2_16::return
|
|
(word) atan2_16::return#0 34.99999999999999
|
|
(word) atan2_16::return#2 202.0
|
|
(byte) atan2_16::shift
|
|
(byte) atan2_16::shift#1 20002.0
|
|
(byte) atan2_16::shift#2 8001.25
|
|
(byte~) atan2_16::shift#5 667.3333333333334
|
|
(signed word) atan2_16::x
|
|
(signed word) atan2_16::x#0 2.8684210526315796
|
|
(signed word) atan2_16::xd
|
|
(signed word) atan2_16::xd#1 6667.333333333333
|
|
(signed word~) atan2_16::xd#10 1001.0
|
|
(signed word) atan2_16::xd#2 1001.0
|
|
(signed word) atan2_16::xd#3 7668.333333333332
|
|
(signed word) atan2_16::xd#5 1001.0
|
|
(signed word) atan2_16::xi
|
|
(signed word) atan2_16::xi#0 6.0
|
|
(signed word) atan2_16::xi#1 500.5
|
|
(signed word~) atan2_16::xi#13 4.0
|
|
(signed word) atan2_16::xi#2 500.5
|
|
(signed word) atan2_16::xi#3 267.0666666666667
|
|
(signed word) atan2_16::xi#8 1001.0
|
|
(signed word) atan2_16::y
|
|
(signed word) atan2_16::y#0 2.724999999999999
|
|
(signed word) atan2_16::yd
|
|
(signed word) atan2_16::yd#1 10001.0
|
|
(signed word~) atan2_16::yd#10 2002.0
|
|
(signed word) atan2_16::yd#2 2002.0
|
|
(signed word) atan2_16::yd#3 4601.0
|
|
(signed word) atan2_16::yd#5 2002.0
|
|
(signed word) atan2_16::yi
|
|
(signed word) atan2_16::yi#0 1.2000000000000002
|
|
(signed word) atan2_16::yi#1 667.3333333333334
|
|
(signed word~) atan2_16::yi#16 4.0
|
|
(signed word) atan2_16::yi#2 667.3333333333334
|
|
(signed word) atan2_16::yi#3 353.4117647058823
|
|
(signed word) atan2_16::yi#8 1001.0
|
|
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
|
|
(byte~) bsearch16u::$16 2002.0
|
|
(word*~) bsearch16u::$2 4.0
|
|
(byte~) bsearch16u::$6 2002.0
|
|
(word*) bsearch16u::items
|
|
(word*) bsearch16u::items#0 1001.0
|
|
(word*) bsearch16u::items#1 2.0
|
|
(word*) bsearch16u::items#2 334.5555555555556
|
|
(word*) bsearch16u::items#8 1501.5
|
|
(word) bsearch16u::key
|
|
(word) bsearch16u::key#0 0.26666666666666666
|
|
(byte) bsearch16u::num
|
|
(byte) bsearch16u::num#0 2002.0
|
|
(byte) bsearch16u::num#1 2002.0
|
|
(byte) bsearch16u::num#3 556.1111111111111
|
|
(byte) bsearch16u::num#5 3003.0
|
|
(word*) bsearch16u::pivot
|
|
(word*) bsearch16u::pivot#0 501.0
|
|
(signed word) bsearch16u::result
|
|
(signed word) bsearch16u::result#0 1501.5
|
|
(word*) bsearch16u::return
|
|
(word*) bsearch16u::return#1 2.0
|
|
(word*) bsearch16u::return#2 6.0
|
|
(word*) bsearch16u::return#3 4.0
|
|
(word*~) bsearch16u::return#6 4.0
|
|
(byte*) heap_head
|
|
(byte*) heap_head#1 0.6153846153846154
|
|
(byte*) heap_head#13 8.0
|
|
(void()) init_angle_screen((byte*) init_angle_screen::screen)
|
|
(word~) init_angle_screen::$10 202.0
|
|
(byte~) init_angle_screen::$12 202.0
|
|
(byte~) init_angle_screen::$13 202.0
|
|
(byte~) init_angle_screen::$14 202.0
|
|
(byte~) init_angle_screen::$2 202.0
|
|
(byte~) init_angle_screen::$3 202.0
|
|
(byte~) init_angle_screen::$6 202.0
|
|
(byte) init_angle_screen::ang_w
|
|
(byte) init_angle_screen::ang_w#0 84.16666666666666
|
|
(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 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.416666666666666
|
|
(byte) init_angle_screen::x
|
|
(byte) init_angle_screen::x#1 101.0
|
|
(byte) init_angle_screen::x#2 25.25
|
|
(byte) init_angle_screen::xb
|
|
(byte) init_angle_screen::xb#1 101.0
|
|
(byte) init_angle_screen::xb#2 19.238095238095237
|
|
(signed word) init_angle_screen::xw
|
|
(word) init_angle_screen::xw#0 33.666666666666664
|
|
(byte) init_angle_screen::y
|
|
(byte) init_angle_screen::y#1 16.5
|
|
(byte) init_angle_screen::y#4 4.730769230769231
|
|
(signed word) init_angle_screen::yw
|
|
(word) init_angle_screen::yw#0 50.5
|
|
(void()) init_buckets()
|
|
(byte*) init_buckets::dist
|
|
(byte*) init_buckets::dist#0 4.0
|
|
(byte*) init_buckets::dist#1 7.333333333333333
|
|
(byte*) init_buckets::dist#2 23.0
|
|
(byte) init_buckets::i
|
|
(byte) init_buckets::i#1 16.5
|
|
(byte) init_buckets::i#2 16.5
|
|
(word) init_buckets::i1
|
|
(word) init_buckets::i1#1 16.5
|
|
(word) init_buckets::i1#2 7.333333333333333
|
|
(void()) init_dist_screen((byte*) init_dist_screen::screen)
|
|
(byte~) init_dist_screen::$13 202.0
|
|
(byte~) init_dist_screen::$15 202.0
|
|
(byte~) init_dist_screen::$5 22.0
|
|
(byte~) init_dist_screen::$7 22.0
|
|
(byte) init_dist_screen::d
|
|
(byte) init_dist_screen::d#0 126.25
|
|
(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.848484848484849
|
|
(byte*) init_dist_screen::screen_topline
|
|
(byte*) init_dist_screen::screen_topline#1 5.5
|
|
(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
|
|
(byte) init_dist_screen::x2
|
|
(byte) init_dist_screen::x2#0 202.0
|
|
(byte) init_dist_screen::xb
|
|
(byte) init_dist_screen::xb#1 101.0
|
|
(byte) init_dist_screen::xb#2 20.2
|
|
(byte) init_dist_screen::xd
|
|
(byte) init_dist_screen::xd#0 303.0
|
|
(word) init_dist_screen::xds
|
|
(word) init_dist_screen::xds#0 202.0
|
|
(byte) init_dist_screen::y
|
|
(byte) init_dist_screen::y#1 16.5
|
|
(byte) init_dist_screen::y#10 0.9705882352941178
|
|
(byte) init_dist_screen::y2
|
|
(byte) init_dist_screen::y2#0 22.0
|
|
(byte) init_dist_screen::yd
|
|
(byte) init_dist_screen::yd#0 33.0
|
|
(word) init_dist_screen::yds
|
|
(word) init_dist_screen::yds#0 4.869565217391305
|
|
(void()) init_squares()
|
|
(byte~) init_squares::$3 22.0
|
|
(byte~) init_squares::$4 22.0
|
|
(byte) init_squares::i
|
|
(byte) init_squares::i#1 16.5
|
|
(byte) init_squares::i#2 5.5
|
|
(word) init_squares::sqr
|
|
(word) init_squares::sqr#1 7.333333333333333
|
|
(word) init_squares::sqr#2 6.6000000000000005
|
|
(word*) init_squares::squares
|
|
(word*) init_squares::squares#0 4.0
|
|
(word*) init_squares::squares#1 3.6666666666666665
|
|
(word*) init_squares::squares#2 17.5
|
|
(void()) main()
|
|
(void*()) malloc((word) malloc::size)
|
|
(byte*) malloc::mem
|
|
(byte*) malloc::mem#0 0.5714285714285714
|
|
(void*) malloc::return
|
|
(word) malloc::size
|
|
(word) malloc::size#4 2.0
|
|
(word()) sqr((byte) sqr::val)
|
|
(byte~) sqr::$0 4.0
|
|
(word) sqr::return
|
|
(word) sqr::return#0 28.5
|
|
(word) sqr::return#2 22.0
|
|
(word) sqr::return#3 202.0
|
|
(byte) sqr::val
|
|
(byte) sqr::val#0 22.0
|
|
(byte) sqr::val#1 202.0
|
|
(byte) sqr::val#2 114.0
|
|
(byte()) sqrt((word) sqrt::val)
|
|
(word~) sqrt::$1 2.0
|
|
(word~) sqrt::$3 4.0
|
|
(word*) sqrt::found
|
|
(word*) sqrt::found#0 4.0
|
|
(byte) sqrt::return
|
|
(byte) sqrt::return#0 34.33333333333333
|
|
(byte) sqrt::return#2 202.0
|
|
(byte) sqrt::sq
|
|
(word) sqrt::val
|
|
(word) sqrt::val#0 103.0
|
|
|
|
Initial phi equivalence classes
|
|
[ init_buckets::i#2 init_buckets::i#1 ]
|
|
[ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ]
|
|
[ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
[ init_angle_screen::y#4 init_angle_screen::y#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 ]
|
|
[ 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 ]
|
|
[ atan2_16::i#2 atan2_16::i#1 ]
|
|
[ 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::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
[ 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#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 ]
|
|
[ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ]
|
|
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
|
|
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
|
|
[ sqr::val#2 sqr::val#0 sqr::val#1 ]
|
|
[ 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 ]
|
|
[ heap_head#13 heap_head#1 ]
|
|
[ malloc::size#4 ]
|
|
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 init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ]
|
|
Added variable init_angle_screen::$2 to zero page equivalence class [ init_angle_screen::$2 ]
|
|
Added variable init_angle_screen::$3 to zero page equivalence class [ init_angle_screen::$3 ]
|
|
Added variable init_angle_screen::xw#0 to zero page equivalence class [ init_angle_screen::xw#0 ]
|
|
Added variable init_angle_screen::$6 to zero page equivalence class [ init_angle_screen::$6 ]
|
|
Added variable init_angle_screen::yw#0 to zero page equivalence class [ init_angle_screen::yw#0 ]
|
|
Added variable atan2_16::x#0 to zero page equivalence class [ atan2_16::x#0 ]
|
|
Added variable atan2_16::y#0 to zero page equivalence class [ atan2_16::y#0 ]
|
|
Added variable atan2_16::return#2 to zero page equivalence class [ atan2_16::return#2 ]
|
|
Added variable init_angle_screen::angle_w#0 to zero page equivalence class [ init_angle_screen::angle_w#0 ]
|
|
Added variable init_angle_screen::$10 to zero page equivalence class [ init_angle_screen::$10 ]
|
|
Added variable init_angle_screen::ang_w#0 to zero page equivalence class [ init_angle_screen::ang_w#0 ]
|
|
Added variable init_angle_screen::$12 to zero page equivalence class [ init_angle_screen::$12 ]
|
|
Added variable init_angle_screen::$13 to zero page equivalence class [ init_angle_screen::$13 ]
|
|
Added variable init_angle_screen::$14 to zero page equivalence class [ init_angle_screen::$14 ]
|
|
Added variable atan2_16::$24 to zero page equivalence class [ atan2_16::$24 ]
|
|
Added variable atan2_16::$23 to zero page equivalence class [ atan2_16::$23 ]
|
|
Added variable init_dist_screen::y2#0 to zero page equivalence class [ init_dist_screen::y2#0 ]
|
|
Added variable sqr::return#2 to zero page equivalence class [ sqr::return#2 ]
|
|
Added variable init_dist_screen::yds#0 to zero page equivalence class [ init_dist_screen::yds#0 ]
|
|
Added variable init_dist_screen::x2#0 to zero page equivalence class [ init_dist_screen::x2#0 ]
|
|
Added variable sqr::return#3 to zero page equivalence class [ sqr::return#3 ]
|
|
Added variable init_dist_screen::xds#0 to zero page equivalence class [ init_dist_screen::xds#0 ]
|
|
Added variable init_dist_screen::ds#0 to zero page equivalence class [ init_dist_screen::ds#0 ]
|
|
Added variable sqrt::val#0 to zero page equivalence class [ sqrt::val#0 ]
|
|
Added variable sqrt::return#2 to zero page equivalence class [ sqrt::return#2 ]
|
|
Added variable init_dist_screen::d#0 to zero page equivalence class [ init_dist_screen::d#0 ]
|
|
Added variable bsearch16u::key#0 to zero page equivalence class [ bsearch16u::key#0 ]
|
|
Added variable bsearch16u::return#3 to zero page equivalence class [ bsearch16u::return#3 ]
|
|
Added variable sqrt::found#0 to zero page equivalence class [ sqrt::found#0 ]
|
|
Added variable sqrt::$3 to zero page equivalence class [ sqrt::$3 ]
|
|
Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ]
|
|
Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ]
|
|
Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ]
|
|
Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ]
|
|
Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ]
|
|
Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ]
|
|
Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ]
|
|
Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ]
|
|
Added variable SQUARES#1 to zero page equivalence class [ SQUARES#1 ]
|
|
Added variable init_squares::$3 to zero page equivalence class [ init_squares::$3 ]
|
|
Added variable init_squares::$4 to zero page equivalence class [ init_squares::$4 ]
|
|
Added variable malloc::mem#0 to zero page equivalence class [ malloc::mem#0 ]
|
|
Complete equivalence classes
|
|
[ init_buckets::i#2 init_buckets::i#1 ]
|
|
[ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ]
|
|
[ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
[ init_angle_screen::y#4 init_angle_screen::y#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 ]
|
|
[ 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 ]
|
|
[ atan2_16::i#2 atan2_16::i#1 ]
|
|
[ 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::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
[ 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#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 ]
|
|
[ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ]
|
|
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
|
|
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
|
|
[ sqr::val#2 sqr::val#0 sqr::val#1 ]
|
|
[ 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 ]
|
|
[ heap_head#13 heap_head#1 ]
|
|
[ malloc::size#4 ]
|
|
[ SCREEN_DIST#0 ]
|
|
[ SCREEN_ANGLE#0 ]
|
|
[ BUCKET_SIZES#0 ]
|
|
[ init_angle_screen::screen#0 ]
|
|
[ init_angle_screen::$2 ]
|
|
[ init_angle_screen::$3 ]
|
|
[ init_angle_screen::xw#0 ]
|
|
[ init_angle_screen::$6 ]
|
|
[ init_angle_screen::yw#0 ]
|
|
[ atan2_16::x#0 ]
|
|
[ atan2_16::y#0 ]
|
|
[ atan2_16::return#2 ]
|
|
[ init_angle_screen::angle_w#0 ]
|
|
[ init_angle_screen::$10 ]
|
|
[ init_angle_screen::ang_w#0 ]
|
|
[ init_angle_screen::$12 ]
|
|
[ init_angle_screen::$13 ]
|
|
[ init_angle_screen::$14 ]
|
|
[ atan2_16::$24 ]
|
|
[ atan2_16::$23 ]
|
|
[ init_dist_screen::y2#0 ]
|
|
[ sqr::return#2 ]
|
|
[ init_dist_screen::yds#0 ]
|
|
[ init_dist_screen::x2#0 ]
|
|
[ sqr::return#3 ]
|
|
[ init_dist_screen::xds#0 ]
|
|
[ init_dist_screen::ds#0 ]
|
|
[ sqrt::val#0 ]
|
|
[ sqrt::return#2 ]
|
|
[ init_dist_screen::d#0 ]
|
|
[ bsearch16u::key#0 ]
|
|
[ bsearch16u::return#3 ]
|
|
[ sqrt::found#0 ]
|
|
[ sqrt::$3 ]
|
|
[ sqrt::$1 ]
|
|
[ sqrt::return#0 ]
|
|
[ bsearch16u::$6 ]
|
|
[ bsearch16u::$16 ]
|
|
[ bsearch16u::pivot#0 ]
|
|
[ bsearch16u::result#0 ]
|
|
[ sqr::$0 ]
|
|
[ sqr::return#0 ]
|
|
[ SQUARES#1 ]
|
|
[ init_squares::$3 ]
|
|
[ init_squares::$4 ]
|
|
[ malloc::mem#0 ]
|
|
Allocated zp ZP_BYTE:2 [ init_buckets::i#2 init_buckets::i#1 ]
|
|
Allocated zp ZP_WORD:3 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ]
|
|
Allocated zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
Allocated zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
Allocated zp ZP_WORD:8 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
|
|
Allocated zp ZP_WORD:10 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
|
|
Allocated zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Allocated zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Allocated zp ZP_WORD:14 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
Allocated zp ZP_WORD:16 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
Allocated zp ZP_BYTE:18 [ atan2_16::i#2 atan2_16::i#1 ]
|
|
Allocated zp ZP_WORD:19 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
|
|
Allocated zp ZP_WORD:21 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
|
|
Allocated zp ZP_BYTE:23 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
Allocated zp ZP_WORD:24 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
Allocated zp ZP_WORD:26 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
Allocated zp ZP_BYTE:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
Allocated zp ZP_WORD:29 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
|
|
Allocated zp ZP_WORD:31 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
|
|
Allocated zp ZP_BYTE:33 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
|
|
Allocated zp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
Allocated zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
Allocated zp ZP_BYTE:36 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ]
|
|
Allocated zp ZP_WORD:37 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
|
|
Allocated zp ZP_BYTE:39 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
|
|
Allocated zp ZP_BYTE:40 [ sqr::val#2 sqr::val#0 sqr::val#1 ]
|
|
Allocated zp ZP_WORD:41 [ init_squares::sqr#2 init_squares::sqr#1 ]
|
|
Allocated zp ZP_WORD:43 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
|
|
Allocated zp ZP_BYTE:45 [ init_squares::i#2 init_squares::i#1 ]
|
|
Allocated zp ZP_WORD:46 [ heap_head#13 heap_head#1 ]
|
|
Allocated zp ZP_WORD:48 [ malloc::size#4 ]
|
|
Allocated zp ZP_WORD:50 [ SCREEN_DIST#0 ]
|
|
Allocated zp ZP_WORD:52 [ SCREEN_ANGLE#0 ]
|
|
Allocated zp ZP_WORD:54 [ BUCKET_SIZES#0 ]
|
|
Allocated zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
|
|
Allocated zp ZP_BYTE:58 [ init_angle_screen::$2 ]
|
|
Allocated zp ZP_BYTE:59 [ init_angle_screen::$3 ]
|
|
Allocated zp ZP_WORD:60 [ init_angle_screen::xw#0 ]
|
|
Allocated zp ZP_BYTE:62 [ init_angle_screen::$6 ]
|
|
Allocated zp ZP_WORD:63 [ init_angle_screen::yw#0 ]
|
|
Allocated zp ZP_WORD:65 [ atan2_16::x#0 ]
|
|
Allocated zp ZP_WORD:67 [ atan2_16::y#0 ]
|
|
Allocated zp ZP_WORD:69 [ atan2_16::return#2 ]
|
|
Allocated zp ZP_WORD:71 [ init_angle_screen::angle_w#0 ]
|
|
Allocated zp ZP_WORD:73 [ init_angle_screen::$10 ]
|
|
Allocated zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ]
|
|
Allocated zp ZP_BYTE:76 [ init_angle_screen::$12 ]
|
|
Allocated zp ZP_BYTE:77 [ init_angle_screen::$13 ]
|
|
Allocated zp ZP_BYTE:78 [ init_angle_screen::$14 ]
|
|
Allocated zp ZP_BYTE:79 [ atan2_16::$24 ]
|
|
Allocated zp ZP_BYTE:80 [ atan2_16::$23 ]
|
|
Allocated zp ZP_BYTE:81 [ init_dist_screen::y2#0 ]
|
|
Allocated zp ZP_WORD:82 [ sqr::return#2 ]
|
|
Allocated zp ZP_WORD:84 [ init_dist_screen::yds#0 ]
|
|
Allocated zp ZP_BYTE:86 [ init_dist_screen::x2#0 ]
|
|
Allocated zp ZP_WORD:87 [ sqr::return#3 ]
|
|
Allocated zp ZP_WORD:89 [ init_dist_screen::xds#0 ]
|
|
Allocated zp ZP_WORD:91 [ init_dist_screen::ds#0 ]
|
|
Allocated zp ZP_WORD:93 [ sqrt::val#0 ]
|
|
Allocated zp ZP_BYTE:95 [ sqrt::return#2 ]
|
|
Allocated zp ZP_BYTE:96 [ init_dist_screen::d#0 ]
|
|
Allocated zp ZP_WORD:97 [ bsearch16u::key#0 ]
|
|
Allocated zp ZP_WORD:99 [ bsearch16u::return#3 ]
|
|
Allocated zp ZP_WORD:101 [ sqrt::found#0 ]
|
|
Allocated zp ZP_WORD:103 [ sqrt::$3 ]
|
|
Allocated zp ZP_WORD:105 [ sqrt::$1 ]
|
|
Allocated zp ZP_BYTE:107 [ sqrt::return#0 ]
|
|
Allocated zp ZP_BYTE:108 [ bsearch16u::$6 ]
|
|
Allocated zp ZP_BYTE:109 [ bsearch16u::$16 ]
|
|
Allocated zp ZP_WORD:110 [ bsearch16u::pivot#0 ]
|
|
Allocated zp ZP_WORD:112 [ bsearch16u::result#0 ]
|
|
Allocated zp ZP_BYTE:114 [ sqr::$0 ]
|
|
Allocated zp ZP_WORD:115 [ sqr::return#0 ]
|
|
Allocated zp ZP_WORD:117 [ SQUARES#1 ]
|
|
Allocated zp ZP_BYTE:119 [ init_squares::$3 ]
|
|
Allocated zp ZP_BYTE:120 [ init_squares::$4 ]
|
|
Allocated zp ZP_WORD:121 [ malloc::mem#0 ]
|
|
|
|
INITIAL ASM
|
|
// 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(bbegin)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
.const SIZEOF_WORD = 2
|
|
.const SIZEOF_BYTE = 1
|
|
// Top of the heap used by malloc()
|
|
.label HEAP_TOP = $a000
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
// The number of buckets in our bucket sort
|
|
.const NUM_BUCKETS = $30
|
|
.const NUM_SQUARES = $30
|
|
.label heap_head = $2e
|
|
.label SQUARES = $75
|
|
// Screen containing distance to center
|
|
.label SCREEN_DIST = $32
|
|
// Screen containing angle to center
|
|
.label SCREEN_ANGLE = $34
|
|
// Array containing the bucket size for each of the 256 buckets
|
|
.label BUCKET_SIZES = $36
|
|
// @begin
|
|
bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
b1_from_bbegin:
|
|
jmp b1
|
|
// @1
|
|
b1:
|
|
// [2] call malloc
|
|
// [190] phi from @1 to malloc [phi:@1->malloc]
|
|
malloc_from_b1:
|
|
// [190] phi (word) malloc::size#4 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta malloc.size
|
|
lda #>$3e8
|
|
sta malloc.size+1
|
|
// [190] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1
|
|
lda #<HEAP_TOP
|
|
sta heap_head
|
|
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
|
|
// [190] phi from @4 to malloc [phi:@4->malloc]
|
|
malloc_from_b4:
|
|
// [190] phi (word) malloc::size#4 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta malloc.size
|
|
lda #>$3e8
|
|
sta malloc.size+1
|
|
// [190] phi (byte*) heap_head#13 = (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
|
|
// [190] phi from @2 to malloc [phi:@2->malloc]
|
|
malloc_from_b2:
|
|
// [190] phi (word) malloc::size#4 = (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
|
|
// [190] phi (byte*) heap_head#13 = (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] phi from @6 to @3 [phi:@6->@3]
|
|
b3_from_b6:
|
|
jmp b3
|
|
// @3
|
|
b3:
|
|
// [10] call main
|
|
jsr main
|
|
// [11] phi from @3 to @end [phi:@3->@end]
|
|
bend_from_b3:
|
|
jmp bend
|
|
// @end
|
|
bend:
|
|
// main
|
|
main: {
|
|
// [12] (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
|
|
// [13] call init_dist_screen
|
|
// [105] phi from main to init_dist_screen [phi:main->init_dist_screen]
|
|
init_dist_screen_from_main:
|
|
jsr init_dist_screen
|
|
jmp b1
|
|
// main::@1
|
|
b1:
|
|
// [14] (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
|
|
// [15] call init_angle_screen
|
|
jsr init_angle_screen
|
|
// [16] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
b2_from_b1:
|
|
jmp b2
|
|
// main::@2
|
|
b2:
|
|
// [17] call init_buckets
|
|
// [19] phi from main::@2 to init_buckets [phi:main::@2->init_buckets]
|
|
init_buckets_from_b2:
|
|
jsr init_buckets
|
|
jmp breturn
|
|
// main::@return
|
|
breturn:
|
|
// [18] return
|
|
rts
|
|
}
|
|
// init_buckets
|
|
//const word*[] BUCKETS = malloc(NUM_BUCKETS*sizeof(word*));
|
|
init_buckets: {
|
|
.label i = 2
|
|
.label dist = 3
|
|
.label i1 = 5
|
|
// [20] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
|
|
b1_from_init_buckets:
|
|
// [20] 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
|
|
// [20] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
|
|
b1_from_b1:
|
|
// [20] 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:
|
|
// [21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1
|
|
lda #0
|
|
ldy i
|
|
sta (BUCKET_SIZES),y
|
|
// [22] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1
|
|
inc i
|
|
// [23] 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
|
|
jmp b2
|
|
// init_buckets::@2
|
|
b2:
|
|
// [24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
|
|
// first find bucket sizes - by counting number of chars with each distance value
|
|
lda SCREEN_DIST
|
|
sta dist
|
|
lda SCREEN_DIST+1
|
|
sta dist+1
|
|
// [25] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
|
|
b3_from_b2:
|
|
// [25] 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
|
|
// [25] phi (byte*) init_buckets::dist#2 = (byte*) init_buckets::dist#0 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy
|
|
jmp b3
|
|
// [25] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
|
|
b3_from_b3:
|
|
// [25] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy
|
|
// [25] phi (byte*) init_buckets::dist#2 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy
|
|
jmp b3
|
|
// init_buckets::@3
|
|
b3:
|
|
// [26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2
|
|
ldy #0
|
|
lda (dist),y
|
|
tay
|
|
lda (BUCKET_SIZES),y
|
|
clc
|
|
adc #1
|
|
sta (BUCKET_SIZES),y
|
|
// [27] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#2 -- pbuz1=_inc_pbuz1
|
|
inc dist
|
|
bne !+
|
|
inc dist+1
|
|
!:
|
|
// [28] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1
|
|
inc i1
|
|
bne !+
|
|
inc i1+1
|
|
!:
|
|
// [29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1
|
|
lda i1+1
|
|
cmp #>$3e8
|
|
bne b3_from_b3
|
|
lda i1
|
|
cmp #<$3e8
|
|
bne b3_from_b3
|
|
jmp breturn
|
|
// init_buckets::@return
|
|
breturn:
|
|
// [30] 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($38) screen)
|
|
init_angle_screen: {
|
|
.label _2 = $3a
|
|
.label _3 = $3b
|
|
.label _6 = $3e
|
|
.label _10 = $49
|
|
.label _12 = $4c
|
|
.label _13 = $4d
|
|
.label _14 = $4e
|
|
.label screen = $38
|
|
.label screen_topline = $a
|
|
.label screen_bottomline = 8
|
|
.label xw = $3c
|
|
.label yw = $3f
|
|
.label angle_w = $47
|
|
.label ang_w = $4b
|
|
.label x = $c
|
|
.label xb = $d
|
|
.label y = 7
|
|
// [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$c
|
|
sta screen_topline
|
|
lda screen+1
|
|
adc #>$28*$c
|
|
sta screen_topline+1
|
|
// [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$c
|
|
sta screen_bottomline
|
|
lda screen+1
|
|
adc #>$28*$c
|
|
sta screen_bottomline+1
|
|
// [33] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
|
|
b1_from_init_angle_screen:
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
|
|
b1_from_b3:
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] 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:
|
|
// [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
|
|
b2_from_b1:
|
|
// [34] 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
|
|
// [34] 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
|
|
// [34] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
|
|
b2_from_b4:
|
|
// [34] 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
|
|
// [34] 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:
|
|
// [35] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda x
|
|
asl
|
|
sta _2
|
|
// [36] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuz1=vbuc1_minus_vbuz2
|
|
lda #$27
|
|
sec
|
|
sbc _2
|
|
sta _3
|
|
// [37] (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
|
|
// [38] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda y
|
|
asl
|
|
sta _6
|
|
// [39] (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
|
|
// [40] (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
|
|
// [41] (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
|
|
// [42] call atan2_16
|
|
jsr atan2_16
|
|
// [43] (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
|
|
sta atan2_16.return_2+1
|
|
jmp b4
|
|
// init_angle_screen::@4
|
|
b4:
|
|
// [44] (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
|
|
// [45] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc angle_w
|
|
sta _10
|
|
lda #0
|
|
adc angle_w+1
|
|
sta _10+1
|
|
// [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2
|
|
lda _10+1
|
|
sta ang_w
|
|
// [47] *((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
|
|
// [48] (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
|
|
// [49] *((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
|
|
// [50] (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
|
|
// [51] *((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
|
|
// [52] (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
|
|
// [53] *((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
|
|
// [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc x
|
|
// [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec xb
|
|
// [56] 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:
|
|
// [57] (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
|
|
sta screen_topline
|
|
lda screen_topline+1
|
|
sbc #>$28
|
|
sta screen_topline+1
|
|
// [58] (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
|
|
sta screen_bottomline
|
|
bcc !+
|
|
inc screen_bottomline+1
|
|
!:
|
|
// [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1
|
|
inc y
|
|
// [60] 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:
|
|
// [61] 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: {
|
|
.label _2 = $e
|
|
.label _7 = $10
|
|
.label _23 = $50
|
|
.label _24 = $4f
|
|
.label yi = $e
|
|
.label xi = $10
|
|
.label angle = $15
|
|
.label xd = $1a
|
|
.label yd = $18
|
|
.label shift = $17
|
|
.label angle_2 = $13
|
|
.label angle_3 = $13
|
|
.label i = $12
|
|
.label return = $15
|
|
.label x = $41
|
|
.label y = $43
|
|
.label return_2 = $45
|
|
.label angle_6 = $13
|
|
.label angle_12 = $13
|
|
.label angle_13 = $13
|
|
// [62] 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:
|
|
// [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc y
|
|
sta _2
|
|
lda #0
|
|
sbc y+1
|
|
sta _2+1
|
|
// [64] 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:
|
|
// [64] 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:
|
|
// [65] 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:
|
|
// [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc x
|
|
sta _7
|
|
lda #0
|
|
sbc x+1
|
|
sta _7+1
|
|
// [67] 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:
|
|
// [67] 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:
|
|
// [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
b10_from_b6:
|
|
// [68] 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
|
|
// [68] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta i
|
|
// [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [68] 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:
|
|
// [69] 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
|
|
// [70] 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:
|
|
// [70] 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:
|
|
// [71] (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
|
|
// [72] 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:
|
|
// [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc angle
|
|
sta angle
|
|
lda #>$8000
|
|
sbc angle+1
|
|
sta angle+1
|
|
// [74] 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:
|
|
// [74] 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:
|
|
// [75] 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:
|
|
// [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
|
|
sec
|
|
lda #0
|
|
sbc angle
|
|
sta angle
|
|
lda #0
|
|
sbc angle+1
|
|
sta angle+1
|
|
// [77] 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:
|
|
// [77] 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:
|
|
// [78] return
|
|
rts
|
|
// atan2_16::@11
|
|
b11:
|
|
// [79] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2
|
|
lda i
|
|
sta shift
|
|
// [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda xi
|
|
sta xd
|
|
lda xi+1
|
|
sta xd+1
|
|
// [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda yi
|
|
sta yd
|
|
lda yi+1
|
|
sta yd+1
|
|
// [82] 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:
|
|
// [82] 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
|
|
// [82] 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
|
|
// [82] 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:
|
|
// [83] 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:
|
|
// [84] 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:
|
|
// [85] (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
|
|
// [86] (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
|
|
// [87] 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:
|
|
// [87] 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
|
|
// [87] 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:
|
|
// [88] 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:
|
|
// [89] (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
|
|
sta xi
|
|
lda xi+1
|
|
sbc yd+1
|
|
sta xi+1
|
|
// [90] (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
|
|
sta yi
|
|
lda yi+1
|
|
adc xd+1
|
|
sta yi+1
|
|
// [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda i
|
|
asl
|
|
sta _24
|
|
// [92] (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
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta angle_3
|
|
lda angle_3+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta angle_3+1
|
|
// [93] 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:
|
|
// [93] 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
|
|
// [93] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [93] 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:
|
|
// [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1
|
|
inc i
|
|
// [95] 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
|
|
// [68] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
b10_from_b19:
|
|
// [68] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [68] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [68] 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:
|
|
// [96] (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
|
|
sta xi
|
|
lda xi+1
|
|
adc yd+1
|
|
sta xi+1
|
|
// [97] (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
|
|
sta yi
|
|
lda yi+1
|
|
sbc xd+1
|
|
sta yi+1
|
|
// [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda i
|
|
asl
|
|
sta _23
|
|
// [99] (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
|
|
adc CORDIC_ATAN2_ANGLES_16,y
|
|
sta angle_2
|
|
lda angle_2+1
|
|
adc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta angle_2+1
|
|
jmp b19_from_b18
|
|
// atan2_16::@14
|
|
b14:
|
|
// [100] (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
|
|
ror xd
|
|
lda xd+1
|
|
cmp #$80
|
|
ror xd+1
|
|
ror xd
|
|
// [101] (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
|
|
ror yd
|
|
lda yd+1
|
|
cmp #$80
|
|
ror yd+1
|
|
ror yd
|
|
// [102] (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:
|
|
// [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
|
|
lda x
|
|
sta xi
|
|
lda x+1
|
|
sta xi+1
|
|
jmp b6_from_b4
|
|
// atan2_16::@1
|
|
b1:
|
|
// [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
|
|
lda y
|
|
sta yi
|
|
lda y+1
|
|
sta yi+1
|
|
jmp b3_from_b1
|
|
}
|
|
// init_dist_screen
|
|
// Populates 1000 bytes (a screen) with values representing the distance to the center.
|
|
// The actual value stored is distance*2 to increase precision
|
|
// init_dist_screen(byte* zeropage($1d) screen)
|
|
init_dist_screen: {
|
|
.label _5 = $21
|
|
.label _7 = $21
|
|
.label _13 = $24
|
|
.label _15 = $24
|
|
.label screen = $1d
|
|
.label screen_bottomline = $1f
|
|
.label y2 = $51
|
|
.label yd = $21
|
|
.label yds = $54
|
|
.label x2 = $56
|
|
.label xd = $24
|
|
.label xds = $59
|
|
.label ds = $5b
|
|
.label d = $60
|
|
.label x = $22
|
|
.label xb = $23
|
|
.label screen_topline = $1d
|
|
.label y = $1c
|
|
// [106] call init_squares
|
|
// [177] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
|
|
init_squares_from_init_dist_screen:
|
|
jsr init_squares
|
|
jmp b10
|
|
// init_dist_screen::@10
|
|
b10:
|
|
// [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$18
|
|
sta screen_bottomline
|
|
lda screen+1
|
|
adc #>$28*$18
|
|
sta screen_bottomline+1
|
|
// [108] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1]
|
|
b1_from_b10:
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
|
|
b1_from_b9:
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] 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:
|
|
// [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda y
|
|
asl
|
|
sta y2
|
|
// [110] 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:
|
|
// [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2
|
|
lda #$18
|
|
sec
|
|
sbc y2
|
|
sta _5
|
|
// [112] 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:
|
|
// [112] 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:
|
|
// [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2
|
|
lda yd
|
|
sta sqr.val
|
|
// [114] call sqr
|
|
// [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
|
|
sqr_from_b4:
|
|
// [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy
|
|
jsr sqr
|
|
// [115] (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 b11
|
|
// init_dist_screen::@11
|
|
b11:
|
|
// [116] (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
|
|
// [117] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5]
|
|
b5_from_b11:
|
|
// [117] 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
|
|
// [117] 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
|
|
// [117] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5]
|
|
b5_from_b13:
|
|
// [117] 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
|
|
// [117] 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:
|
|
// [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda x
|
|
asl
|
|
sta x2
|
|
// [119] 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:
|
|
// [120] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2
|
|
lda #$27
|
|
sec
|
|
sbc x2
|
|
sta _13
|
|
// [121] 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:
|
|
// [121] 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:
|
|
// [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2
|
|
lda xd
|
|
sta sqr.val
|
|
// [123] call sqr
|
|
// [173] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
|
|
sqr_from_b8:
|
|
// [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy
|
|
jsr sqr
|
|
// [124] (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 b12
|
|
// init_dist_screen::@12
|
|
b12:
|
|
// [125] (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
|
|
// [126] (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
|
|
sta ds
|
|
lda xds+1
|
|
adc yds+1
|
|
sta ds+1
|
|
// [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2
|
|
lda ds
|
|
sta sqrt.val
|
|
lda ds+1
|
|
sta sqrt.val+1
|
|
// [128] call sqrt
|
|
jsr sqrt
|
|
// [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2
|
|
lda sqrt.return
|
|
sta sqrt.return_2
|
|
jmp b13
|
|
// init_dist_screen::@13
|
|
b13:
|
|
// [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2
|
|
lda sqrt.return_2
|
|
sta d
|
|
// [131] *((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
|
|
// [132] *((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
|
|
// [133] *((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
|
|
// [134] *((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
|
|
// [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc x
|
|
// [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec xb
|
|
// [137] 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_b13
|
|
jmp b9
|
|
// init_dist_screen::@9
|
|
b9:
|
|
// [138] (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
|
|
sta screen_topline
|
|
bcc !+
|
|
inc screen_topline+1
|
|
!:
|
|
// [139] (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
|
|
sta screen_bottomline
|
|
lda screen_bottomline+1
|
|
sbc #>$28
|
|
sta screen_bottomline+1
|
|
// [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1
|
|
inc y
|
|
// [141] 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:
|
|
// [142] return
|
|
rts
|
|
// init_dist_screen::@6
|
|
b6:
|
|
// [143] (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:
|
|
// [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1
|
|
lax y2
|
|
axs #$18
|
|
stx _7
|
|
jmp b4_from_b2
|
|
}
|
|
// sqrt
|
|
// 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($5d) val)
|
|
sqrt: {
|
|
.label _1 = $69
|
|
.label _3 = $67
|
|
.label found = $65
|
|
.label return = $6b
|
|
.label val = $5d
|
|
.label return_2 = $5f
|
|
// [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2
|
|
lda val
|
|
sta bsearch16u.key
|
|
lda val+1
|
|
sta bsearch16u.key+1
|
|
// [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2
|
|
lda SQUARES
|
|
sta bsearch16u.items
|
|
lda SQUARES+1
|
|
sta bsearch16u.items+1
|
|
// [147] call bsearch16u
|
|
// [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
|
|
bsearch16u_from_sqrt:
|
|
jsr bsearch16u
|
|
// [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2
|
|
lda bsearch16u.return
|
|
sta bsearch16u.return_3
|
|
lda bsearch16u.return+1
|
|
sta bsearch16u.return_3+1
|
|
jmp b1
|
|
// sqrt::@1
|
|
b1:
|
|
// [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2
|
|
lda bsearch16u.return_3
|
|
sta found
|
|
lda bsearch16u.return_3+1
|
|
sta found+1
|
|
// [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3
|
|
lda found
|
|
sec
|
|
sbc SQUARES
|
|
sta _3
|
|
lda found+1
|
|
sbc SQUARES+1
|
|
sta _3+1
|
|
// [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1
|
|
lda _3+1
|
|
lsr
|
|
sta _1+1
|
|
lda _3
|
|
ror
|
|
sta _1
|
|
// [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2
|
|
lda _1
|
|
sta return
|
|
jmp breturn
|
|
// sqrt::@return
|
|
breturn:
|
|
// [153] return
|
|
rts
|
|
}
|
|
// bsearch16u
|
|
// Searches an array of nitems unsigned words, the initial member of which is pointed to by base, for a member that matches the value key.
|
|
// - key - The value to look for
|
|
// - 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($61) key, word* zeropage($25) items, byte zeropage($27) num)
|
|
bsearch16u: {
|
|
.label _2 = $25
|
|
.label _6 = $6c
|
|
.label _16 = $6d
|
|
.label pivot = $6e
|
|
.label result = $70
|
|
.label return = $25
|
|
.label num = $27
|
|
.label items = $25
|
|
.label key = $61
|
|
.label return_3 = $63
|
|
// [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
|
|
b3_from_bsearch16u:
|
|
// [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy
|
|
// [155] 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:
|
|
// [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1
|
|
lda num
|
|
bne b4
|
|
jmp b5
|
|
// bsearch16u::@5
|
|
b5:
|
|
// [157] 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
|
|
bne !+
|
|
dey
|
|
lda (items),y
|
|
cmp key
|
|
beq b2_from_b5
|
|
!:
|
|
bcc b2_from_b5
|
|
jmp b1
|
|
// bsearch16u::@1
|
|
b1:
|
|
// [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1
|
|
lda _2
|
|
sec
|
|
sbc #<1*SIZEOF_WORD
|
|
sta _2
|
|
lda _2+1
|
|
sbc #>1*SIZEOF_WORD
|
|
sta _2+1
|
|
// [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
|
|
b2_from_b1:
|
|
b2_from_b5:
|
|
// [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy
|
|
jmp b2
|
|
// bsearch16u::@2
|
|
b2:
|
|
// [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
|
|
breturn_from_b2:
|
|
breturn_from_b8:
|
|
// [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy
|
|
jmp breturn
|
|
// bsearch16u::@return
|
|
breturn:
|
|
// [161] return
|
|
rts
|
|
// bsearch16u::@4
|
|
b4:
|
|
// [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1
|
|
lda num
|
|
lsr
|
|
sta _6
|
|
// [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda _6
|
|
asl
|
|
sta _16
|
|
// [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3
|
|
lda _16
|
|
clc
|
|
adc items
|
|
sta pivot
|
|
lda #0
|
|
adc items+1
|
|
sta pivot+1
|
|
// [165] (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
|
|
sbc (pivot),y
|
|
sta result
|
|
lda key+1
|
|
iny
|
|
sbc (pivot),y
|
|
sta result+1
|
|
// [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1
|
|
lda result+1
|
|
bne b6
|
|
lda result
|
|
bne b6
|
|
jmp b8
|
|
// bsearch16u::@8
|
|
b8:
|
|
// [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2
|
|
lda pivot
|
|
sta return
|
|
lda pivot+1
|
|
sta return+1
|
|
jmp breturn_from_b8
|
|
// bsearch16u::@6
|
|
b6:
|
|
// [168] 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 !+
|
|
lda result
|
|
beq b7_from_b6
|
|
!:
|
|
jmp b9
|
|
// bsearch16u::@9
|
|
b9:
|
|
// [169] (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
|
|
sta items
|
|
lda #0
|
|
adc pivot+1
|
|
sta items+1
|
|
// [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1
|
|
dec num
|
|
// [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
|
|
b7_from_b6:
|
|
b7_from_b9:
|
|
// [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy
|
|
// [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy
|
|
jmp b7
|
|
// bsearch16u::@7
|
|
b7:
|
|
// [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1
|
|
lsr num
|
|
// [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
|
|
b3_from_b7:
|
|
// [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy
|
|
// [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy
|
|
jmp b3
|
|
}
|
|
// sqr
|
|
// Find the square of a byte value
|
|
// Uses a table of squares that must be initialized by calling init_squares()
|
|
// sqr(byte zeropage($28) val)
|
|
sqr: {
|
|
.label _0 = $72
|
|
.label return = $73
|
|
.label val = $28
|
|
.label return_2 = $52
|
|
.label return_3 = $57
|
|
// [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda val
|
|
asl
|
|
sta _0
|
|
// [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3
|
|
ldy _0
|
|
lda (SQUARES),y
|
|
sta return
|
|
iny
|
|
lda (SQUARES),y
|
|
sta return+1
|
|
jmp breturn
|
|
// sqr::@return
|
|
breturn:
|
|
// [176] return
|
|
rts
|
|
}
|
|
// init_squares
|
|
// Initialize squares table
|
|
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
|
|
init_squares: {
|
|
.label _3 = $77
|
|
.label _4 = $78
|
|
.label squares = $2b
|
|
.label sqr = $29
|
|
.label i = $2d
|
|
// [178] call malloc
|
|
// [190] phi from init_squares to malloc [phi:init_squares->malloc]
|
|
malloc_from_init_squares:
|
|
// [190] phi (word) malloc::size#4 = (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
|
|
// [190] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy
|
|
jsr malloc
|
|
jmp b2
|
|
// init_squares::@2
|
|
b2:
|
|
// [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
|
|
lda malloc.mem
|
|
sta SQUARES
|
|
lda malloc.mem+1
|
|
sta SQUARES+1
|
|
// [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2
|
|
lda SQUARES
|
|
sta squares
|
|
lda SQUARES+1
|
|
sta squares+1
|
|
// [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
|
|
b1_from_b2:
|
|
// [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta i
|
|
// [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy
|
|
// [181] 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
|
|
// [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
|
|
b1_from_b1:
|
|
// [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy
|
|
// [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy
|
|
// [181] 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:
|
|
// [182] *((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
|
|
// [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1
|
|
lda #SIZEOF_WORD
|
|
clc
|
|
adc squares
|
|
sta squares
|
|
bcc !+
|
|
inc squares+1
|
|
!:
|
|
// [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
|
|
lda i
|
|
asl
|
|
sta _3
|
|
// [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1
|
|
ldy _3
|
|
iny
|
|
sty _4
|
|
// [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2
|
|
lda _4
|
|
clc
|
|
adc sqr
|
|
sta sqr
|
|
bcc !+
|
|
inc sqr+1
|
|
!:
|
|
// [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1
|
|
inc i
|
|
// [188] 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:
|
|
// [189] return
|
|
rts
|
|
}
|
|
// malloc
|
|
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
|
|
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
|
|
// malloc(word zeropage($30) size)
|
|
malloc: {
|
|
.label mem = $79
|
|
.label size = $30
|
|
// [191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4 -- pbuz1=pbuz2_minus_vwuz3
|
|
lda heap_head
|
|
sec
|
|
sbc size
|
|
sta mem
|
|
lda heap_head+1
|
|
sbc size+1
|
|
sta mem+1
|
|
// [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2
|
|
lda mem
|
|
sta heap_head
|
|
lda mem+1
|
|
sta heap_head+1
|
|
jmp breturn
|
|
// malloc::@return
|
|
breturn:
|
|
// [193] return
|
|
rts
|
|
}
|
|
// File Data
|
|
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
|
CORDIC_ATAN2_ANGLES_16:
|
|
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
|
|
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
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 [12] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 heap_head#1 ] ( main:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a
|
|
Statement [14] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 ] ( main:10 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a
|
|
Statement [21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_buckets::i#2 ] ( main:10::init_buckets:17 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_buckets::i#2 ] ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ init_buckets::i#2 init_buckets::i#1 ]
|
|
Statement [24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ BUCKET_SIZES#0 init_buckets::dist#0 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#0 ] ) always clobbers reg byte a
|
|
Statement [26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) [ BUCKET_SIZES#0 init_buckets::dist#2 init_buckets::i1#2 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#2 init_buckets::i1#2 ] ) always clobbers reg byte a reg byte y
|
|
Statement [29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 init_buckets::dist#1 init_buckets::i1#1 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#1 init_buckets::i1#1 ] ) always clobbers reg byte a
|
|
Statement [31] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a
|
|
Statement [32] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a
|
|
Statement [35] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$2 ] ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Statement [36] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$3 ] ) always clobbers reg byte a
|
|
Statement [37] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Statement [38] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$6 ] ) always clobbers reg byte a
|
|
Statement [39] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [40] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [41] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [43] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [44] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle_w#0 ] ) always clobbers reg byte a
|
|
Statement [45] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$10 ] ) always clobbers reg byte a
|
|
Statement [46] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [47] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ]
|
|
Statement [48] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ]
|
|
Statement [49] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [50] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [51] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [52] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [53] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [57] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a
|
|
Statement [58] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a
|
|
Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::$2 ] ) always clobbers reg byte a
|
|
Statement [65] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 ] ) always clobbers reg byte a
|
|
Statement [66] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a
|
|
Statement [69] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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:18 [ atan2_16::i#2 atan2_16::i#1 ]
|
|
Statement [71] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::angle#1 ] ) always clobbers reg byte a
|
|
Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a
|
|
Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a
|
|
Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle#11 ] ) always clobbers reg byte a
|
|
Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle#5 ] ) always clobbers reg byte a
|
|
Statement [80] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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:23 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
Statement [81] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [85] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [86] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [88] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [89] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [90] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a
|
|
Statement [91] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [92] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a
|
|
Statement [96] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [97] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a
|
|
Statement [98] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [99] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a
|
|
Statement [100] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [101] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [103] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a
|
|
Statement [104] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#16 ] ) always clobbers reg byte a
|
|
Statement [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a
|
|
Statement [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
Statement [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [115] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ 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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
Statement [120] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [124] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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:39 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
|
|
Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [165] (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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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:39 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
|
|
Statement [166] 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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [168] 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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:10::init_dist_screen:13::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:10::init_dist_screen:13::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:10::init_dist_screen:13::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a
|
|
Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a
|
|
Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 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:45 [ init_squares::i#2 init_squares::i#1 ]
|
|
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:45 [ init_squares::i#2 init_squares::i#1 ]
|
|
Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a
|
|
Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a
|
|
Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a
|
|
Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] main:10::init_dist_screen:13::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a
|
|
Statement [192] (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 ] main:10::init_dist_screen:13::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#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 [12] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 heap_head#1 ] ( main:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a
|
|
Statement [14] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 ] ( main:10 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a
|
|
Statement [21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_buckets::i#2 ] ( main:10::init_buckets:17 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_buckets::i#2 ] ) always clobbers reg byte a
|
|
Statement [24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ BUCKET_SIZES#0 init_buckets::dist#0 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#0 ] ) always clobbers reg byte a
|
|
Statement [26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) [ BUCKET_SIZES#0 init_buckets::dist#2 init_buckets::i1#2 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#2 init_buckets::i1#2 ] ) always clobbers reg byte a reg byte y
|
|
Statement [29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 init_buckets::dist#1 init_buckets::i1#1 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#1 init_buckets::i1#1 ] ) always clobbers reg byte a
|
|
Statement [31] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a
|
|
Statement [32] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a
|
|
Statement [35] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$2 ] ) always clobbers reg byte a
|
|
Statement [36] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$3 ] ) always clobbers reg byte a
|
|
Statement [37] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [38] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$6 ] ) always clobbers reg byte a
|
|
Statement [39] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [40] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [41] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [43] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [44] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle_w#0 ] ) always clobbers reg byte a
|
|
Statement [45] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$10 ] ) always clobbers reg byte a
|
|
Statement [46] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [47] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a reg byte y
|
|
Statement [48] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [49] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [50] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [51] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [52] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [53] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [57] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a
|
|
Statement [58] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a
|
|
Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::$2 ] ) always clobbers reg byte a
|
|
Statement [65] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 ] ) always clobbers reg byte a
|
|
Statement [66] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a
|
|
Statement [69] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a
|
|
Statement [71] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::angle#1 ] ) always clobbers reg byte a
|
|
Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a
|
|
Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a
|
|
Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle#11 ] ) always clobbers reg byte a
|
|
Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle#5 ] ) always clobbers reg byte a
|
|
Statement [80] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [81] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [85] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [86] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [88] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [89] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [90] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a
|
|
Statement [91] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [92] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a
|
|
Statement [96] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [97] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a
|
|
Statement [98] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [99] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a
|
|
Statement [100] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [101] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [103] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a
|
|
Statement [104] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#16 ] ) always clobbers reg byte a
|
|
Statement [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a
|
|
Statement [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [115] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ 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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [120] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [124] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [131] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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:96 [ init_dist_screen::d#0 ]
|
|
Statement [132] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [133] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [134] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [165] (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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [166] 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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [168] 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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:10::init_dist_screen:13::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:10::init_dist_screen:13::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:10::init_dist_screen:13::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a
|
|
Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a
|
|
Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y
|
|
Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a
|
|
Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a
|
|
Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a
|
|
Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] main:10::init_dist_screen:13::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a
|
|
Statement [192] (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 ] main:10::init_dist_screen:13::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#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 [12] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 heap_head#1 ] ( main:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a
|
|
Statement [14] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 ] ( main:10 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 ] ) always clobbers reg byte a
|
|
Statement [21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_buckets::i#2 ] ( main:10::init_buckets:17 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_buckets::i#2 ] ) always clobbers reg byte a
|
|
Statement [24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ BUCKET_SIZES#0 init_buckets::dist#0 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#0 ] ) always clobbers reg byte a
|
|
Statement [26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) [ BUCKET_SIZES#0 init_buckets::dist#2 init_buckets::i1#2 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#2 init_buckets::i1#2 ] ) always clobbers reg byte a reg byte y
|
|
Statement [29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 init_buckets::dist#1 init_buckets::i1#1 ] ( main:10::init_buckets:17 [ BUCKET_SIZES#0 init_buckets::dist#1 init_buckets::i1#1 ] ) always clobbers reg byte a
|
|
Statement [31] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a
|
|
Statement [32] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a
|
|
Statement [35] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$2 ] ) always clobbers reg byte a
|
|
Statement [36] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$3 ] ) always clobbers reg byte a
|
|
Statement [37] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [38] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$6 ] ) always clobbers reg byte a
|
|
Statement [39] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [40] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [41] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [43] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [44] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle_w#0 ] ) always clobbers reg byte a
|
|
Statement [45] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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::$10 ] ) always clobbers reg byte a
|
|
Statement [46] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [47] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a reg byte y
|
|
Statement [48] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [49] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [50] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [51] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [52] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [53] *((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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte y
|
|
Statement [57] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::y#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a
|
|
Statement [58] (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:10::init_angle_screen:15 [ SCREEN_DIST#0 BUCKET_SIZES#0 init_angle_screen::y#4 init_angle_screen::screen_bottomline#1 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a
|
|
Statement [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 ] ) always clobbers reg byte a
|
|
Statement [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::$2 ] ) always clobbers reg byte a
|
|
Statement [65] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 ] ) always clobbers reg byte a
|
|
Statement [66] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a
|
|
Statement [69] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a
|
|
Statement [71] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::angle#1 ] ) always clobbers reg byte a
|
|
Statement [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a
|
|
Statement [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a
|
|
Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle#11 ] ) always clobbers reg byte a
|
|
Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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::angle#5 ] ) always clobbers reg byte a
|
|
Statement [80] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [81] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [85] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [86] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [88] 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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [89] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [90] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a
|
|
Statement [91] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [92] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a
|
|
Statement [96] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [97] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a
|
|
Statement [98] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [99] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a
|
|
Statement [100] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [101] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 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 [103] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a
|
|
Statement [104] (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:10::init_angle_screen:15::atan2_16:42 [ SCREEN_DIST#0 BUCKET_SIZES#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 atan2_16::yi#16 ] ) always clobbers reg byte a
|
|
Statement [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a
|
|
Statement [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 init_dist_screen::$5 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [115] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#2 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ 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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [120] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [124] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [126] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [131] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [132] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [133] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [134] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::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:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [138] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#10 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [139] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:10::init_dist_screen:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 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 [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqrt:128 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [165] (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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [166] 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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [168] 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:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:10::init_dist_screen:13::sqrt:128::bsearch16u:147 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:10::init_dist_screen:13::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 SQUARES#1 sqr::$0 ] main:10::init_dist_screen:13::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:10::init_dist_screen:13::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::screen_topline#10 init_dist_screen::screen_bottomline#10 sqr::return#0 SQUARES#1 ] main:10::init_dist_screen:13::sqr:123 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::y#10 init_dist_screen::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 [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a
|
|
Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a
|
|
Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y
|
|
Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a
|
|
Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a
|
|
Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:10::init_dist_screen:13::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a
|
|
Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] main:10::init_dist_screen:13::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a
|
|
Statement [192] (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 ] main:10::init_dist_screen:13::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a
|
|
Potential registers zp ZP_BYTE:2 [ init_buckets::i#2 init_buckets::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:3 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ] : zp ZP_WORD:3 ,
|
|
Potential registers zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp ZP_WORD:5 ,
|
|
Potential registers zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ] : zp ZP_BYTE:7 , reg byte x ,
|
|
Potential registers zp ZP_WORD:8 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:8 ,
|
|
Potential registers zp ZP_WORD:10 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:10 ,
|
|
Potential registers zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp ZP_BYTE:12 , reg byte x ,
|
|
Potential registers zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp ZP_BYTE:13 , reg byte x ,
|
|
Potential registers zp ZP_WORD:14 [ 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:14 ,
|
|
Potential registers zp ZP_WORD:16 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp ZP_WORD:16 ,
|
|
Potential registers zp ZP_BYTE:18 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:18 , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:19 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:19 ,
|
|
Potential registers zp ZP_WORD:21 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:21 ,
|
|
Potential registers zp ZP_BYTE:23 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp ZP_BYTE:23 , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:24 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:24 ,
|
|
Potential registers zp ZP_WORD:26 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:26 ,
|
|
Potential registers zp ZP_BYTE:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:28 , reg byte x ,
|
|
Potential registers zp ZP_WORD:29 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] : zp ZP_WORD:29 ,
|
|
Potential registers zp ZP_WORD:31 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] : zp ZP_WORD:31 ,
|
|
Potential registers zp ZP_BYTE:33 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp ZP_BYTE:34 , reg byte x ,
|
|
Potential registers zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp ZP_BYTE:35 , reg byte x ,
|
|
Potential registers zp ZP_BYTE:36 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:37 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp ZP_WORD:37 ,
|
|
Potential registers zp ZP_BYTE:39 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp ZP_BYTE:39 , reg byte x ,
|
|
Potential registers zp ZP_BYTE:40 [ sqr::val#2 sqr::val#0 sqr::val#1 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:41 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:41 ,
|
|
Potential registers zp ZP_WORD:43 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:43 ,
|
|
Potential registers zp ZP_BYTE:45 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:45 , reg byte x ,
|
|
Potential registers zp ZP_WORD:46 [ heap_head#13 heap_head#1 ] : zp ZP_WORD:46 ,
|
|
Potential registers zp ZP_WORD:48 [ malloc::size#4 ] : zp ZP_WORD:48 ,
|
|
Potential registers zp ZP_WORD:50 [ SCREEN_DIST#0 ] : zp ZP_WORD:50 ,
|
|
Potential registers zp ZP_WORD:52 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:52 ,
|
|
Potential registers zp ZP_WORD:54 [ BUCKET_SIZES#0 ] : zp ZP_WORD:54 ,
|
|
Potential registers zp ZP_WORD:56 [ init_angle_screen::screen#0 ] : zp ZP_WORD:56 ,
|
|
Potential registers zp ZP_BYTE:58 [ init_angle_screen::$2 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:59 [ init_angle_screen::$3 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:60 [ init_angle_screen::xw#0 ] : zp ZP_WORD:60 ,
|
|
Potential registers zp ZP_BYTE:62 [ init_angle_screen::$6 ] : zp ZP_BYTE:62 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:63 [ init_angle_screen::yw#0 ] : zp ZP_WORD:63 ,
|
|
Potential registers zp ZP_WORD:65 [ atan2_16::x#0 ] : zp ZP_WORD:65 ,
|
|
Potential registers zp ZP_WORD:67 [ atan2_16::y#0 ] : zp ZP_WORD:67 ,
|
|
Potential registers zp ZP_WORD:69 [ atan2_16::return#2 ] : zp ZP_WORD:69 ,
|
|
Potential registers zp ZP_WORD:71 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:71 ,
|
|
Potential registers zp ZP_WORD:73 [ init_angle_screen::$10 ] : zp ZP_WORD:73 ,
|
|
Potential registers zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:75 , reg byte x ,
|
|
Potential registers zp ZP_BYTE:76 [ init_angle_screen::$12 ] : zp ZP_BYTE:76 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:77 [ init_angle_screen::$13 ] : zp ZP_BYTE:77 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:78 [ init_angle_screen::$14 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:79 [ atan2_16::$24 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:80 [ atan2_16::$23 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:81 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:81 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:82 [ sqr::return#2 ] : zp ZP_WORD:82 ,
|
|
Potential registers zp ZP_WORD:84 [ init_dist_screen::yds#0 ] : zp ZP_WORD:84 ,
|
|
Potential registers zp ZP_BYTE:86 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:87 [ sqr::return#3 ] : zp ZP_WORD:87 ,
|
|
Potential registers zp ZP_WORD:89 [ init_dist_screen::xds#0 ] : zp ZP_WORD:89 ,
|
|
Potential registers zp ZP_WORD:91 [ init_dist_screen::ds#0 ] : zp ZP_WORD:91 ,
|
|
Potential registers zp ZP_WORD:93 [ sqrt::val#0 ] : zp ZP_WORD:93 ,
|
|
Potential registers zp ZP_BYTE:95 [ sqrt::return#2 ] : zp ZP_BYTE:95 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:96 [ init_dist_screen::d#0 ] : zp ZP_BYTE:96 , reg byte a , reg byte x ,
|
|
Potential registers zp ZP_WORD:97 [ bsearch16u::key#0 ] : zp ZP_WORD:97 ,
|
|
Potential registers zp ZP_WORD:99 [ bsearch16u::return#3 ] : zp ZP_WORD:99 ,
|
|
Potential registers zp ZP_WORD:101 [ sqrt::found#0 ] : zp ZP_WORD:101 ,
|
|
Potential registers zp ZP_WORD:103 [ sqrt::$3 ] : zp ZP_WORD:103 ,
|
|
Potential registers zp ZP_WORD:105 [ sqrt::$1 ] : zp ZP_WORD:105 ,
|
|
Potential registers zp ZP_BYTE:107 [ sqrt::return#0 ] : zp ZP_BYTE:107 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:108 [ bsearch16u::$6 ] : zp ZP_BYTE:108 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:109 [ bsearch16u::$16 ] : zp ZP_BYTE:109 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:110 [ bsearch16u::pivot#0 ] : zp ZP_WORD:110 ,
|
|
Potential registers zp ZP_WORD:112 [ bsearch16u::result#0 ] : zp ZP_WORD:112 ,
|
|
Potential registers zp ZP_BYTE:114 [ sqr::$0 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:115 [ sqr::return#0 ] : zp ZP_WORD:115 ,
|
|
Potential registers zp ZP_WORD:117 [ SQUARES#1 ] : zp ZP_WORD:117 ,
|
|
Potential registers zp ZP_BYTE:119 [ init_squares::$3 ] : zp ZP_BYTE:119 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_BYTE:120 [ init_squares::$4 ] : zp ZP_BYTE:120 , reg byte a , reg byte x , reg byte y ,
|
|
Potential registers zp ZP_WORD:121 [ malloc::mem#0 ] : zp ZP_WORD:121 ,
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:23 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:24 [ 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:26 [ 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:19 [ 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:14 [ 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:16 [ 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:79 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:80 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:18 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:69 [ atan2_16::return#2 ] 50: zp ZP_WORD:21 [ 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:65 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:67 [ atan2_16::y#0 ]
|
|
Uplift Scope [bsearch16u] 7,563.11: zp ZP_BYTE:39 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp ZP_WORD:37 [ 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:108 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:109 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:112 [ bsearch16u::result#0 ] 501: zp ZP_WORD:110 [ bsearch16u::pivot#0 ] 4: zp ZP_WORD:99 [ bsearch16u::return#3 ] 0.27: zp ZP_WORD:97 [ bsearch16u::key#0 ]
|
|
Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:58 [ init_angle_screen::$2 ] 202: zp ZP_BYTE:59 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:62 [ init_angle_screen::$6 ] 202: zp ZP_WORD:71 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:73 [ init_angle_screen::$10 ] 202: zp ZP_BYTE:76 [ init_angle_screen::$12 ] 202: zp ZP_BYTE:77 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:78 [ init_angle_screen::$14 ] 126.25: zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:63 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:60 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:8 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:10 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
|
|
Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:36 [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ] 202: zp ZP_BYTE:86 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:89 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:91 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:96 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:33 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:81 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:31 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] 17.47: zp ZP_BYTE:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:29 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] 4.87: zp ZP_WORD:84 [ init_dist_screen::yds#0 ]
|
|
Uplift Scope [sqr] 338: zp ZP_BYTE:40 [ sqr::val#2 sqr::val#0 sqr::val#1 ] 202: zp ZP_WORD:87 [ sqr::return#3 ] 28.5: zp ZP_WORD:115 [ sqr::return#0 ] 22: zp ZP_WORD:82 [ sqr::return#2 ] 4: zp ZP_BYTE:114 [ sqr::$0 ]
|
|
Uplift Scope [sqrt] 202: zp ZP_BYTE:95 [ sqrt::return#2 ] 103: zp ZP_WORD:93 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:107 [ sqrt::return#0 ] 4: zp ZP_WORD:101 [ sqrt::found#0 ] 4: zp ZP_WORD:103 [ sqrt::$3 ] 2: zp ZP_WORD:105 [ sqrt::$1 ]
|
|
Uplift Scope [init_squares] 25.17: zp ZP_WORD:43 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:45 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:119 [ init_squares::$3 ] 22: zp ZP_BYTE:120 [ init_squares::$4 ] 13.93: zp ZP_WORD:41 [ init_squares::sqr#2 init_squares::sqr#1 ]
|
|
Uplift Scope [init_buckets] 34.33: zp ZP_WORD:3 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ] 33: zp ZP_BYTE:2 [ init_buckets::i#2 init_buckets::i#1 ] 23.83: zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
Uplift Scope [] 8.62: zp ZP_WORD:46 [ heap_head#13 heap_head#1 ] 0.29: zp ZP_WORD:52 [ SCREEN_ANGLE#0 ] 0.12: zp ZP_WORD:50 [ SCREEN_DIST#0 ] 0.11: zp ZP_WORD:54 [ BUCKET_SIZES#0 ] 0.03: zp ZP_WORD:117 [ SQUARES#1 ]
|
|
Uplift Scope [malloc] 2: zp ZP_WORD:48 [ malloc::size#4 ] 0.57: zp ZP_WORD:121 [ malloc::mem#0 ]
|
|
Uplift Scope [main]
|
|
|
|
Uplifting [atan2_16] best 1227262 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:24 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:26 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:19 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:14 [ 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:16 [ 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:69 [ atan2_16::return#2 ] zp ZP_WORD:21 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:65 [ atan2_16::x#0 ] zp ZP_WORD:67 [ atan2_16::y#0 ]
|
|
Limited combination testing to 100 combinations of 144 possible.
|
|
Uplifting [bsearch16u] best 1208262 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp ZP_WORD:37 [ 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:112 [ bsearch16u::result#0 ] zp ZP_WORD:110 [ bsearch16u::pivot#0 ] zp ZP_WORD:99 [ bsearch16u::return#3 ] zp ZP_WORD:97 [ bsearch16u::key#0 ]
|
|
Uplifting [init_angle_screen] best 1206062 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:71 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:73 [ init_angle_screen::$10 ] reg byte a [ init_angle_screen::$12 ] zp ZP_BYTE:77 [ init_angle_screen::$13 ] zp ZP_BYTE:78 [ init_angle_screen::$14 ] zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:63 [ init_angle_screen::yw#0 ] zp ZP_WORD:60 [ init_angle_screen::xw#0 ] zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ] zp ZP_WORD:8 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:10 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:56 [ init_angle_screen::screen#0 ]
|
|
Limited combination testing to 100 combinations of 65536 possible.
|
|
Uplifting [init_dist_screen] best 1202862 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:89 [ init_dist_screen::xds#0 ] zp ZP_WORD:91 [ init_dist_screen::ds#0 ] zp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] zp ZP_BYTE:33 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:81 [ init_dist_screen::y2#0 ] zp ZP_WORD:31 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ] zp ZP_BYTE:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:29 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ] zp ZP_WORD:84 [ init_dist_screen::yds#0 ]
|
|
Limited combination testing to 100 combinations of 6144 possible.
|
|
Uplifting [sqr] best 1202525 combination reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ] zp ZP_WORD:87 [ sqr::return#3 ] zp ZP_WORD:115 [ sqr::return#0 ] zp ZP_WORD:82 [ sqr::return#2 ] reg byte a [ sqr::$0 ]
|
|
Uplifting [sqrt] best 1201622 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:93 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:101 [ sqrt::found#0 ] zp ZP_WORD:103 [ sqrt::$3 ] zp ZP_WORD:105 [ sqrt::$1 ]
|
|
Uplifting [init_squares] best 1201422 combination zp ZP_WORD:43 [ 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:41 [ init_squares::sqr#2 init_squares::sqr#1 ]
|
|
Uplifting [init_buckets] best 1201302 combination zp ZP_WORD:3 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] zp ZP_WORD:5 [ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
Uplifting [] best 1201302 combination zp ZP_WORD:46 [ heap_head#13 heap_head#1 ] zp ZP_WORD:52 [ SCREEN_ANGLE#0 ] zp ZP_WORD:50 [ SCREEN_DIST#0 ] zp ZP_WORD:54 [ BUCKET_SIZES#0 ] zp ZP_WORD:117 [ SQUARES#1 ]
|
|
Uplifting [malloc] best 1201302 combination zp ZP_WORD:48 [ malloc::size#4 ] zp ZP_WORD:121 [ malloc::mem#0 ]
|
|
Uplifting [main] best 1201302 combination
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:77 [ init_angle_screen::$13 ]
|
|
Uplifting [init_angle_screen] best 1200902 combination reg byte a [ init_angle_screen::$13 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:78 [ init_angle_screen::$14 ]
|
|
Uplifting [init_angle_screen] best 1200302 combination reg byte a [ init_angle_screen::$14 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
Uplifting [init_dist_screen] best 1200302 combination zp ZP_BYTE:34 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Uplifting [init_angle_screen] best 1200302 combination zp ZP_BYTE:12 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
Uplifting [init_dist_screen] best 1200302 combination zp ZP_BYTE:35 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Uplifting [init_angle_screen] best 1200302 combination zp ZP_BYTE:13 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ]
|
|
Uplifting [init_angle_screen] best 1200302 combination zp ZP_BYTE:75 [ init_angle_screen::ang_w#0 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
|
|
Uplifting [init_dist_screen] best 1200232 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:81 [ init_dist_screen::y2#0 ]
|
|
Uplifting [init_dist_screen] best 1200132 combination reg byte a [ init_dist_screen::y2#0 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
Uplifting [init_angle_screen] best 1200132 combination zp ZP_BYTE:7 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
Uplifting [init_dist_screen] best 1200132 combination zp ZP_BYTE:28 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 ] ] with [ zp ZP_WORD:50 [ SCREEN_DIST#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:8 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:56 [ init_angle_screen::screen#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:21 [ 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:37 [ 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:99 [ bsearch16u::return#3 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:48 [ malloc::size#4 ] ] with [ zp ZP_WORD:121 [ malloc::mem#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:60 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:65 [ atan2_16::x#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:63 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:67 [ atan2_16::y#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:69 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:71 [ init_angle_screen::angle_w#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:82 [ sqr::return#2 ] ] with [ zp ZP_WORD:84 [ init_dist_screen::yds#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:87 [ sqr::return#3 ] ] with [ zp ZP_WORD:89 [ init_dist_screen::xds#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:87 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:115 [ sqr::return#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:91 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:93 [ sqrt::val#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:101 [ sqrt::found#0 ] ] with [ zp ZP_WORD:103 [ sqrt::$3 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:8 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp ZP_WORD:52 [ SCREEN_ANGLE#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ 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:69 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ 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:101 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:48 [ malloc::size#4 malloc::mem#0 ] ] with [ zp ZP_WORD:117 [ SQUARES#1 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:87 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:91 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:19 [ 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:73 [ init_angle_screen::$10 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:37 [ 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:105 [ sqrt::$1 ] ] - score: 1
|
|
Coalescing zero page register with common assignment [ zp ZP_WORD:87 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:97 [ bsearch16u::key#0 ] ] - score: 1
|
|
Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 SCREEN_DIST#0 ]
|
|
Allocated (was zp ZP_WORD:5) zp ZP_WORD:4 [ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
Allocated (was zp ZP_WORD:8) zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 SCREEN_ANGLE#0 ]
|
|
Allocated (was zp ZP_WORD:10) zp ZP_WORD:9 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
|
|
Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:11 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:12 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
Allocated (was zp ZP_WORD:14) zp ZP_WORD:13 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
|
Allocated (was zp ZP_WORD:16) zp ZP_WORD:15 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
Allocated (was zp ZP_WORD:19) zp ZP_WORD:17 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ]
|
|
Allocated (was zp ZP_WORD:24) zp ZP_WORD:19 [ 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:26) zp ZP_WORD:21 [ 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:28) zp ZP_BYTE:23 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
Allocated (was zp ZP_WORD:29) zp ZP_WORD:24 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
|
|
Allocated (was zp ZP_WORD:31) zp ZP_WORD:26 [ init_dist_screen::screen_bottomline#10 init_dist_screen::screen_bottomline#1 init_dist_screen::screen_bottomline#0 ]
|
|
Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:28 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
Allocated (was zp ZP_BYTE:35) zp ZP_BYTE:29 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
Allocated (was zp ZP_WORD:37) zp ZP_WORD:30 [ 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:41) zp ZP_WORD:32 [ init_squares::sqr#2 init_squares::sqr#1 ]
|
|
Allocated (was zp ZP_WORD:43) zp ZP_WORD:34 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
|
|
Allocated (was zp ZP_WORD:46) zp ZP_WORD:36 [ heap_head#13 heap_head#1 ]
|
|
Allocated (was zp ZP_WORD:48) zp ZP_WORD:38 [ malloc::size#4 malloc::mem#0 SQUARES#1 ]
|
|
Allocated (was zp ZP_WORD:54) zp ZP_WORD:40 [ BUCKET_SIZES#0 ]
|
|
Allocated (was zp ZP_WORD:60) zp ZP_WORD:42 [ init_angle_screen::xw#0 atan2_16::x#0 ]
|
|
Allocated (was zp ZP_WORD:63) zp ZP_WORD:44 [ init_angle_screen::yw#0 atan2_16::y#0 ]
|
|
Allocated (was zp ZP_BYTE:75) zp ZP_BYTE:46 [ init_angle_screen::ang_w#0 ]
|
|
Allocated (was zp ZP_WORD:82) zp ZP_WORD:47 [ sqr::return#2 init_dist_screen::yds#0 ]
|
|
Allocated (was zp ZP_WORD:87) zp ZP_WORD:49 [ 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:110) zp ZP_WORD:51 [ bsearch16u::pivot#0 ]
|
|
Allocated (was zp ZP_WORD:112) zp ZP_WORD:53 [ bsearch16u::result#0 ]
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// 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(bbegin)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
.const SIZEOF_WORD = 2
|
|
.const SIZEOF_BYTE = 1
|
|
// Top of the heap used by malloc()
|
|
.label HEAP_TOP = $a000
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
// The number of buckets in our bucket sort
|
|
.const NUM_BUCKETS = $30
|
|
.const NUM_SQUARES = $30
|
|
.label heap_head = $24
|
|
.label SQUARES = $26
|
|
// Screen containing distance to center
|
|
.label SCREEN_DIST = 2
|
|
// Screen containing angle to center
|
|
.label SCREEN_ANGLE = 7
|
|
// Array containing the bucket size for each of the 256 buckets
|
|
.label BUCKET_SIZES = $28
|
|
// @begin
|
|
bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
b1_from_bbegin:
|
|
jmp b1
|
|
// @1
|
|
b1:
|
|
// [2] call malloc
|
|
// [190] phi from @1 to malloc [phi:@1->malloc]
|
|
malloc_from_b1:
|
|
// [190] phi (word) malloc::size#4 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta malloc.size
|
|
lda #>$3e8
|
|
sta malloc.size+1
|
|
// [190] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1
|
|
lda #<HEAP_TOP
|
|
sta heap_head
|
|
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
|
|
// [190] phi from @4 to malloc [phi:@4->malloc]
|
|
malloc_from_b4:
|
|
// [190] phi (word) malloc::size#4 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta malloc.size
|
|
lda #>$3e8
|
|
sta malloc.size+1
|
|
// [190] phi (byte*) heap_head#13 = (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
|
|
// [190] phi from @2 to malloc [phi:@2->malloc]
|
|
malloc_from_b2:
|
|
// [190] phi (word) malloc::size#4 = (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
|
|
// [190] phi (byte*) heap_head#13 = (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] phi from @6 to @3 [phi:@6->@3]
|
|
b3_from_b6:
|
|
jmp b3
|
|
// @3
|
|
b3:
|
|
// [10] call main
|
|
jsr main
|
|
// [11] phi from @3 to @end [phi:@3->@end]
|
|
bend_from_b3:
|
|
jmp bend
|
|
// @end
|
|
bend:
|
|
// main
|
|
main: {
|
|
// [12] (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
|
|
// [13] call init_dist_screen
|
|
// [105] phi from main to init_dist_screen [phi:main->init_dist_screen]
|
|
init_dist_screen_from_main:
|
|
jsr init_dist_screen
|
|
jmp b1
|
|
// main::@1
|
|
b1:
|
|
// [14] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
|
|
// [15] call init_angle_screen
|
|
jsr init_angle_screen
|
|
// [16] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
b2_from_b1:
|
|
jmp b2
|
|
// main::@2
|
|
b2:
|
|
// [17] call init_buckets
|
|
// [19] phi from main::@2 to init_buckets [phi:main::@2->init_buckets]
|
|
init_buckets_from_b2:
|
|
jsr init_buckets
|
|
jmp breturn
|
|
// main::@return
|
|
breturn:
|
|
// [18] return
|
|
rts
|
|
}
|
|
// init_buckets
|
|
//const word*[] BUCKETS = malloc(NUM_BUCKETS*sizeof(word*));
|
|
init_buckets: {
|
|
.label dist = 2
|
|
.label i1 = 4
|
|
// [20] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
|
|
b1_from_init_buckets:
|
|
// [20] 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
|
|
// [20] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
|
|
b1_from_b1:
|
|
// [20] 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:
|
|
// [21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1
|
|
lda #0
|
|
sta (BUCKET_SIZES),y
|
|
// [22] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// [23] 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
|
|
jmp b2
|
|
// init_buckets::@2
|
|
b2:
|
|
// [24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0
|
|
// first find bucket sizes - by counting number of chars with each distance value
|
|
// [25] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
|
|
b3_from_b2:
|
|
// [25] 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
|
|
// [25] phi (byte*) init_buckets::dist#2 = (byte*) init_buckets::dist#0 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy
|
|
jmp b3
|
|
// [25] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
|
|
b3_from_b3:
|
|
// [25] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy
|
|
// [25] phi (byte*) init_buckets::dist#2 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy
|
|
jmp b3
|
|
// init_buckets::@3
|
|
b3:
|
|
// [26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2
|
|
ldy #0
|
|
lda (dist),y
|
|
tay
|
|
lda (BUCKET_SIZES),y
|
|
clc
|
|
adc #1
|
|
sta (BUCKET_SIZES),y
|
|
// [27] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#2 -- pbuz1=_inc_pbuz1
|
|
inc dist
|
|
bne !+
|
|
inc dist+1
|
|
!:
|
|
// [28] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1
|
|
inc i1
|
|
bne !+
|
|
inc i1+1
|
|
!:
|
|
// [29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1
|
|
lda i1+1
|
|
cmp #>$3e8
|
|
bne b3_from_b3
|
|
lda i1
|
|
cmp #<$3e8
|
|
bne b3_from_b3
|
|
jmp breturn
|
|
// init_buckets::@return
|
|
breturn:
|
|
// [30] 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(7) screen)
|
|
init_angle_screen: {
|
|
.label _10 = $11
|
|
.label screen = 7
|
|
.label screen_topline = 9
|
|
.label screen_bottomline = 7
|
|
.label xw = $2a
|
|
.label yw = $2c
|
|
.label angle_w = $11
|
|
.label ang_w = $2e
|
|
.label x = $b
|
|
.label xb = $c
|
|
.label y = 6
|
|
// [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$c
|
|
sta screen_topline
|
|
lda screen+1
|
|
adc #>$28*$c
|
|
sta screen_topline+1
|
|
// [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1
|
|
clc
|
|
lda screen_bottomline
|
|
adc #<$28*$c
|
|
sta screen_bottomline
|
|
lda screen_bottomline+1
|
|
adc #>$28*$c
|
|
sta screen_bottomline+1
|
|
// [33] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
|
|
b1_from_init_angle_screen:
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
|
|
b1_from_b3:
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] 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:
|
|
// [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
|
|
b2_from_b1:
|
|
// [34] 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
|
|
// [34] 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
|
|
// [34] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
|
|
b2_from_b4:
|
|
// [34] 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
|
|
// [34] 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:
|
|
// [35] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda x
|
|
asl
|
|
// [36] (byte~) init_angle_screen::$3 ← (byte) $27 - (byte~) init_angle_screen::$2 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
clc
|
|
adc #$27+1
|
|
// [37] (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
|
|
// [38] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda y
|
|
asl
|
|
// [39] (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
|
|
// [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
|
|
// [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
|
|
// [42] call atan2_16
|
|
jsr atan2_16
|
|
// [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0
|
|
jmp b4
|
|
// init_angle_screen::@4
|
|
b4:
|
|
// [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
|
|
// [45] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc _10
|
|
sta _10
|
|
bcc !+
|
|
inc _10+1
|
|
!:
|
|
// [46] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$10 -- vbuz1=_hi_vwuz2
|
|
lda _10+1
|
|
sta ang_w
|
|
// [47] *((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
|
|
// [48] (byte~) init_angle_screen::$12 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
|
|
lda ang_w
|
|
eor #$ff
|
|
clc
|
|
adc #1
|
|
// [49] *((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
|
|
// [50] (byte~) init_angle_screen::$13 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
|
|
lda #$80
|
|
clc
|
|
adc ang_w
|
|
// [51] *((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
|
|
// [52] (byte~) init_angle_screen::$14 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
|
|
lda #$80
|
|
sec
|
|
sbc ang_w
|
|
// [53] *((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
|
|
// [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc x
|
|
// [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec xb
|
|
// [56] 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:
|
|
// [57] (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
|
|
sta screen_topline
|
|
lda screen_topline+1
|
|
sbc #>$28
|
|
sta screen_topline+1
|
|
// [58] (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
|
|
sta screen_bottomline
|
|
bcc !+
|
|
inc screen_bottomline+1
|
|
!:
|
|
// [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1
|
|
inc y
|
|
// [60] 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:
|
|
// [61] 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($2a) x, signed word zeropage($2c) y)
|
|
atan2_16: {
|
|
.label _2 = $d
|
|
.label _7 = $f
|
|
.label yi = $d
|
|
.label xi = $f
|
|
.label angle = $11
|
|
.label xd = $15
|
|
.label yd = $13
|
|
.label return = $11
|
|
.label x = $2a
|
|
.label y = $2c
|
|
// [62] 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:
|
|
// [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc y
|
|
sta _2
|
|
lda #0
|
|
sbc y+1
|
|
sta _2+1
|
|
// [64] 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:
|
|
// [64] 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:
|
|
// [65] 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:
|
|
// [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc x
|
|
sta _7
|
|
lda #0
|
|
sbc x+1
|
|
sta _7+1
|
|
// [67] 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:
|
|
// [67] 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:
|
|
// [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
b10_from_b6:
|
|
// [68] 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
|
|
// [68] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [68] 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:
|
|
// [69] 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
|
|
// [70] 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:
|
|
// [70] 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:
|
|
// [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1
|
|
lsr angle+1
|
|
ror angle
|
|
// [72] 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:
|
|
// [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc angle
|
|
sta angle
|
|
lda #>$8000
|
|
sbc angle+1
|
|
sta angle+1
|
|
// [74] 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:
|
|
// [74] 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:
|
|
// [75] 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:
|
|
// [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
|
|
sec
|
|
lda #0
|
|
sbc angle
|
|
sta angle
|
|
lda #0
|
|
sbc angle+1
|
|
sta angle+1
|
|
// [77] 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:
|
|
// [77] 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:
|
|
// [78] return
|
|
rts
|
|
// atan2_16::@11
|
|
b11:
|
|
// [79] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx
|
|
txa
|
|
tay
|
|
// [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda xi
|
|
sta xd
|
|
lda xi+1
|
|
sta xd+1
|
|
// [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda yi
|
|
sta yd
|
|
lda yi+1
|
|
sta yd+1
|
|
// [82] 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:
|
|
// [82] 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
|
|
// [82] 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
|
|
// [82] 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:
|
|
// [83] 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:
|
|
// [84] 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:
|
|
// [85] (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
|
|
// [86] (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
|
|
// [87] 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:
|
|
// [87] 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
|
|
// [87] 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:
|
|
// [88] 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:
|
|
// [89] (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
|
|
sta xi
|
|
lda xi+1
|
|
sbc yd+1
|
|
sta xi+1
|
|
// [90] (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
|
|
sta yi
|
|
lda yi+1
|
|
adc xd+1
|
|
sta yi+1
|
|
// [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [92] (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
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta angle
|
|
lda angle+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta angle+1
|
|
// [93] 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:
|
|
// [93] 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
|
|
// [93] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [93] 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:
|
|
// [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [95] 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
|
|
// [68] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
b10_from_b19:
|
|
// [68] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [68] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [68] 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:
|
|
// [96] (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
|
|
sta xi
|
|
lda xi+1
|
|
adc yd+1
|
|
sta xi+1
|
|
// [97] (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
|
|
sta yi
|
|
lda yi+1
|
|
sbc xd+1
|
|
sta yi+1
|
|
// [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [99] (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
|
|
adc CORDIC_ATAN2_ANGLES_16,y
|
|
sta angle
|
|
lda angle+1
|
|
adc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta angle+1
|
|
jmp b19_from_b18
|
|
// atan2_16::@14
|
|
b14:
|
|
// [100] (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
|
|
ror xd
|
|
lda xd+1
|
|
cmp #$80
|
|
ror xd+1
|
|
ror xd
|
|
// [101] (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
|
|
ror yd
|
|
lda yd+1
|
|
cmp #$80
|
|
ror yd+1
|
|
ror yd
|
|
// [102] (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:
|
|
// [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
|
|
lda x
|
|
sta xi
|
|
lda x+1
|
|
sta xi+1
|
|
jmp b6_from_b4
|
|
// atan2_16::@1
|
|
b1:
|
|
// [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
|
|
lda y
|
|
sta yi
|
|
lda y+1
|
|
sta yi+1
|
|
jmp b3_from_b1
|
|
}
|
|
// init_dist_screen
|
|
// Populates 1000 bytes (a screen) with values representing the distance to the center.
|
|
// The actual value stored is distance*2 to increase precision
|
|
// init_dist_screen(byte* zeropage($18) screen)
|
|
init_dist_screen: {
|
|
.label screen = $18
|
|
.label screen_bottomline = $1a
|
|
.label yds = $2f
|
|
.label xds = $31
|
|
.label ds = $31
|
|
.label x = $1c
|
|
.label xb = $1d
|
|
.label screen_topline = $18
|
|
.label y = $17
|
|
// [106] call init_squares
|
|
// [177] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
|
|
init_squares_from_init_dist_screen:
|
|
jsr init_squares
|
|
jmp b10
|
|
// init_dist_screen::@10
|
|
b10:
|
|
// [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$18
|
|
sta screen_bottomline
|
|
lda screen+1
|
|
adc #>$28*$18
|
|
sta screen_bottomline+1
|
|
// [108] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1]
|
|
b1_from_b10:
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
|
|
b1_from_b9:
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] 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:
|
|
// [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda y
|
|
asl
|
|
// [110] 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:
|
|
// [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
clc
|
|
adc #$18+1
|
|
// [112] 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:
|
|
// [112] 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:
|
|
// [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
|
|
// [114] call sqr
|
|
// [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
|
|
sqr_from_b4:
|
|
// [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy
|
|
jsr sqr
|
|
// [115] (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 b11
|
|
// init_dist_screen::@11
|
|
b11:
|
|
// [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
|
|
// [117] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5]
|
|
b5_from_b11:
|
|
// [117] 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
|
|
// [117] 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
|
|
// [117] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5]
|
|
b5_from_b13:
|
|
// [117] 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
|
|
// [117] 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:
|
|
// [118] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda x
|
|
asl
|
|
// [119] 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:
|
|
// [120] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
clc
|
|
adc #$27+1
|
|
// [121] 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:
|
|
// [121] 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:
|
|
// [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
|
|
// [123] call sqr
|
|
// [173] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
|
|
sqr_from_b8:
|
|
// [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy
|
|
jsr sqr
|
|
// [124] (word) sqr::return#3 ← (word) sqr::return#0
|
|
jmp b12
|
|
// init_dist_screen::@12
|
|
b12:
|
|
// [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
|
|
// [126] (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
|
|
sta ds
|
|
lda ds+1
|
|
adc yds+1
|
|
sta ds+1
|
|
// [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
|
|
// [128] call sqrt
|
|
jsr sqrt
|
|
// [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0
|
|
jmp b13
|
|
// init_dist_screen::@13
|
|
b13:
|
|
// [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
|
|
// [131] *((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
|
|
// [132] *((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
|
|
// [133] *((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
|
|
// [134] *((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
|
|
// [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc x
|
|
// [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec xb
|
|
// [137] 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_b13
|
|
jmp b9
|
|
// init_dist_screen::@9
|
|
b9:
|
|
// [138] (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
|
|
sta screen_topline
|
|
bcc !+
|
|
inc screen_topline+1
|
|
!:
|
|
// [139] (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
|
|
sta screen_bottomline
|
|
lda screen_bottomline+1
|
|
sbc #>$28
|
|
sta screen_bottomline+1
|
|
// [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1
|
|
inc y
|
|
// [141] 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:
|
|
// [142] return
|
|
rts
|
|
// init_dist_screen::@6
|
|
b6:
|
|
// [143] (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:
|
|
// [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1
|
|
sec
|
|
sbc #$18
|
|
jmp b4_from_b2
|
|
}
|
|
// sqrt
|
|
// 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($31) val)
|
|
sqrt: {
|
|
.label _1 = $1e
|
|
.label _3 = $1e
|
|
.label found = $1e
|
|
.label val = $31
|
|
// [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0
|
|
// [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2
|
|
lda SQUARES
|
|
sta bsearch16u.items
|
|
lda SQUARES+1
|
|
sta bsearch16u.items+1
|
|
// [147] call bsearch16u
|
|
// [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
|
|
bsearch16u_from_sqrt:
|
|
jsr bsearch16u
|
|
// [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
|
|
jmp b1
|
|
// sqrt::@1
|
|
b1:
|
|
// [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
|
|
// [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2
|
|
lda _3
|
|
sec
|
|
sbc SQUARES
|
|
sta _3
|
|
lda _3+1
|
|
sbc SQUARES+1
|
|
sta _3+1
|
|
// [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
|
|
lsr _1+1
|
|
ror _1
|
|
// [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1
|
|
lda _1
|
|
jmp breturn
|
|
// sqrt::@return
|
|
breturn:
|
|
// [153] return
|
|
rts
|
|
}
|
|
// bsearch16u
|
|
// Searches an array of nitems unsigned words, the initial member of which is pointed to by base, for a member that matches the value key.
|
|
// - key - The value to look for
|
|
// - 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($31) key, word* zeropage($1e) items, byte register(X) num)
|
|
bsearch16u: {
|
|
.label _2 = $1e
|
|
.label pivot = $33
|
|
.label result = $35
|
|
.label return = $1e
|
|
.label items = $1e
|
|
.label key = $31
|
|
// [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
|
|
b3_from_bsearch16u:
|
|
// [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy
|
|
// [155] 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:
|
|
// [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1
|
|
cpx #0
|
|
bne b4
|
|
jmp b5
|
|
// bsearch16u::@5
|
|
b5:
|
|
// [157] 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
|
|
bne !+
|
|
dey
|
|
lda (items),y
|
|
cmp key
|
|
beq b2_from_b5
|
|
!:
|
|
bcc b2_from_b5
|
|
jmp b1
|
|
// bsearch16u::@1
|
|
b1:
|
|
// [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1
|
|
lda _2
|
|
sec
|
|
sbc #<1*SIZEOF_WORD
|
|
sta _2
|
|
lda _2+1
|
|
sbc #>1*SIZEOF_WORD
|
|
sta _2+1
|
|
// [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
|
|
b2_from_b1:
|
|
b2_from_b5:
|
|
// [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy
|
|
jmp b2
|
|
// bsearch16u::@2
|
|
b2:
|
|
// [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
|
|
breturn_from_b2:
|
|
breturn_from_b8:
|
|
// [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy
|
|
jmp breturn
|
|
// bsearch16u::@return
|
|
breturn:
|
|
// [161] return
|
|
rts
|
|
// bsearch16u::@4
|
|
b4:
|
|
// [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1
|
|
txa
|
|
lsr
|
|
// [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1
|
|
asl
|
|
// [164] (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
|
|
// [165] (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
|
|
sbc (pivot),y
|
|
sta result
|
|
lda key+1
|
|
iny
|
|
sbc (pivot),y
|
|
sta result+1
|
|
// [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1
|
|
lda result+1
|
|
bne b6
|
|
lda result
|
|
bne b6
|
|
jmp b8
|
|
// bsearch16u::@8
|
|
b8:
|
|
// [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2
|
|
lda pivot
|
|
sta return
|
|
lda pivot+1
|
|
sta return+1
|
|
jmp breturn_from_b8
|
|
// bsearch16u::@6
|
|
b6:
|
|
// [168] 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 !+
|
|
lda result
|
|
beq b7_from_b6
|
|
!:
|
|
jmp b9
|
|
// bsearch16u::@9
|
|
b9:
|
|
// [169] (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
|
|
sta items
|
|
lda #0
|
|
adc pivot+1
|
|
sta items+1
|
|
// [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx
|
|
dex
|
|
// [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
|
|
b7_from_b6:
|
|
b7_from_b9:
|
|
// [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy
|
|
// [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy
|
|
jmp b7
|
|
// bsearch16u::@7
|
|
b7:
|
|
// [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1
|
|
txa
|
|
lsr
|
|
tax
|
|
// [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
|
|
b3_from_b7:
|
|
// [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy
|
|
// [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy
|
|
jmp b3
|
|
}
|
|
// sqr
|
|
// Find the square of a byte value
|
|
// Uses a table of squares that must be initialized by calling init_squares()
|
|
// sqr(byte register(A) val)
|
|
sqr: {
|
|
.label return = $31
|
|
.label return_2 = $2f
|
|
// [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1
|
|
asl
|
|
// [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa
|
|
tay
|
|
lda (SQUARES),y
|
|
sta return
|
|
iny
|
|
lda (SQUARES),y
|
|
sta return+1
|
|
jmp breturn
|
|
// sqr::@return
|
|
breturn:
|
|
// [176] return
|
|
rts
|
|
}
|
|
// init_squares
|
|
// Initialize squares table
|
|
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
|
|
init_squares: {
|
|
.label squares = $22
|
|
.label sqr = $20
|
|
// [178] call malloc
|
|
// [190] phi from init_squares to malloc [phi:init_squares->malloc]
|
|
malloc_from_init_squares:
|
|
// [190] phi (word) malloc::size#4 = (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
|
|
// [190] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy
|
|
jsr malloc
|
|
jmp b2
|
|
// init_squares::@2
|
|
b2:
|
|
// [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
|
|
// [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2
|
|
lda SQUARES
|
|
sta squares
|
|
lda SQUARES+1
|
|
sta squares+1
|
|
// [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
|
|
b1_from_b2:
|
|
// [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy
|
|
// [181] 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
|
|
// [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
|
|
b1_from_b1:
|
|
// [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy
|
|
// [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy
|
|
// [181] 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:
|
|
// [182] *((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
|
|
// [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1
|
|
lda #SIZEOF_WORD
|
|
clc
|
|
adc squares
|
|
sta squares
|
|
bcc !+
|
|
inc squares+1
|
|
!:
|
|
// [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1
|
|
clc
|
|
adc #1
|
|
// [186] (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
|
|
!:
|
|
// [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [188] 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:
|
|
// [189] return
|
|
rts
|
|
}
|
|
// malloc
|
|
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
|
|
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
|
|
// malloc(word zeropage($26) size)
|
|
malloc: {
|
|
.label mem = $26
|
|
.label size = $26
|
|
// [191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4 -- pbuz1=pbuz2_minus_vwuz1
|
|
lda heap_head
|
|
sec
|
|
sbc mem
|
|
sta mem
|
|
lda heap_head+1
|
|
sbc mem+1
|
|
sta mem+1
|
|
// [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2
|
|
lda mem
|
|
sta heap_head
|
|
lda mem+1
|
|
sta heap_head+1
|
|
jmp breturn
|
|
// malloc::@return
|
|
breturn:
|
|
// [193] return
|
|
rts
|
|
}
|
|
// File Data
|
|
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
|
CORDIC_ATAN2_ANGLES_16:
|
|
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b4
|
|
Removing instruction jmp b5
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp b6
|
|
Removing instruction jmp b3
|
|
Removing instruction jmp bend
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp b3
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp b4
|
|
Removing instruction jmp b3
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp b3
|
|
Removing instruction jmp b5
|
|
Removing instruction jmp b6
|
|
Removing instruction jmp b10
|
|
Removing instruction jmp b12
|
|
Removing instruction jmp b21
|
|
Removing instruction jmp b7
|
|
Removing instruction jmp b9
|
|
Removing instruction jmp b8
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b13
|
|
Removing instruction jmp b15
|
|
Removing instruction jmp b16
|
|
Removing instruction jmp b17
|
|
Removing instruction jmp b20
|
|
Removing instruction jmp b19
|
|
Removing instruction jmp b10
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b3
|
|
Removing instruction jmp b4
|
|
Removing instruction jmp b11
|
|
Removing instruction jmp b5
|
|
Removing instruction jmp b7
|
|
Removing instruction jmp b8
|
|
Removing instruction jmp b12
|
|
Removing instruction jmp b13
|
|
Removing instruction jmp b9
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b3
|
|
Removing instruction jmp b5
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b8
|
|
Removing instruction jmp b9
|
|
Removing instruction jmp b7
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp breturn
|
|
Removing instruction jmp breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #>0
|
|
Removing instruction ldy #0
|
|
Removing instruction lda ang_w
|
|
Removing instruction lda ang_w
|
|
Removing instruction ldy xb
|
|
Removing instruction ldy x
|
|
Removing instruction lda #0
|
|
Replacing instruction ldx #0 with TAX
|
|
Removing instruction ldy x
|
|
Removing instruction ldy xb
|
|
Removing instruction lda result+1
|
|
Replacing instruction lda #0 with TXA
|
|
Removing instruction lda #0
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Replacing label b1_from_b1 with b1
|
|
Replacing label b3_from_b3 with b3
|
|
Replacing label b3_from_b3 with b3
|
|
Replacing label b2_from_b4 with b2
|
|
Replacing label b1_from_b3 with b1
|
|
Replacing label b7_from_b12 with b7
|
|
Replacing label b8_from_b7 with b8
|
|
Replacing label b17_from_b15 with b17
|
|
Replacing label b12_from_b19 with b12
|
|
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_b13 with b5
|
|
Replacing label b1_from_b9 with b1
|
|
Replacing label b8_from_b6 with b8
|
|
Replacing label b4_from_b2 with b4
|
|
Replacing label b2_from_b5 with b2
|
|
Replacing label b2_from_b5 with b2
|
|
Replacing label breturn_from_b8 with b2
|
|
Replacing label b7_from_b6 with b7
|
|
Replacing label b7_from_b6 with b7
|
|
Replacing label b1_from_b1 with b1
|
|
Removing instruction b1_from_bbegin:
|
|
Removing instruction b1:
|
|
Removing instruction malloc_from_b1:
|
|
Removing instruction b2_from_b5:
|
|
Removing instruction malloc_from_b2:
|
|
Removing instruction b3_from_b6:
|
|
Removing instruction bend_from_b3:
|
|
Removing instruction b2_from_b1:
|
|
Removing instruction init_buckets_from_b2:
|
|
Removing instruction b1_from_b1:
|
|
Removing instruction b3_from_b3:
|
|
Removing instruction b1_from_b3:
|
|
Removing instruction b2_from_b1:
|
|
Removing instruction b2_from_b4:
|
|
Removing instruction b3_from_b1:
|
|
Removing instruction b3_from_b2:
|
|
Removing instruction b6_from_b4:
|
|
Removing instruction b6_from_b5:
|
|
Removing instruction b10_from_b6:
|
|
Removing instruction b12_from_b10:
|
|
Removing instruction b12_from_b19:
|
|
Removing instruction b7_from_b12:
|
|
Removing instruction b7_from_b21:
|
|
Removing instruction b8_from_b7:
|
|
Removing instruction b8_from_b9:
|
|
Removing instruction breturn:
|
|
Removing instruction b13_from_b11:
|
|
Removing instruction b13_from_b14:
|
|
Removing instruction b17_from_b15:
|
|
Removing instruction b17_from_b16:
|
|
Removing instruction b19_from_b18:
|
|
Removing instruction b19_from_b20:
|
|
Removing instruction b1_from_b9:
|
|
Removing instruction b4_from_b2:
|
|
Removing instruction b4_from_b3:
|
|
Removing instruction sqr_from_b4:
|
|
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:
|
|
Removing instruction b2_from_b1:
|
|
Removing instruction b2_from_b5:
|
|
Removing instruction breturn_from_b2:
|
|
Removing instruction breturn_from_b8:
|
|
Removing instruction breturn:
|
|
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 b3:
|
|
Removing instruction bend:
|
|
Removing instruction init_dist_screen_from_main:
|
|
Removing instruction b1:
|
|
Removing instruction b2:
|
|
Removing instruction breturn:
|
|
Removing instruction b1_from_init_buckets:
|
|
Removing instruction b2:
|
|
Removing instruction b3_from_b2:
|
|
Removing instruction breturn:
|
|
Removing instruction b1_from_init_angle_screen:
|
|
Removing instruction b4:
|
|
Removing instruction b3:
|
|
Removing instruction breturn:
|
|
Removing instruction b2:
|
|
Removing instruction b5:
|
|
Removing instruction b21:
|
|
Removing instruction b9:
|
|
Removing instruction b15:
|
|
Removing instruction b16:
|
|
Removing instruction b20:
|
|
Removing instruction b10_from_b19:
|
|
Removing instruction init_squares_from_init_dist_screen:
|
|
Removing instruction b10:
|
|
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:
|
|
Removing instruction b1:
|
|
Removing instruction breturn:
|
|
Removing instruction b3_from_bsearch16u:
|
|
Removing instruction b5:
|
|
Removing instruction b1:
|
|
Removing instruction b8:
|
|
Removing instruction b9:
|
|
Removing instruction b3_from_b7:
|
|
Removing instruction breturn:
|
|
Removing instruction malloc_from_init_squares:
|
|
Removing instruction b2:
|
|
Removing instruction b1_from_b2:
|
|
Removing instruction breturn:
|
|
Removing instruction breturn:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
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 b3
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b2
|
|
Removing instruction jmp b1
|
|
Removing instruction jmp b5
|
|
Removing instruction jmp b1
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction lda #<0
|
|
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
|
Fixing long branch [326] beq b12 to bne
|
|
Fixing long branch [220] bpl b1 to bmi
|
|
Fixing long branch [232] bpl b4 to bmi
|
|
|
|
FINAL SYMBOL TABLE
|
|
(label) @1
|
|
(label) @2
|
|
(label) @3
|
|
(label) @4
|
|
(label) @5
|
|
(label) @6
|
|
(label) @begin
|
|
(label) @end
|
|
(byte[]) BUCKET_SIZES
|
|
(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:40 0.1111111111111111
|
|
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
|
|
(const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 CORDIC_ATAN2_ANGLES_16 = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
}}
|
|
(byte) CORDIC_ITERATIONS_16
|
|
(const byte) CORDIC_ITERATIONS_16#0 CORDIC_ITERATIONS_16 = (byte) $f
|
|
(byte*) HEAP_TOP
|
|
(const byte*) HEAP_TOP#0 HEAP_TOP = (byte*) 40960
|
|
(byte) NUM_BUCKETS
|
|
(const byte) NUM_BUCKETS#0 NUM_BUCKETS = (byte) $30
|
|
(byte) NUM_SQUARES
|
|
(const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
|
|
(byte*) SCREEN_ANGLE
|
|
(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:7 0.2857142857142857
|
|
(byte*) SCREEN_DIST
|
|
(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:2 0.11764705882352941
|
|
(const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1
|
|
(const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2
|
|
(word*) SQUARES
|
|
(void*) SQUARES#1 SQUARES zp ZP_WORD:38 0.03225806451612903
|
|
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
|
(signed word~) atan2_16::$2 $2 zp ZP_WORD:13 4.0
|
|
(byte~) atan2_16::$23 reg byte a 2002.0
|
|
(byte~) atan2_16::$24 reg byte a 2002.0
|
|
(signed word~) atan2_16::$7 $7 zp ZP_WORD:15 4.0
|
|
(label) atan2_16::@1
|
|
(label) atan2_16::@10
|
|
(label) atan2_16::@11
|
|
(label) atan2_16::@12
|
|
(label) atan2_16::@13
|
|
(label) atan2_16::@14
|
|
(label) atan2_16::@15
|
|
(label) atan2_16::@16
|
|
(label) atan2_16::@17
|
|
(label) atan2_16::@18
|
|
(label) atan2_16::@19
|
|
(label) atan2_16::@2
|
|
(label) atan2_16::@20
|
|
(label) atan2_16::@21
|
|
(label) atan2_16::@3
|
|
(label) atan2_16::@4
|
|
(label) atan2_16::@5
|
|
(label) atan2_16::@6
|
|
(label) atan2_16::@7
|
|
(label) atan2_16::@8
|
|
(label) atan2_16::@9
|
|
(label) atan2_16::@return
|
|
(word) atan2_16::angle
|
|
(word) atan2_16::angle#1 angle zp ZP_WORD:17 3.0
|
|
(word) atan2_16::angle#11 angle zp ZP_WORD:17 4.0
|
|
(word) atan2_16::angle#12 angle zp ZP_WORD:17 190.66666666666666
|
|
(word) atan2_16::angle#13 angle zp ZP_WORD:17 1334.6666666666667
|
|
(word) atan2_16::angle#2 angle zp ZP_WORD:17 2002.0
|
|
(word) atan2_16::angle#3 angle zp ZP_WORD:17 2002.0
|
|
(word) atan2_16::angle#4 angle zp ZP_WORD:17 4.0
|
|
(word) atan2_16::angle#5 angle zp ZP_WORD:17 4.0
|
|
(word) atan2_16::angle#6 angle zp ZP_WORD:17 2004.0
|
|
(byte) atan2_16::i
|
|
(byte) atan2_16::i#1 reg byte x 1501.5
|
|
(byte) atan2_16::i#2 reg byte x 208.54166666666669
|
|
(word) atan2_16::return
|
|
(word) atan2_16::return#0 return zp ZP_WORD:17 34.99999999999999
|
|
(word) atan2_16::return#2 return zp ZP_WORD:17 202.0
|
|
(byte) atan2_16::shift
|
|
(byte) atan2_16::shift#1 reg byte y 20002.0
|
|
(byte) atan2_16::shift#2 reg byte y 8001.25
|
|
(byte~) atan2_16::shift#5 reg byte y 667.3333333333334
|
|
(signed word) atan2_16::x
|
|
(signed word) atan2_16::x#0 x zp ZP_WORD:42 2.8684210526315796
|
|
(signed word) atan2_16::xd
|
|
(signed word) atan2_16::xd#1 xd zp ZP_WORD:21 6667.333333333333
|
|
(signed word~) atan2_16::xd#10 xd zp ZP_WORD:21 1001.0
|
|
(signed word) atan2_16::xd#2 xd zp ZP_WORD:21 1001.0
|
|
(signed word) atan2_16::xd#3 xd zp ZP_WORD:21 7668.333333333332
|
|
(signed word) atan2_16::xd#5 xd zp ZP_WORD:21 1001.0
|
|
(signed word) atan2_16::xi
|
|
(signed word) atan2_16::xi#0 xi zp ZP_WORD:15 6.0
|
|
(signed word) atan2_16::xi#1 xi zp ZP_WORD:15 500.5
|
|
(signed word~) atan2_16::xi#13 xi zp ZP_WORD:15 4.0
|
|
(signed word) atan2_16::xi#2 xi zp ZP_WORD:15 500.5
|
|
(signed word) atan2_16::xi#3 xi zp ZP_WORD:15 267.0666666666667
|
|
(signed word) atan2_16::xi#8 xi zp ZP_WORD:15 1001.0
|
|
(signed word) atan2_16::y
|
|
(signed word) atan2_16::y#0 y zp ZP_WORD:44 2.724999999999999
|
|
(signed word) atan2_16::yd
|
|
(signed word) atan2_16::yd#1 yd zp ZP_WORD:19 10001.0
|
|
(signed word~) atan2_16::yd#10 yd zp ZP_WORD:19 2002.0
|
|
(signed word) atan2_16::yd#2 yd zp ZP_WORD:19 2002.0
|
|
(signed word) atan2_16::yd#3 yd zp ZP_WORD:19 4601.0
|
|
(signed word) atan2_16::yd#5 yd zp ZP_WORD:19 2002.0
|
|
(signed word) atan2_16::yi
|
|
(signed word) atan2_16::yi#0 yi zp ZP_WORD:13 1.2000000000000002
|
|
(signed word) atan2_16::yi#1 yi zp ZP_WORD:13 667.3333333333334
|
|
(signed word~) atan2_16::yi#16 yi zp ZP_WORD:13 4.0
|
|
(signed word) atan2_16::yi#2 yi zp ZP_WORD:13 667.3333333333334
|
|
(signed word) atan2_16::yi#3 yi zp ZP_WORD:13 353.4117647058823
|
|
(signed word) atan2_16::yi#8 yi zp ZP_WORD:13 1001.0
|
|
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
|
|
(byte~) bsearch16u::$16 reg byte a 2002.0
|
|
(word*~) bsearch16u::$2 $2 zp ZP_WORD:30 4.0
|
|
(byte~) bsearch16u::$6 reg byte a 2002.0
|
|
(label) bsearch16u::@1
|
|
(label) bsearch16u::@2
|
|
(label) bsearch16u::@3
|
|
(label) bsearch16u::@4
|
|
(label) bsearch16u::@5
|
|
(label) bsearch16u::@6
|
|
(label) bsearch16u::@7
|
|
(label) bsearch16u::@8
|
|
(label) bsearch16u::@9
|
|
(label) bsearch16u::@return
|
|
(word*) bsearch16u::items
|
|
(word*) bsearch16u::items#0 items zp ZP_WORD:30 1001.0
|
|
(word*) bsearch16u::items#1 items zp ZP_WORD:30 2.0
|
|
(word*) bsearch16u::items#2 items zp ZP_WORD:30 334.5555555555556
|
|
(word*) bsearch16u::items#8 items zp ZP_WORD:30 1501.5
|
|
(word) bsearch16u::key
|
|
(word) bsearch16u::key#0 key zp ZP_WORD:49 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:51 501.0
|
|
(signed word) bsearch16u::result
|
|
(signed word) bsearch16u::result#0 result zp ZP_WORD:53 1501.5
|
|
(word*) bsearch16u::return
|
|
(word*) bsearch16u::return#1 return zp ZP_WORD:30 2.0
|
|
(word*) bsearch16u::return#2 return zp ZP_WORD:30 6.0
|
|
(word*) bsearch16u::return#3 return zp ZP_WORD:30 4.0
|
|
(word*~) bsearch16u::return#6 return zp ZP_WORD:30 4.0
|
|
(byte*) heap_head
|
|
(byte*) heap_head#1 heap_head zp ZP_WORD:36 0.6153846153846154
|
|
(byte*) heap_head#13 heap_head zp ZP_WORD:36 8.0
|
|
(void()) init_angle_screen((byte*) init_angle_screen::screen)
|
|
(word~) init_angle_screen::$10 $10 zp ZP_WORD:17 202.0
|
|
(byte~) init_angle_screen::$12 reg byte a 202.0
|
|
(byte~) init_angle_screen::$13 reg byte a 202.0
|
|
(byte~) init_angle_screen::$14 reg byte a 202.0
|
|
(byte~) init_angle_screen::$2 reg byte a 202.0
|
|
(byte~) init_angle_screen::$3 reg byte a 202.0
|
|
(byte~) init_angle_screen::$6 reg byte a 202.0
|
|
(label) init_angle_screen::@1
|
|
(label) init_angle_screen::@2
|
|
(label) init_angle_screen::@3
|
|
(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:46 84.16666666666666
|
|
(word) init_angle_screen::angle_w
|
|
(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:17 202.0
|
|
(byte*) init_angle_screen::screen
|
|
(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:7 3.0
|
|
(byte*) init_angle_screen::screen_bottomline
|
|
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:7 4.0
|
|
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:7 7.333333333333333
|
|
(byte*) init_angle_screen::screen_bottomline#5 screen_bottomline zp ZP_WORD:7 9.040000000000001
|
|
(byte*) init_angle_screen::screen_topline
|
|
(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:9 2.0
|
|
(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:9 5.5
|
|
(byte*) init_angle_screen::screen_topline#5 screen_topline zp ZP_WORD:9 9.416666666666666
|
|
(byte) init_angle_screen::x
|
|
(byte) init_angle_screen::x#1 x zp ZP_BYTE:11 101.0
|
|
(byte) init_angle_screen::x#2 x zp ZP_BYTE:11 25.25
|
|
(byte) init_angle_screen::xb
|
|
(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:12 101.0
|
|
(byte) init_angle_screen::xb#2 xb zp ZP_BYTE:12 19.238095238095237
|
|
(signed word) init_angle_screen::xw
|
|
(word) init_angle_screen::xw#0 xw zp ZP_WORD:42 33.666666666666664
|
|
(byte) init_angle_screen::y
|
|
(byte) init_angle_screen::y#1 y zp ZP_BYTE:6 16.5
|
|
(byte) init_angle_screen::y#4 y zp ZP_BYTE:6 4.730769230769231
|
|
(signed word) init_angle_screen::yw
|
|
(word) init_angle_screen::yw#0 yw zp ZP_WORD:44 50.5
|
|
(void()) init_buckets()
|
|
(label) init_buckets::@1
|
|
(label) init_buckets::@2
|
|
(label) init_buckets::@3
|
|
(label) init_buckets::@return
|
|
(byte*) init_buckets::dist
|
|
(byte*) init_buckets::dist#0 dist zp ZP_WORD:2 4.0
|
|
(byte*) init_buckets::dist#1 dist zp ZP_WORD:2 7.333333333333333
|
|
(byte*) init_buckets::dist#2 dist zp ZP_WORD:2 23.0
|
|
(byte) init_buckets::i
|
|
(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:4 16.5
|
|
(word) init_buckets::i1#2 i1 zp ZP_WORD:4 7.333333333333333
|
|
(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
|
|
(byte~) init_dist_screen::$5 reg byte a 22.0
|
|
(byte~) init_dist_screen::$7 reg byte a 22.0
|
|
(label) init_dist_screen::@1
|
|
(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
|
|
(label) init_dist_screen::@5
|
|
(label) init_dist_screen::@6
|
|
(label) init_dist_screen::@7
|
|
(label) init_dist_screen::@8
|
|
(label) init_dist_screen::@9
|
|
(label) init_dist_screen::@return
|
|
(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:49 202.0
|
|
(byte*) init_dist_screen::screen
|
|
(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:24 1.5
|
|
(byte*) init_dist_screen::screen_bottomline
|
|
(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:26 4.0
|
|
(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:26 7.333333333333333
|
|
(byte*) init_dist_screen::screen_bottomline#10 screen_bottomline zp ZP_WORD:26 6.848484848484849
|
|
(byte*) init_dist_screen::screen_topline
|
|
(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:24 5.5
|
|
(byte*) init_dist_screen::screen_topline#10 screen_topline zp ZP_WORD:24 7.0625
|
|
(byte) init_dist_screen::x
|
|
(byte) init_dist_screen::x#1 x zp ZP_BYTE:28 101.0
|
|
(byte) init_dist_screen::x#2 x zp ZP_BYTE:28 26.578947368421055
|
|
(byte) init_dist_screen::x2
|
|
(byte) init_dist_screen::x2#0 reg byte a 202.0
|
|
(byte) init_dist_screen::xb
|
|
(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:29 101.0
|
|
(byte) init_dist_screen::xb#2 xb zp ZP_BYTE:29 20.2
|
|
(byte) init_dist_screen::xd
|
|
(byte) init_dist_screen::xd#0 reg byte a 303.0
|
|
(word) init_dist_screen::xds
|
|
(word) init_dist_screen::xds#0 xds zp ZP_WORD:49 202.0
|
|
(byte) init_dist_screen::y
|
|
(byte) init_dist_screen::y#1 y zp ZP_BYTE:23 16.5
|
|
(byte) init_dist_screen::y#10 y zp ZP_BYTE:23 0.9705882352941178
|
|
(byte) init_dist_screen::y2
|
|
(byte) init_dist_screen::y2#0 reg byte a 22.0
|
|
(byte) init_dist_screen::yd
|
|
(byte) init_dist_screen::yd#0 reg byte a 33.0
|
|
(word) init_dist_screen::yds
|
|
(word) init_dist_screen::yds#0 yds zp ZP_WORD:47 4.869565217391305
|
|
(void()) init_squares()
|
|
(byte~) init_squares::$3 reg byte a 22.0
|
|
(byte~) init_squares::$4 reg byte a 22.0
|
|
(label) init_squares::@1
|
|
(label) init_squares::@2
|
|
(label) init_squares::@return
|
|
(byte) init_squares::i
|
|
(byte) init_squares::i#1 reg byte x 16.5
|
|
(byte) init_squares::i#2 reg byte x 5.5
|
|
(word) init_squares::sqr
|
|
(word) init_squares::sqr#1 sqr zp ZP_WORD:32 7.333333333333333
|
|
(word) init_squares::sqr#2 sqr zp ZP_WORD:32 6.6000000000000005
|
|
(word*) init_squares::squares
|
|
(word*) init_squares::squares#0 squares zp ZP_WORD:34 4.0
|
|
(word*) init_squares::squares#1 squares zp ZP_WORD:34 3.6666666666666665
|
|
(word*) init_squares::squares#2 squares zp ZP_WORD:34 17.5
|
|
(void()) main()
|
|
(label) main::@1
|
|
(label) main::@2
|
|
(label) main::@return
|
|
(void*()) malloc((word) malloc::size)
|
|
(label) malloc::@return
|
|
(byte*) malloc::mem
|
|
(byte*) malloc::mem#0 mem zp ZP_WORD:38 0.5714285714285714
|
|
(void*) malloc::return
|
|
(word) malloc::size
|
|
(word) malloc::size#4 size zp ZP_WORD:38 2.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:49 28.5
|
|
(word) sqr::return#2 return#2 zp ZP_WORD:47 22.0
|
|
(word) sqr::return#3 return zp ZP_WORD:49 202.0
|
|
(byte) sqr::val
|
|
(byte) sqr::val#0 reg byte a 22.0
|
|
(byte) sqr::val#1 reg byte a 202.0
|
|
(byte) sqr::val#2 reg byte a 114.0
|
|
(byte()) sqrt((word) sqrt::val)
|
|
(word~) sqrt::$1 $1 zp ZP_WORD:30 2.0
|
|
(word~) sqrt::$3 $3 zp ZP_WORD:30 4.0
|
|
(label) sqrt::@1
|
|
(label) sqrt::@return
|
|
(word*) sqrt::found
|
|
(word*) sqrt::found#0 found zp ZP_WORD:30 4.0
|
|
(byte) sqrt::return
|
|
(byte) sqrt::return#0 reg byte a 34.33333333333333
|
|
(byte) sqrt::return#2 reg byte a 202.0
|
|
(byte) sqrt::sq
|
|
(word) sqrt::val
|
|
(word) sqrt::val#0 val zp ZP_WORD:49 103.0
|
|
|
|
reg byte y [ init_buckets::i#2 init_buckets::i#1 ]
|
|
zp ZP_WORD:2 [ init_buckets::dist#2 init_buckets::dist#0 init_buckets::dist#1 SCREEN_DIST#0 ]
|
|
zp ZP_WORD:4 [ init_buckets::i1#2 init_buckets::i1#1 ]
|
|
zp ZP_BYTE:6 [ init_angle_screen::y#4 init_angle_screen::y#1 ]
|
|
zp ZP_WORD:7 [ init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 SCREEN_ANGLE#0 ]
|
|
zp ZP_WORD:9 [ init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
|
|
zp ZP_BYTE:11 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
|
|
zp ZP_BYTE:12 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
|
|
zp ZP_WORD:13 [ 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:15 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
|
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
|
|
zp ZP_WORD:17 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$10 ]
|
|
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
|
|
zp ZP_WORD:19 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
|
|
zp ZP_WORD:21 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
|
|
zp ZP_BYTE:23 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
|
|
zp ZP_WORD:24 [ init_dist_screen::screen_topline#10 init_dist_screen::screen_topline#1 init_dist_screen::screen#0 ]
|
|
zp ZP_WORD:26 [ 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:28 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
|
|
zp ZP_BYTE:29 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
|
|
reg byte a [ init_dist_screen::xd#0 init_dist_screen::$15 init_dist_screen::$13 ]
|
|
zp ZP_WORD:30 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ]
|
|
reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
|
|
reg byte a [ sqr::val#2 sqr::val#0 sqr::val#1 ]
|
|
zp ZP_WORD:32 [ init_squares::sqr#2 init_squares::sqr#1 ]
|
|
zp ZP_WORD:34 [ 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:36 [ heap_head#13 heap_head#1 ]
|
|
zp ZP_WORD:38 [ malloc::size#4 malloc::mem#0 SQUARES#1 ]
|
|
zp ZP_WORD:40 [ BUCKET_SIZES#0 ]
|
|
reg byte a [ init_angle_screen::$2 ]
|
|
reg byte a [ init_angle_screen::$3 ]
|
|
zp ZP_WORD:42 [ init_angle_screen::xw#0 atan2_16::x#0 ]
|
|
reg byte a [ init_angle_screen::$6 ]
|
|
zp ZP_WORD:44 [ init_angle_screen::yw#0 atan2_16::y#0 ]
|
|
zp ZP_BYTE:46 [ 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:47 [ sqr::return#2 init_dist_screen::yds#0 ]
|
|
reg byte a [ init_dist_screen::x2#0 ]
|
|
zp ZP_WORD:49 [ 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:51 [ bsearch16u::pivot#0 ]
|
|
zp ZP_WORD:53 [ bsearch16u::result#0 ]
|
|
reg byte a [ sqr::$0 ]
|
|
reg byte a [ init_squares::$3 ]
|
|
reg byte a [ init_squares::$4 ]
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 1093479
|
|
|
|
// 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(bbegin)
|
|
.pc = $80d "Program"
|
|
// Global Constants & labels
|
|
.const SIZEOF_WORD = 2
|
|
.const SIZEOF_BYTE = 1
|
|
// Top of the heap used by malloc()
|
|
.label HEAP_TOP = $a000
|
|
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
|
.const CORDIC_ITERATIONS_16 = $f
|
|
// The number of buckets in our bucket sort
|
|
.const NUM_BUCKETS = $30
|
|
.const NUM_SQUARES = $30
|
|
.label heap_head = $24
|
|
.label SQUARES = $26
|
|
// Screen containing distance to center
|
|
.label SCREEN_DIST = 2
|
|
// Screen containing angle to center
|
|
.label SCREEN_ANGLE = 7
|
|
// Array containing the bucket size for each of the 256 buckets
|
|
.label BUCKET_SIZES = $28
|
|
// @begin
|
|
bbegin:
|
|
// [1] phi from @begin to @1 [phi:@begin->@1]
|
|
// @1
|
|
// malloc(1000)
|
|
// [2] call malloc
|
|
// [190] phi from @1 to malloc [phi:@1->malloc]
|
|
// [190] phi (word) malloc::size#4 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta malloc.size
|
|
lda #>$3e8
|
|
sta malloc.size+1
|
|
// [190] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1
|
|
lda #<HEAP_TOP
|
|
sta heap_head
|
|
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
|
|
// [190] phi from @4 to malloc [phi:@4->malloc]
|
|
// [190] phi (word) malloc::size#4 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1
|
|
lda #<$3e8
|
|
sta malloc.size
|
|
lda #>$3e8
|
|
sta malloc.size+1
|
|
// [190] phi (byte*) heap_head#13 = (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
|
|
// [190] phi from @2 to malloc [phi:@2->malloc]
|
|
// [190] phi (word) malloc::size#4 = (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
|
|
// [190] phi (byte*) heap_head#13 = (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
|
|
// [9] phi from @6 to @3 [phi:@6->@3]
|
|
// @3
|
|
// [10] call main
|
|
jsr main
|
|
rts
|
|
// [11] phi from @3 to @end [phi:@3->@end]
|
|
// @end
|
|
// main
|
|
main: {
|
|
// init_dist_screen(SCREEN_DIST)
|
|
// [12] (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
|
|
// [13] call init_dist_screen
|
|
// [105] phi from main to init_dist_screen [phi:main->init_dist_screen]
|
|
jsr init_dist_screen
|
|
// main::@1
|
|
// init_angle_screen(SCREEN_ANGLE)
|
|
// [14] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
|
|
// [15] call init_angle_screen
|
|
jsr init_angle_screen
|
|
// [16] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
|
|
// main::@2
|
|
// init_buckets()
|
|
// [17] call init_buckets
|
|
// [19] phi from main::@2 to init_buckets [phi:main::@2->init_buckets]
|
|
jsr init_buckets
|
|
// main::@return
|
|
// }
|
|
// [18] return
|
|
rts
|
|
}
|
|
// init_buckets
|
|
//const word*[] BUCKETS = malloc(NUM_BUCKETS*sizeof(word*));
|
|
init_buckets: {
|
|
.label dist = 2
|
|
.label i1 = 4
|
|
// [20] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
|
|
// [20] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1
|
|
ldy #0
|
|
// Init bucket sizes to 0
|
|
// [20] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
|
|
// [20] 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
|
|
// [21] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1
|
|
lda #0
|
|
sta (BUCKET_SIZES),y
|
|
// for(byte i:0..NUM_BUCKETS-1)
|
|
// [22] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy
|
|
iny
|
|
// [23] 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
|
|
// init_buckets::@2
|
|
// dist = SCREEN_DIST
|
|
// [24] (byte*) init_buckets::dist#0 ← (byte*)(void*) SCREEN_DIST#0
|
|
// first find bucket sizes - by counting number of chars with each distance value
|
|
// [25] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
|
|
// [25] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1
|
|
sta i1
|
|
sta i1+1
|
|
// [25] phi (byte*) init_buckets::dist#2 = (byte*) init_buckets::dist#0 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy
|
|
// [25] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
|
|
// [25] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy
|
|
// [25] phi (byte*) init_buckets::dist#2 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy
|
|
// init_buckets::@3
|
|
b3:
|
|
// BUCKET_SIZES[*dist++]++;
|
|
// [26] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#2)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2
|
|
ldy #0
|
|
lda (dist),y
|
|
tay
|
|
lda (BUCKET_SIZES),y
|
|
clc
|
|
adc #1
|
|
sta (BUCKET_SIZES),y
|
|
// [27] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#2 -- pbuz1=_inc_pbuz1
|
|
inc dist
|
|
bne !+
|
|
inc dist+1
|
|
!:
|
|
// for( word i:0..999)
|
|
// [28] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1
|
|
inc i1
|
|
bne !+
|
|
inc i1+1
|
|
!:
|
|
// [29] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1
|
|
lda i1+1
|
|
cmp #>$3e8
|
|
bne b3
|
|
lda i1
|
|
cmp #<$3e8
|
|
bne b3
|
|
// init_buckets::@return
|
|
// }
|
|
// [30] 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(7) screen)
|
|
init_angle_screen: {
|
|
.label _10 = $11
|
|
.label screen = 7
|
|
.label screen_topline = 9
|
|
.label screen_bottomline = 7
|
|
.label xw = $2a
|
|
.label yw = $2c
|
|
.label angle_w = $11
|
|
.label ang_w = $2e
|
|
.label x = $b
|
|
.label xb = $c
|
|
.label y = 6
|
|
// screen_topline = screen+40*12
|
|
// [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$c
|
|
sta screen_topline
|
|
lda screen+1
|
|
adc #>$28*$c
|
|
sta screen_topline+1
|
|
// screen_bottomline = screen+40*12
|
|
// [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1
|
|
clc
|
|
lda screen_bottomline
|
|
adc #<$28*$c
|
|
sta screen_bottomline
|
|
lda screen_bottomline+1
|
|
adc #>$28*$c
|
|
sta screen_bottomline+1
|
|
// [33] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] phi (byte) init_angle_screen::y#4 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
|
|
lda #0
|
|
sta y
|
|
// [33] phi from init_angle_screen::@3 to init_angle_screen::@1 [phi:init_angle_screen::@3->init_angle_screen::@1]
|
|
// [33] 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
|
|
// [33] 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
|
|
// [33] 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:
|
|
// [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
|
|
// [34] 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
|
|
// [34] 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
|
|
// [34] phi from init_angle_screen::@4 to init_angle_screen::@2 [phi:init_angle_screen::@4->init_angle_screen::@2]
|
|
// [34] 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
|
|
// [34] 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
|
|
// [35] (byte~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda x
|
|
asl
|
|
// 39-x*2
|
|
// [36] (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 }
|
|
// [37] (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
|
|
// [38] (byte~) init_angle_screen::$6 ← (byte) init_angle_screen::y#4 << (byte) 1 -- vbuaa=vbuz1_rol_1
|
|
lda y
|
|
asl
|
|
// (word){ y*2, 0 }
|
|
// [39] (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)
|
|
// [40] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
|
|
// [41] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
|
|
// [42] call atan2_16
|
|
jsr atan2_16
|
|
// [43] (word) atan2_16::return#2 ← (word) atan2_16::return#0
|
|
// init_angle_screen::@4
|
|
// angle_w = atan2_16(xw, yw)
|
|
// [44] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
|
|
// angle_w+0x0080
|
|
// [45] (word~) init_angle_screen::$10 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
|
|
lda #$80
|
|
clc
|
|
adc _10
|
|
sta _10
|
|
bcc !+
|
|
inc _10+1
|
|
!:
|
|
// ang_w = >(angle_w+0x0080)
|
|
// [46] (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
|
|
// [47] *((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
|
|
// [48] (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
|
|
// [49] *((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
|
|
// [50] (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
|
|
// [51] *((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
|
|
// [52] (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
|
|
// [53] *((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--)
|
|
// [54] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc x
|
|
// [55] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec xb
|
|
// [56] 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
|
|
// [57] (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
|
|
sta screen_topline
|
|
lda screen_topline+1
|
|
sbc #>$28
|
|
sta screen_topline+1
|
|
// screen_bottomline += 40
|
|
// [58] (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
|
|
sta screen_bottomline
|
|
bcc !+
|
|
inc screen_bottomline+1
|
|
!:
|
|
// for(byte y: 0..12)
|
|
// [59] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#4 -- vbuz1=_inc_vbuz1
|
|
inc y
|
|
// [60] 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
|
|
// }
|
|
// [61] 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($2a) x, signed word zeropage($2c) y)
|
|
atan2_16: {
|
|
.label _2 = $d
|
|
.label _7 = $f
|
|
.label yi = $d
|
|
.label xi = $f
|
|
.label angle = $11
|
|
.label xd = $15
|
|
.label yd = $13
|
|
.label return = $11
|
|
.label x = $2a
|
|
.label y = $2c
|
|
// (y>=0)?y:-y
|
|
// [62] 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
|
|
// [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc y
|
|
sta _2
|
|
lda #0
|
|
sbc y+1
|
|
sta _2+1
|
|
// [64] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
|
|
// [64] 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
|
|
// [65] 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
|
|
// [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
|
|
sec
|
|
lda #0
|
|
sbc x
|
|
sta _7
|
|
lda #0
|
|
sbc x+1
|
|
sta _7+1
|
|
// [67] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
|
|
// [67] 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:
|
|
// [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
|
|
// [68] 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
|
|
// [68] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
|
|
tax
|
|
// [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
|
|
// [68] 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)
|
|
// [69] 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
|
|
// [70] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
|
|
// [70] 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
|
|
// [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1
|
|
lsr angle+1
|
|
ror angle
|
|
// if(x<0)
|
|
// [72] 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
|
|
// [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
|
|
sec
|
|
lda #<$8000
|
|
sbc angle
|
|
sta angle
|
|
lda #>$8000
|
|
sbc angle+1
|
|
sta angle+1
|
|
// [74] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
|
|
// [74] 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)
|
|
// [75] 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
|
|
// [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
|
|
sec
|
|
lda #0
|
|
sbc angle
|
|
sta angle
|
|
lda #0
|
|
sbc angle+1
|
|
sta angle+1
|
|
// [77] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
|
|
// [77] 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
|
|
// }
|
|
// [78] return
|
|
rts
|
|
// atan2_16::@11
|
|
b11:
|
|
// [79] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx
|
|
txa
|
|
tay
|
|
// [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
|
|
lda xi
|
|
sta xd
|
|
lda xi+1
|
|
sta xd+1
|
|
// [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
|
|
lda yi
|
|
sta yd
|
|
lda yi+1
|
|
sta yd+1
|
|
// [82] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
|
|
// [82] 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
|
|
// [82] 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
|
|
// [82] 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)
|
|
// [83] 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)
|
|
// [84] 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
|
|
// [85] (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
|
|
// [86] (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
|
|
// [87] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
|
|
// [87] 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
|
|
// [87] 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)
|
|
// [88] 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
|
|
// [89] (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
|
|
sta xi
|
|
lda xi+1
|
|
sbc yd+1
|
|
sta xi+1
|
|
// yi += xd
|
|
// [90] (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
|
|
sta yi
|
|
lda yi+1
|
|
adc xd+1
|
|
sta yi+1
|
|
// angle -= CORDIC_ATAN2_ANGLES_16[i]
|
|
// [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [92] (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
|
|
sbc CORDIC_ATAN2_ANGLES_16,y
|
|
sta angle
|
|
lda angle+1
|
|
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta angle+1
|
|
// [93] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
|
|
// [93] 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
|
|
// [93] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
|
|
// [93] 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)
|
|
// [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [95] 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:
|
|
// [68] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
|
|
// [68] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
|
|
// [68] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
|
|
// [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
|
|
// [68] 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
|
|
// [96] (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
|
|
sta xi
|
|
lda xi+1
|
|
adc yd+1
|
|
sta xi+1
|
|
// yi -= xd
|
|
// [97] (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
|
|
sta yi
|
|
lda yi+1
|
|
sbc xd+1
|
|
sta yi+1
|
|
// angle += CORDIC_ATAN2_ANGLES_16[i]
|
|
// [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// [99] (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
|
|
adc CORDIC_ATAN2_ANGLES_16,y
|
|
sta angle
|
|
lda angle+1
|
|
adc CORDIC_ATAN2_ANGLES_16+1,y
|
|
sta angle+1
|
|
jmp b19
|
|
// atan2_16::@14
|
|
b14:
|
|
// xd >>= 2
|
|
// [100] (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
|
|
ror xd
|
|
lda xd+1
|
|
cmp #$80
|
|
ror xd+1
|
|
ror xd
|
|
// yd >>= 2
|
|
// [101] (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
|
|
ror yd
|
|
lda yd+1
|
|
cmp #$80
|
|
ror yd+1
|
|
ror yd
|
|
// shift -=2
|
|
// [102] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2
|
|
dey
|
|
dey
|
|
jmp b13
|
|
// atan2_16::@4
|
|
b4:
|
|
// [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
|
|
lda x
|
|
sta xi
|
|
lda x+1
|
|
sta xi+1
|
|
jmp b6
|
|
// atan2_16::@1
|
|
b1:
|
|
// [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
|
|
lda y
|
|
sta yi
|
|
lda y+1
|
|
sta yi+1
|
|
jmp b3
|
|
}
|
|
// init_dist_screen
|
|
// Populates 1000 bytes (a screen) with values representing the distance to the center.
|
|
// The actual value stored is distance*2 to increase precision
|
|
// init_dist_screen(byte* zeropage($18) screen)
|
|
init_dist_screen: {
|
|
.label screen = $18
|
|
.label screen_bottomline = $1a
|
|
.label yds = $2f
|
|
.label xds = $31
|
|
.label ds = $31
|
|
.label x = $1c
|
|
.label xb = $1d
|
|
.label screen_topline = $18
|
|
.label y = $17
|
|
// init_squares()
|
|
// [106] call init_squares
|
|
// [177] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
|
|
jsr init_squares
|
|
// init_dist_screen::@10
|
|
// screen_bottomline = screen+40*24
|
|
// [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1
|
|
lda screen
|
|
clc
|
|
adc #<$28*$18
|
|
sta screen_bottomline
|
|
lda screen+1
|
|
adc #>$28*$18
|
|
sta screen_bottomline+1
|
|
// [108] phi from init_dist_screen::@10 to init_dist_screen::@1 [phi:init_dist_screen::@10->init_dist_screen::@1]
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] phi from init_dist_screen::@9 to init_dist_screen::@1 [phi:init_dist_screen::@9->init_dist_screen::@1]
|
|
// [108] 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
|
|
// [108] 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
|
|
// [108] 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
|
|
// [109] (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)
|
|
// [110] 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
|
|
// [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
clc
|
|
adc #$18+1
|
|
// [112] 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]
|
|
// [112] 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)
|
|
// [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
|
|
// [114] call sqr
|
|
// [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
|
|
// [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy
|
|
jsr sqr
|
|
// sqr(yd)
|
|
// [115] (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::@11
|
|
// yds = sqr(yd)
|
|
// [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
|
|
// [117] phi from init_dist_screen::@11 to init_dist_screen::@5 [phi:init_dist_screen::@11->init_dist_screen::@5]
|
|
// [117] 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
|
|
// [117] 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
|
|
// [117] phi from init_dist_screen::@13 to init_dist_screen::@5 [phi:init_dist_screen::@13->init_dist_screen::@5]
|
|
// [117] 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
|
|
// [117] 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
|
|
// [118] (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)
|
|
// [119] 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
|
|
// [120] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa
|
|
eor #$ff
|
|
clc
|
|
adc #$27+1
|
|
// [121] 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]
|
|
// [121] 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)
|
|
// [122] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
|
|
// [123] call sqr
|
|
// [173] phi from init_dist_screen::@8 to sqr [phi:init_dist_screen::@8->sqr]
|
|
// [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@8->sqr#0] -- register_copy
|
|
jsr sqr
|
|
// sqr(xd)
|
|
// [124] (word) sqr::return#3 ← (word) sqr::return#0
|
|
// init_dist_screen::@12
|
|
// xds = sqr(xd)
|
|
// [125] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
|
|
// ds = xds+yds
|
|
// [126] (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
|
|
sta ds
|
|
lda ds+1
|
|
adc yds+1
|
|
sta ds+1
|
|
// sqrt(ds)
|
|
// [127] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
|
|
// [128] call sqrt
|
|
jsr sqrt
|
|
// [129] (byte) sqrt::return#2 ← (byte) sqrt::return#0
|
|
// init_dist_screen::@13
|
|
// d = sqrt(ds)
|
|
// [130] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
|
|
// screen_topline[x] = d
|
|
// [131] *((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
|
|
// [132] *((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
|
|
// [133] *((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
|
|
// [134] *((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--)
|
|
// [135] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1
|
|
inc x
|
|
// [136] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1
|
|
dec xb
|
|
// [137] 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
|
|
// [138] (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
|
|
sta screen_topline
|
|
bcc !+
|
|
inc screen_topline+1
|
|
!:
|
|
// screen_bottomline -= 40
|
|
// [139] (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
|
|
sta screen_bottomline
|
|
lda screen_bottomline+1
|
|
sbc #>$28
|
|
sta screen_bottomline+1
|
|
// for(byte y: 0..12)
|
|
// [140] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1
|
|
inc y
|
|
// [141] 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
|
|
// }
|
|
// [142] return
|
|
rts
|
|
// init_dist_screen::@6
|
|
b6:
|
|
// (x2>=39)?(x2-39):(39-x2)
|
|
// [143] (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)
|
|
// [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1
|
|
sec
|
|
sbc #$18
|
|
jmp b4
|
|
}
|
|
// sqrt
|
|
// 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($31) val)
|
|
sqrt: {
|
|
.label _1 = $1e
|
|
.label _3 = $1e
|
|
.label found = $1e
|
|
.label val = $31
|
|
// bsearch16u(val, SQUARES, NUM_SQUARES)
|
|
// [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0
|
|
// [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2
|
|
lda SQUARES
|
|
sta bsearch16u.items
|
|
lda SQUARES+1
|
|
sta bsearch16u.items+1
|
|
// [147] call bsearch16u
|
|
// [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
|
|
jsr bsearch16u
|
|
// bsearch16u(val, SQUARES, NUM_SQUARES)
|
|
// [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
|
|
// sqrt::@1
|
|
// found = bsearch16u(val, SQUARES, NUM_SQUARES)
|
|
// [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
|
|
// found-SQUARES
|
|
// [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2
|
|
lda _3
|
|
sec
|
|
sbc SQUARES
|
|
sta _3
|
|
lda _3+1
|
|
sbc SQUARES+1
|
|
sta _3+1
|
|
// [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1
|
|
lsr _1+1
|
|
ror _1
|
|
// (byte)(found-SQUARES)
|
|
// [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1
|
|
lda _1
|
|
// sqrt::@return
|
|
// }
|
|
// [153] return
|
|
rts
|
|
}
|
|
// bsearch16u
|
|
// Searches an array of nitems unsigned words, the initial member of which is pointed to by base, for a member that matches the value key.
|
|
// - key - The value to look for
|
|
// - 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($31) key, word* zeropage($1e) items, byte register(X) num)
|
|
bsearch16u: {
|
|
.label _2 = $1e
|
|
.label pivot = $33
|
|
.label result = $35
|
|
.label return = $1e
|
|
.label items = $1e
|
|
.label key = $31
|
|
// [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
|
|
// [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy
|
|
// [155] 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)
|
|
// [156] 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
|
|
// [157] 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
|
|
bne !+
|
|
dey
|
|
lda (items),y
|
|
cmp key
|
|
beq b2
|
|
!:
|
|
bcc b2
|
|
// bsearch16u::@1
|
|
// [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1
|
|
lda _2
|
|
sec
|
|
sbc #<1*SIZEOF_WORD
|
|
sta _2
|
|
lda _2+1
|
|
sbc #>1*SIZEOF_WORD
|
|
sta _2+1
|
|
// [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
|
|
// [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy
|
|
// bsearch16u::@2
|
|
b2:
|
|
// [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
|
|
// [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy
|
|
// bsearch16u::@return
|
|
// }
|
|
// [161] return
|
|
rts
|
|
// bsearch16u::@4
|
|
b4:
|
|
// num >> 1
|
|
// [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1
|
|
txa
|
|
lsr
|
|
// items + (num >> 1)
|
|
// [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1
|
|
asl
|
|
// [164] (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
|
|
// result = (signed word)key-(signed word)*pivot
|
|
// [165] (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
|
|
sbc (pivot),y
|
|
sta result
|
|
lda key+1
|
|
iny
|
|
sbc (pivot),y
|
|
sta result+1
|
|
// if (result == 0)
|
|
// [166] 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
|
|
// [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2
|
|
lda pivot
|
|
sta return
|
|
lda pivot+1
|
|
sta return+1
|
|
rts
|
|
// bsearch16u::@6
|
|
b6:
|
|
// if (result > 0)
|
|
// [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1
|
|
lda result+1
|
|
bmi b7
|
|
bne !+
|
|
lda result
|
|
beq b7
|
|
!:
|
|
// bsearch16u::@9
|
|
// items = pivot+1
|
|
// [169] (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
|
|
sta items
|
|
lda #0
|
|
adc pivot+1
|
|
sta items+1
|
|
// num--;
|
|
// [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx
|
|
dex
|
|
// [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
|
|
// [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy
|
|
// [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy
|
|
// bsearch16u::@7
|
|
b7:
|
|
// num >>= 1
|
|
// [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1
|
|
txa
|
|
lsr
|
|
tax
|
|
// [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
|
|
// [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy
|
|
// [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy
|
|
jmp b3
|
|
}
|
|
// sqr
|
|
// Find the square of a byte value
|
|
// Uses a table of squares that must be initialized by calling init_squares()
|
|
// sqr(byte register(A) val)
|
|
sqr: {
|
|
.label return = $31
|
|
.label return_2 = $2f
|
|
// return SQUARES[val];
|
|
// [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1
|
|
asl
|
|
// [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa
|
|
tay
|
|
lda (SQUARES),y
|
|
sta return
|
|
iny
|
|
lda (SQUARES),y
|
|
sta return+1
|
|
// sqr::@return
|
|
// }
|
|
// [176] return
|
|
rts
|
|
}
|
|
// init_squares
|
|
// Initialize squares table
|
|
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
|
|
init_squares: {
|
|
.label squares = $22
|
|
.label sqr = $20
|
|
// malloc(NUM_SQUARES*sizeof(word))
|
|
// [178] call malloc
|
|
// [190] phi from init_squares to malloc [phi:init_squares->malloc]
|
|
// [190] phi (word) malloc::size#4 = (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
|
|
// [190] phi (byte*) heap_head#13 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy
|
|
jsr malloc
|
|
// init_squares::@2
|
|
// malloc(NUM_SQUARES*sizeof(word))
|
|
// [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
|
|
// squares = SQUARES
|
|
// [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2
|
|
lda SQUARES
|
|
sta squares
|
|
lda SQUARES+1
|
|
sta squares+1
|
|
// [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
|
|
// [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1
|
|
ldx #0
|
|
// [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy
|
|
// [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1
|
|
txa
|
|
sta sqr
|
|
sta sqr+1
|
|
// [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
|
|
// [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy
|
|
// [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy
|
|
// [181] 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
|
|
// [182] *((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
|
|
// *squares++ = sqr;
|
|
// [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1
|
|
lda #SIZEOF_WORD
|
|
clc
|
|
adc squares
|
|
sta squares
|
|
bcc !+
|
|
inc squares+1
|
|
!:
|
|
// i*2
|
|
// [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
|
|
txa
|
|
asl
|
|
// i*2+1
|
|
// [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1
|
|
clc
|
|
adc #1
|
|
// sqr += i*2+1
|
|
// [186] (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
|
|
!:
|
|
// for( byte i: 0..NUM_SQUARES-1)
|
|
// [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx
|
|
inx
|
|
// [188] 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
|
|
// }
|
|
// [189] return
|
|
rts
|
|
}
|
|
// malloc
|
|
// Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
|
|
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
|
|
// malloc(word zeropage($26) size)
|
|
malloc: {
|
|
.label mem = $26
|
|
.label size = $26
|
|
// mem = heap_head-size
|
|
// [191] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#4 -- pbuz1=pbuz2_minus_vwuz1
|
|
lda heap_head
|
|
sec
|
|
sbc mem
|
|
sta mem
|
|
lda heap_head+1
|
|
sbc mem+1
|
|
sta mem+1
|
|
// heap_head = mem
|
|
// [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2
|
|
lda mem
|
|
sta heap_head
|
|
lda mem+1
|
|
sta heap_head+1
|
|
// malloc::@return
|
|
// }
|
|
// [193] return
|
|
rts
|
|
}
|
|
// File Data
|
|
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
|
CORDIC_ATAN2_ANGLES_16:
|
|
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
|
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
|
|
|
|