1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-13 19:37:19 +00:00

Rewrote many example routines to use multiply/divide instead of shifts.

This commit is contained in:
jespergravgaard 2019-04-15 10:20:55 +02:00
parent 056289aaaf
commit 21f65d7ddf
85 changed files with 906 additions and 655 deletions

View File

@ -10,7 +10,7 @@ void main() {
byte* cur_item = items;
for( byte item: 0..ITEM_COUNT-1) {
for( byte sub: 0..ITEM_SIZE-1) {
cur_item[sub] = item<<4|sub;
cur_item[sub] = item*$10|sub;
}
cur_item += ITEM_SIZE;
}

View File

@ -66,7 +66,7 @@ void init_plot_tables() {
plot_xlo[x] = x&$f8;
plot_xhi[x] = >BITMAP;
plot_bit[x] = bits;
bits = bits>>1;
bits = bits/2;
if(bits==0) {
bits = $80;
}

View File

@ -36,7 +36,7 @@ void main() {
*CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input
*CIA2_PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000); // Set VIC Bank
// VIC memory
*VIC_MEMORY = (byte)((((word)SCREEN)&$3fff)>>6) | ((>(((word)SCREEN)&$3fff))>>2);
*VIC_MEMORY = (byte)((((word)SCREEN)&$3fff)/$40) | ((>(((word)SCREEN)&$3fff))/4);
// DTV Palette - Grey Tones
for(byte j : 0..$f) {
@ -67,7 +67,7 @@ void main() {
do {
rst = *RASTER;
*VIC_CONTROL = VIC_DEN | VIC_ECM | VIC_RSEL | (rst&7);
*BORDERCOL = rst<<4;
*BORDERCOL = rst*$10;
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
} while (rst!=$f2);
}
@ -85,7 +85,7 @@ void gfx_init_screen0() {
byte* ch=SCREEN;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*ch++ = (cy&$f)<<4|(cx&$f);
*ch++ = (cy&$f)*$10|(cx&$f);
}
}
}
@ -108,7 +108,7 @@ void gfx_init_plane_charset8() {
c = col;
}
*gfxa++ = c;
bits = bits<<1;
bits = bits*2;
col++;
}
}

View File

@ -27,7 +27,7 @@ void main() {
*CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input
*CIA2_PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000); // Set VIC Bank
// VIC memory
*VIC_MEMORY = (byte)((((word)CHUNKY)&$3fff)>>6) | ((>(((word)CHUNKY)&$3fff))>>2);
*VIC_MEMORY = (byte)((((word)CHUNKY)&$3fff)/$40) | ((>(((word)CHUNKY)&$3fff))/4);
// DTV Palette - Grey Tones
for(byte j : 0..$f) {
@ -58,7 +58,7 @@ void main() {
do {
rst = *RASTER;
*VIC_CONTROL = VIC_DEN | VIC_ECM | VIC_RSEL | (rst&7);
*BORDERCOL = rst<<4;
*BORDERCOL = rst*$10;
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
} while (rst!=$f2);
}

View File

@ -332,30 +332,30 @@ void gfx_mode() {
*VIC_CONTROL2 = vic_control2;
// Linear Graphics Plane A Counter
byte plane_a_offs = *form_a_start_hi<<4|*form_a_start_lo;
byte plane_a_offs = *form_a_start_hi*$10|*form_a_start_lo;
dword plane_a = get_plane(*form_a_pattern) + plane_a_offs;
*DTV_PLANEA_START_LO = < < plane_a;
*DTV_PLANEA_START_MI = > < plane_a;
*DTV_PLANEA_START_HI = < > plane_a;
*DTV_PLANEA_STEP = *form_a_step_hi<<4|*form_a_step_lo;
*DTV_PLANEA_MODULO_LO = *form_a_mod_hi<<4|*form_a_mod_lo;
*DTV_PLANEA_STEP = *form_a_step_hi*$10|*form_a_step_lo;
*DTV_PLANEA_MODULO_LO = *form_a_mod_hi*$10|*form_a_mod_lo;
*DTV_PLANEA_MODULO_HI = 0;
// Linear Graphics Plane B Counter
byte plane_b_offs = *form_b_start_hi<<4|*form_b_start_lo;
byte plane_b_offs = *form_b_start_hi*$10|*form_b_start_lo;
dword plane_b = get_plane(*form_b_pattern) + plane_b_offs;
*DTV_PLANEB_START_LO = < < plane_b;
*DTV_PLANEB_START_MI = > < plane_b;
*DTV_PLANEB_START_HI = < > plane_b;
*DTV_PLANEB_STEP = *form_b_step_hi<<4|*form_b_step_lo;
*DTV_PLANEB_MODULO_LO = *form_b_mod_hi<<4|*form_b_mod_lo;
*DTV_PLANEB_STEP = *form_b_step_hi*$10|*form_b_step_lo;
*DTV_PLANEB_MODULO_LO = *form_b_mod_hi*$10|*form_b_mod_lo;
*DTV_PLANEB_MODULO_HI = 0;
// VIC Graphics Bank
*CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input
*CIA2_PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000); // Set VIC Bank
// VIC memory
*VIC_MEMORY = (byte)(((word)get_vic_screen(*form_vic_screen)&$3fff)>>6) | ((>((word)get_vic_charset(*form_vic_gfx)&$3fff))>>2);
*VIC_MEMORY = (byte)(((word)get_vic_screen(*form_vic_screen)&$3fff)/$40) | ((>((word)get_vic_charset(*form_vic_gfx)&$3fff))/4);
// VIC Colors
byte* vic_colors = get_vic_screen(*form_vic_cols);
@ -368,10 +368,10 @@ void gfx_mode() {
// Background colors
*BORDERCOL = 0;
*BGCOL1 = *form_vic_bg0_hi<<4|*form_vic_bg0_lo;
*BGCOL2 = *form_vic_bg1_hi<<4|*form_vic_bg1_lo;
*BGCOL3 = *form_vic_bg2_hi<<4|*form_vic_bg2_lo;
*BGCOL4 = *form_vic_bg3_hi<<4|*form_vic_bg3_lo;
*BGCOL1 = *form_vic_bg0_hi*$10|*form_vic_bg0_lo;
*BGCOL2 = *form_vic_bg1_hi*$10|*form_vic_bg1_lo;
*BGCOL3 = *form_vic_bg2_hi*$10|*form_vic_bg2_lo;
*BGCOL4 = *form_vic_bg3_hi*$10|*form_vic_bg3_lo;
// DTV Palette
if(*form_dtv_palet==0) {
@ -435,7 +435,7 @@ void gfx_init_screen0() {
byte* ch=VIC_SCREEN0;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*ch++ = (cy&$f)<<4|(cx&$f);
*ch++ = (cy&$f)*$10|(cx&$f);
}
}
}
@ -457,7 +457,7 @@ void gfx_init_screen2() {
for(byte cx: 0..39) {
byte col = (cx+cy)&$f;
byte col2 = ($f-col);
*ch++ = col<<4 | col2;
*ch++ = col*$10 | col2;
}
}
}
@ -467,7 +467,7 @@ void gfx_init_screen3() {
byte* ch=VIC_SCREEN3;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*ch++ = (cx&3)<<4|(cy&3);
*ch++ = (cx&3)*$10|(cy&3);
}
}
}
@ -542,7 +542,7 @@ void gfx_init_plane_horisontal2() {
byte[] row_bitmask = { %00000000, %01010101, %10101010, %11111111 };
for(byte ay : 0..199) {
for (byte ax : 0..39) {
byte row = (ay>>1) & 3;
byte row = (ay/2) & 3;
*gfxa++ = row_bitmask[row];
}
}
@ -582,7 +582,7 @@ void gfx_init_plane_charset8() {
c = col;
}
*gfxa++ = c;
bits = bits<<1;
bits = bits*2;
col++;
}
}
@ -609,7 +609,7 @@ void gfx_init_plane_full() {
// Initialize 320*200 1bpp pixel ($2000) plane with identical bytes
void gfx_init_plane_fill(dword plane_addr, byte fill) {
byte gfxbCpuBank = < >(plane_addr<<2);
byte gfxbCpuBank = < >(plane_addr*4);
dtvSetCpuBankSegment1(gfxbCpuBank++);
byte* gfxb = $4000 + (<plane_addr & $3fff);
for(byte by : 0..199) {

View File

@ -218,7 +218,7 @@ void mode_stdchar() {
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*col++ = (cx+cy)&$f;
*ch++ = (cy&$f)<<4|(cx&$f);
*ch++ = (cy&$f)*$10|(cx&$f);
}
}
// Leave control to the user until exit
@ -272,7 +272,7 @@ void mode_ecmchar() {
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*col++ = (cx+cy)&$f;
*ch++ = (cy&$f)<<4|(cx&$f);
*ch++ = (cy&$f)*$10|(cx&$f);
}
}
// Leave control to the user until exit
@ -327,7 +327,7 @@ void mode_mcchar() {
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*col++ = (cx+cy)&$f;
*ch++ = (cy&$f)<<4|(cx&$f);
*ch++ = (cy&$f)*$10|(cx&$f);
}
}
// Leave control to the user until exit
@ -371,7 +371,7 @@ void mode_stdbitmap() {
for(byte cx: 0..39) {
byte col = (cx+cy)&$f;
byte col2 = ($f-col);
*ch++ = col<<4 | col2;
*ch++ = col*$10 | col2;
}
}
// Draw some lines on the bitmap
@ -426,7 +426,7 @@ void mode_hicolstdchar() {
byte* ch=SCREEN;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
byte v = (cy&$f)<<4|(cx&$f);
byte v = (cy&$f)*$10|(cx&$f);
*col++ = v;
*ch++ = v;
}
@ -482,7 +482,7 @@ void mode_hicolecmchar() {
byte* ch=SCREEN;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
byte v = (cy&$f)<<4|(cx&$f);
byte v = (cy&$f)*$10|(cx&$f);
*col++ = v;
*ch++ = v;
}
@ -537,7 +537,7 @@ void mode_hicolmcchar() {
byte* ch=SCREEN;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
byte v = (cy&$f)<<4|(cx&$f);
byte v = (cy&$f)*$10|(cx&$f);
*col++ = v;
*ch++ = v;
}
@ -594,7 +594,7 @@ void mode_twoplanebitmap() {
byte* col=COLORS;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*col++ = (cy & $f)<<4 | (cx &$f);
*col++ = (cy & $f)*$10 | (cx &$f);
}
}
// Graphics for Plane A - horizontal stripes
@ -670,7 +670,7 @@ void mode_sixsfred() {
byte[] row_bitmask = { %00000000, %01010101, %10101010, %11111111 };
for(byte ay : 0..199) {
for (byte ax : 0..39) {
byte row = (ay>>1) & 3;
byte row = (ay/2) & 3;
*gfxa++ = row_bitmask[row];
}
}
@ -728,7 +728,7 @@ void mode_sixsfred2() {
byte* col=COLORS;
for(byte cy: 0..24 ) {
for(byte cx: 0..39) {
*col++ = (cx&3)<<4|(cy&3);
*col++ = (cx&3)*$10|(cy&3);
}
}
// Graphics for Plane A () - horizontal stripes every 2 pixels
@ -736,7 +736,7 @@ void mode_sixsfred2() {
byte[] row_bitmask = { %00000000, %01010101, %10101010, %11111111 };
for(byte ay : 0..199) {
for (byte ax : 0..39) {
byte row = (ay>>1) & 3;
byte row = (ay/2) & 3;
*gfxa++ = row_bitmask[row];
}
}
@ -796,7 +796,7 @@ void mode_8bpppixelcell() {
byte* gfxa = PLANEA;
for(byte ay : 0..24) {
for (byte ax : 0..39) {
*gfxa++ = (ay & $f)<<4 | (ax & $f);
*gfxa++ = (ay & $f)*$10 | (ax & $f);
}
}
// 8bpp cells for Plane B (charset) - ROM charset with 256 colors
@ -814,7 +814,7 @@ void mode_8bpppixelcell() {
c = col;
}
*gfxb++ = c;
bits = bits<<1;
bits = bits*2;
col++;
}
}

View File

@ -16,7 +16,7 @@ void main() {
}
*sc = c;
sc++;
bits = bits<<1;
bits = bits*2;
}
sc = sc+32;
}

View File

@ -27,7 +27,7 @@ void main() {
byte xpos = 24;
byte ypos = 50;
for(byte s:4..7) {
byte s2 = s<<1;
byte s2 = s*2;
SPRITES_XPOS[s2] = xpos;
SPRITES_YPOS[s2] = ypos;
SPRITES_COLS[s] = s-3;
@ -46,7 +46,7 @@ void loop() {
do {} while (*RASTER!=$ff);
byte idx = sin_idx;
for(byte s:4..7) {
SPRITES_YPOS[s<<1] = SIN[idx];
SPRITES_YPOS[s*2] = SIN[idx];
idx += 10;
}
sin_idx++;

View File

@ -48,7 +48,7 @@ void play_init() {
byte idx = 0;
byte* pli = playfield;
for(byte j:0..PLAYFIELD_LINES-1) {
playfield_lines[j<<1] = pli;
playfield_lines[j*2] = pli;
playfield_lines_idx[j] = idx;
pli += PLAYFIELD_COLS;
idx += PLAYFIELD_COLS;
@ -59,7 +59,7 @@ void play_init() {
current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level];
// Set the initial score add values
for(byte b: 0..4) {
byte b4 = b<<2;
byte b4 = b*4;
score_add_bcd[b4] = SCORE_BASE_BCD[b4];
}
@ -174,7 +174,7 @@ const byte COLLISION_RIGHT = 8;
byte play_collision(byte xpos, byte ypos, byte orientation) {
byte* piece_gfx = current_piece + orientation;
byte i = 0;
byte ypos2 = ypos<<1;
byte ypos2 = ypos*2;
for(byte l:0..3) {
byte* playfield_line = playfield_lines[ypos2];
byte col = xpos;
@ -207,7 +207,7 @@ byte play_collision(byte xpos, byte ypos, byte orientation) {
// Lock the current piece onto the playfield
void play_lock_current() {
byte i = 0;
byte ypos2 = current_ypos<<1;
byte ypos2 = current_ypos*2;
for(byte l:0..3) {
byte* playfield_line = playfield_lines[ypos2];
byte col = current_xpos;
@ -226,7 +226,7 @@ void play_lock_current() {
void play_spawn_current() {
// Move next piece into current
byte current_piece_idx = next_piece_idx;
current_piece = PIECES[current_piece_idx<<1];
current_piece = PIECES[current_piece_idx*2];
current_piece_char = PIECES_CHARS[current_piece_idx];
current_orientation = 0;
current_piece_gfx = current_piece + current_orientation;
@ -285,7 +285,7 @@ byte play_remove_lines() {
void play_update_score(byte removed) {
if(removed!=0){
byte lines_before = <lines_bcd&$f0;
dword add_bcd = score_add_bcd[removed<<2];
dword add_bcd = score_add_bcd[removed*4];
asm { sed }
lines_bcd += removed;
@ -319,7 +319,7 @@ void play_increase_level() {
// Increase the score values gained
asm { sed }
for(byte b: 0..4) {
byte b4 = b<<2;
byte b4 = b*4;
score_add_bcd[b4] += SCORE_BASE_BCD[b4];
}
asm { cld }

View File

@ -63,8 +63,8 @@ void render_init() {
byte* li_1 = PLAYFIELD_SCREEN_1 + 2*40 + 16;
byte* li_2 = PLAYFIELD_SCREEN_2 + 2*40 + 16;
for(byte i:0..PLAYFIELD_LINES-1) {
screen_lines_1[i<<1] = li_1;
screen_lines_2[i<<1] = li_2;
screen_lines_1[i*2] = li_1;
screen_lines_2[i*2] = li_2;
li_1 += 40;
li_2 += 40;
}
@ -161,7 +161,7 @@ void render_playfield() {
// Do not render the top 2 lines.
byte i = PLAYFIELD_COLS*2;
for(byte l:2..PLAYFIELD_LINES-1) {
byte* screen_line = screen_lines_1[render_screen_render+l<<1];
byte* screen_line = screen_lines_1[render_screen_render+l*2];
for(byte c:0..PLAYFIELD_COLS-1) {
*(screen_line++) = playfield[i++];
}
@ -172,7 +172,7 @@ void render_playfield() {
// Ignores cases where parts of the tetromino is outside the playfield (sides/bottom) since the movement collision routine prevents this.
void render_moving() {
byte i = 0;
byte ypos2 = current_ypos<<1;
byte ypos2 = current_ypos*2;
for(byte l:0..3) {
if(ypos2>2) {
byte* screen_line = screen_lines_1[render_screen_render+ypos2];
@ -204,7 +204,7 @@ void render_next() {
}
// Render the next piece
byte* next_piece_gfx = PIECES[next_piece_idx<<1];
byte* next_piece_gfx = PIECES[next_piece_idx*2];
byte next_piece_char = PIECES_NEXT_CHARS[next_piece_idx];
for(byte l:0..3) {
for(byte c:0..3) {

View File

@ -26,7 +26,7 @@ void sprites_init() {
*SPRITES_EXPAND_X = *SPRITES_EXPAND_Y = *SPRITES_MC = 0;
byte xpos = 24+15*8;
for(byte s:0..3) {
byte s2 = s<<1;
byte s2 = s*2;
SPRITES_XPOS[s2] = xpos;
SPRITES_COLS[s] = BLACK;
xpos = xpos+24;

View File

@ -27,7 +27,7 @@ void main() {
while(true) {
// Wait for a frame to pass
while(*RASTER!=$ff) {}
//*BORDERCOL = render_screen_show>>4;
//*BORDERCOL = render_screen_show/$10;
// Update D018 to show the selected screen
render_show();
// Scan keyboard events

View File

@ -4,7 +4,7 @@ signed word[3] world ;
void main() {
for(byte i:0..2) {
world[i<<1]= 400;
world[i*2]= 400;
}
signed word* screen = $400;
*screen = world[0];

View File

@ -75,7 +75,7 @@ void anim() {
pps[i] = *pp;
xps[i] = *xp;
yps[i] = *yp;
byte i2 = i<<1;
byte i2 = i*2;
SPRITES_XPOS[i2] = $80+(byte)((*xp));
SPRITES_YPOS[i2] = $80+(byte)((*yp));
}

View File

@ -69,7 +69,7 @@ void print_str_at(byte* str, byte* at) {
// Render 8x8 char (ch) as pixels on char canvas #pos
void plot_chargen(byte pos, byte ch, byte shift) {
asm { sei }
byte* chargen = CHARGEN+(word)ch<<3;
byte* chargen = CHARGEN+(word)ch*8;
if(shift!=0) {
chargen = chargen + $0800;
}
@ -84,7 +84,7 @@ void plot_chargen(byte pos, byte ch, byte shift) {
}
*sc = c;
sc++;
bits = bits<<1;
bits = bits*2;
}
sc = sc+32;
}

View File

@ -38,7 +38,7 @@ void fire(unsigned char* screenbase) {
unsigned char* screen = screenbase;
unsigned char* buffer = BUFFER;
while (buffer != (BUFFER + (24 * 40))) {
unsigned char c = ( buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41] ) >> 2;
unsigned char c = ( buffer[40-1] + buffer[40-1] + buffer[40] + buffer[41] )/4;
if (c > 2) {
c -= 3;
}
@ -50,7 +50,7 @@ void fire(unsigned char* screenbase) {
screen = (screenbase + (24 * 40));
buffer = (BUFFER + (24 * 40));
while(buffer != (BUFFER+(25*40))) {
*screen++ = *buffer++ = 0x30 + (sid_rnd()) >> 4;
*screen++ = *buffer++ = 0x30 + (sid_rnd())/$10;
}
}

View File

@ -37,7 +37,7 @@ void init() {
word xp = 32;
for(byte sx: 0..PLEX_COUNT-1) {
PLEX_PTR[sx] = (byte)(SPRITE/$40);
PLEX_XPOS[sx<<1] = xp;
PLEX_XPOS[sx*2] = xp;
xp += 9;
}
// Enable & initialize sprites

View File

@ -84,7 +84,7 @@ void makecharset(unsigned char* charset) {
b |= bittab[ii];
}
}
charset[(c<<3) + i] = b;
charset[(c*8) + i] = b;
}
if ((c & 0x07) == 0) {
print_char('.');

View File

@ -85,7 +85,7 @@ void makecharset(unsigned char* charset) {
b |= bittab[ii];
}
}
charset[(c<<3) + i] = b;
charset[(c*8) + i] = b;
}
if ((c & 0x07) == 0) {
print_char('.');

View File

@ -54,18 +54,18 @@ void anim() {
signed byte x = xs[i]; // signed fixed[7.0]
signed byte y = ys[i]; // signed fixed[7.0]
mulf8s_prepare(cos_a);
signed word xr = mulf8s_prepared(x)<<1; // signed fixed[8.8]
signed word yr = mulf8s_prepared(y)<<1; // signed fixed[8.8]
signed word xr = mulf8s_prepared(x)*2; // signed fixed[8.8]
signed word yr = mulf8s_prepared(y)*2; // signed fixed[8.8]
mulf8s_prepare(sin_a);
xr -= mulf8s_prepared(y)<<1; // signed fixed[8.8]
yr += mulf8s_prepared(x)<<1; // signed fixed[8.8]
xr -= mulf8s_prepared(y)*2; // signed fixed[8.8]
yr += mulf8s_prepared(x)*2; // signed fixed[8.8]
signed word xpos = ((signed byte) >xr) + 24 /*border*/ + 149 /*center*/;
sprite_msb = sprite_msb>>1;
sprite_msb = sprite_msb/2;
if(>xpos!=0) {
sprite_msb |= $80;
}
byte ypos = (>yr) + 89 /*center*/+ 51 /*border*/;
byte i2 = i<<1;
byte i2 = i*2;
SPRITES_XPOS[i2] = <xpos;
SPRITES_YPOS[i2] = ypos;
}

View File

@ -34,10 +34,10 @@ void scroll_soft() {
byte* current_chargen = CHARGEN;
byte current_bit = 1;
void scroll_bit() {
current_bit = current_bit>>1;
current_bit = current_bit/2;
if(current_bit==0) {
word c = next_char();
current_chargen = CHARGEN+c<<3;
current_chargen = CHARGEN+c*8;
current_bit = $80;
}
scroll_hard();

View File

@ -53,7 +53,7 @@ void render_logo(signed word xpos) {
byte logo_idx;
byte screen_idx;
*D016 = VIC_MCM|((byte)xpos&7);
signed byte x_char = (signed byte)(xpos>>3);
signed byte x_char = (signed byte)(xpos/8);
byte line = 0;
if(xpos<0) {
// Render right side of the logo and some spaces

View File

@ -43,11 +43,11 @@ void main() {
void render_sine() {
word xpos = 0;
for(word sin_idx=0; sin_idx<SIN_SIZE; sin_idx++) {
signed word sin_val = *(sin+sin_idx<<1);
signed word sin_val = *(sin+sin_idx*2);
byte ypos = wrap_y(sin_val);
bitmap_plot(xpos,ypos);
signed word sin2_val = *(sin2+sin_idx<<1);
signed word sin2_val = *(sin2+sin_idx*2);
byte ypos2 = wrap_y(sin2_val+10);
bitmap_plot(xpos,ypos2);

View File

@ -74,7 +74,7 @@ void anim() {
byte x_msb = 0;
for( byte j : 0..6) {
word x = (word)$1e + sintab_x[xidx];
x_msb = x_msb<<1 | >x;
x_msb = x_msb*2 | >x;
SPRITES_XPOS[j2] = <x;
SPRITES_YPOS[j2] = sintab_y[yidx];
xidx = xidx+10;
@ -133,7 +133,7 @@ void gen_sprites() {
// - c is the character to generate
// - sprite is a pointer to the position of the sprite to generate
void gen_chargen_sprite(byte ch, byte* sprite) {
byte* chargen = CHARGEN+((word)ch)<<3;
byte* chargen = CHARGEN+((word)ch)*8;
asm { sei }
*PROCPORT = $32;
for(byte y:0..7) {
@ -151,7 +151,7 @@ void gen_chargen_sprite(byte ch, byte* sprite) {
}
// generate 3 pixels in the sprite byte (s_gen)
for(byte b : 0..2){
s_gen = s_gen<<1 | c;
s_gen = s_gen*2 | c;
if(++s_gen_cnt==8) {
// sprite byte filled - store and move to next byte
sprite[0] = s_gen;
@ -163,7 +163,7 @@ void gen_chargen_sprite(byte ch, byte* sprite) {
}
}
// move to next char pixel
bits = bits<<1;
bits = bits*2;
}
// move 3 lines down in the sprite (already moved 1 through ++)
sprite = sprite + 6;

View File

@ -6,7 +6,7 @@ void()*[2] fns = { &fn1, &fn2};
void main() {
byte i = 0;
while(true) {
void()* f = fns[(++i&1)<<1];
void()* f = fns[(++i&1)*2];
(*f)();
}
}

View File

@ -15,18 +15,18 @@ void main() {
do {
byte bits_gen = 0;
byte* chargen1 = chargen+1;
byte bits = bits_count[((*chargen & %01100000) | (*chargen1 & %01100000)>>2)>>1>>2];
byte bits = bits_count[((*chargen & %01100000) | (*chargen1 & %01100000)/4)/2/4];
if(bits>=2) { bits_gen = bits_gen + 1; }
bits_gen = bits_gen<<1;
bits = bits_count[((*chargen & %00011000) | (*chargen1 & %00011000)>>2)>>1];
bits_gen = bits_gen*2;
bits = bits_count[((*chargen & %00011000) | (*chargen1 & %00011000)/4)/2];
if(bits>=2) { bits_gen = bits_gen + 1; }
bits_gen = bits_gen<<1;
bits = bits_count[((*chargen & %00000110)<<1 | (*chargen1 & %00000110)>>1)];
bits_gen = bits_gen*2;
bits = bits_count[((*chargen & %00000110)*2 | (*chargen1 & %00000110)/2)];
if(bits>=2) { bits_gen = bits_gen + 1; }
bits_gen = bits_gen<<1;
bits = bits_count[((*chargen & %00000001)<<2 | (*chargen1 & %00000001))];
bits_gen = bits_gen*2;
bits = bits_count[((*chargen & %00000001)*4 | (*chargen1 & %00000001))];
if(bits>=2) { bits_gen = bits_gen + 1; }
bits_gen = bits_gen<<1;
bits_gen = bits_gen*2;
*charset4 = bits_gen;
charset4++;
chargen = chargen+2;

View File

@ -42,7 +42,7 @@ void main() {
screen_fill(SCREEN, $10);
for( byte i=0; i!=8; i+=2) {
point_init(i);
bitmap_plot(x_start[i], y_start[i>>1]);
bitmap_plot(x_start[i], y_start[i/2]);
}
while(true) {
while(*RASTER!=$ff) {}
@ -52,7 +52,7 @@ void main() {
// Initialize the points to be animated
void point_init(byte point_idx) {
byte point_idx1 = point_idx>>1;
byte point_idx1 = point_idx/2;
signed word x_diff = ((signed word)x_end[point_idx])-((signed word)x_start[point_idx]);
signed word y_diff = ((signed word)y_end[point_idx1])-((signed word)y_start[point_idx1]);
@ -66,12 +66,12 @@ void point_init(byte point_idx) {
x_add[point_idx] = $10;
}
signed word x_stepf = divr16s(0, x_diff, y_diff);
y_add[point_idx1] = (signed byte)((>x_stepf)>>4);
y_add[point_idx1] = (signed byte)((>x_stepf)/$10);
} else {
// X is driver - abs(x/y) is < 1
}
x_cur[point_idx] = x_start[point_idx]<<4;
y_cur[point_idx] = ((word)y_start[point_idx1])<<4;
x_cur[point_idx] = x_start[point_idx]*$10;
y_cur[point_idx] = ((word)y_start[point_idx1])*$10;
delay[point_idx1] = DELAY;
}

View File

@ -89,12 +89,12 @@ void plexSort() {
// Show the next sprite.
// plexSort() prepares showing the sprites
void plexShowSprite() {
byte plex_sprite_idx2 = plex_sprite_idx<<1;
byte plex_sprite_idx2 = plex_sprite_idx*2;
byte ypos = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]];
SPRITES_YPOS[plex_sprite_idx2] = ypos;
plexFreeAdd(ypos);
PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]];
byte xpos_idx = PLEX_SORTED_IDX[plex_show_idx]<<1;
byte xpos_idx = PLEX_SORTED_IDX[plex_show_idx]*2;
SPRITES_XPOS[plex_sprite_idx2] = <PLEX_XPOS[xpos_idx];
if(>PLEX_XPOS[xpos_idx]!=0) {
*SPRITES_XMSB |= plex_sprite_msb;

View File

@ -36,7 +36,7 @@ void init() {
word xp = 32;
for(byte sx: 0..PLEX_COUNT-1) {
PLEX_PTR[sx] = (byte)(SPRITE/$40);
PLEX_XPOS[sx<<1] = xp;
PLEX_XPOS[sx*2] = xp;
xp += 9;
}
// Enable & initialize sprites

View File

@ -25,8 +25,8 @@ void gen_char3(byte* dst, word spec) {
if((>spec&$80)!=0) {
b = b|1;
}
b = b<<1;
spec = spec<<1;
b = b*2;
spec = spec*2;
}
dst[r] = b;
}

View File

@ -29,7 +29,7 @@ byte fc(byte n) {
if((n&1)==0) {
return n;
} else {
return fa(n>>1);
return fa(n/2);
}
}

View File

@ -11,8 +11,8 @@ void main() {
}
void position_sprite(byte spriteno, word x, byte y) {
SPRITES_YPOS[spriteno << 1] = y;
SPRITES_XPOS[spriteno << 1] = <x;
SPRITES_YPOS[spriteno * 2] = y;
SPRITES_XPOS[spriteno * 2] = <x;
if (x > 255) {
*SPRITES_XMSB |= 1 << spriteno;
} else {

View File

@ -7,14 +7,14 @@ signed word[] words = {-$6000, -$600, -$60, -6, 0, 6, $60, $600, $6000};
void main() {
for(byte i: 0..8) {
byte idx = i<<1;
byte idx = i*2;
sub(idx, $80);
sub(idx, $40);
sub(idx, $40);
}
print_cls();
for(byte j: 0..8) {
print_sword(words[j<<1]);
print_sword(words[j*2]);
print_ln();
}

View File

@ -35,14 +35,14 @@ signed word sin16sb(word x) {
x = PI_u4f12 - x;
}
// sinx = x - x^3/6 + x5/128;
word x1 = x<<3; // u[1.15]
word x1 = x*8; // u[1.15]
word x2 = mulu16_sel(x1, x1, 0); // u[2.14] x^2
word x3 = mulu16_sel(x2, x1, 1); // u[2.14] x^3
word x3_6 = mulu16_sel(x3, $10000/6, 1); // u[1.15] x^3/6;
word usinx = x1 - x3_6; // u[1.15] x - x^3/6
word x4 = mulu16_sel(x3, x1, 0); // u[3.13] x^4
word x5 = mulu16_sel(x4, x1, 0); // u[4.12] x^5
word x5_128 = x5>>4; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3);
word x5_128 = x5/$10; // // u[1.15] x^5/128 -- much more efficient than mul_u16_sel(x5, $10000/128, 3);
usinx = usinx + x5_128; // u[1.15] (first bit is always zero)
signed word sinx = (signed word)usinx; // s[0.15]
if(isUpper!=0) {

View File

@ -10,7 +10,7 @@ void main() {
print_cls();
for(byte i: 0..191) {
signed byte sb = sintabb[i];
signed word sw = *(sintabw+(word)i<<1);
signed word sw = *(sintabw+(word)i*2);
signed byte sd = sb-(signed byte)>sw;
if(sd>=0) {
print_str(" ");

View File

@ -28,7 +28,7 @@ void main() {
void sin8u_table(byte* sintab, word tabsize, byte min, byte max) {
byte amplitude = max-min;
word sum = (word)min+max;
byte mid = (byte)((sum>>1)+1);
byte mid = (byte)((sum/2)+1);
//if( sum & 1 > 0) mid++;
// u[4.28] step = PI*2/wavelength
word step = div16u(PI2_u4f12, tabsize); // u[4.12]

View File

@ -3,7 +3,7 @@ byte[21] sprY = $1110;
byte i=0;
do {
sprX[i] = i>>2;
sprX[i] = i/4;
i = i+1;
} while (i<12)

View File

@ -10,9 +10,9 @@ void main() {
print_cls();
byte s = 0;
for( byte i: 0..2) {
signed word w1 = swords[i<<1];
signed word w1 = swords[i*2];
for( byte j: 0..2) {
signed word w2 = swords[j<<1];
signed word w2 = swords[j*2];
for( byte op: 0..5 ) {
compare(w1,w2,op);
if(++s==3) {

View File

@ -8,9 +8,9 @@ void main() {
print_cls();
byte s = 0;
for( byte i: 0..2) {
word w1 = words[i<<1];
word w1 = words[i*2];
for( byte j: 0..2) {
word w2 = words[j<<1];
word w2 = words[j*2];
for( byte op: 0..5 ) {
compare(w1,w2,op);
if(++s==3) {

View File

@ -22,7 +22,7 @@ void main() {
} else {
screen[col] = '0';
}
row_pressed_bits = row_pressed_bits << 1;
row_pressed_bits = row_pressed_bits * 2;
}
screen = screen + 40;
}

View File

@ -1,6 +1,6 @@
// used vars
const byte* SCREEN = $0400;
byte b=2>>1;
byte b=2/2;
// unused vars
const byte* BGCOL = $d021;

View File

@ -23,9 +23,9 @@ main::@2: scope:[main] from main::@1 main::@2
(byte*) main::cur_item#2 ← phi( main::@1/(byte*) main::cur_item#4 main::@2/(byte*) main::cur_item#2 )
(byte) main::sub#2 ← phi( main::@1/(byte) main::sub#0 main::@2/(byte) main::sub#1 )
(byte) main::item#2 ← phi( main::@1/(byte) main::item#4 main::@2/(byte) main::item#2 )
(byte~) main::$2 ← (byte) main::item#2 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2
*((byte*) main::cur_item#2 + (byte) main::sub#2) ← (byte~) main::$3
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::item#2 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) main::$3 ← (byte/signed word/word/dword/signed dword~) main::$2 | (byte) main::sub#2
*((byte*) main::cur_item#2 + (byte) main::sub#2) ← (byte/word/dword~) main::$3
(byte) main::sub#1 ← (byte) main::sub#2 + rangenext(0,main::$1)
(bool~) main::$4 ← (byte) main::sub#1 != rangelast(0,main::$1)
if((bool~) main::$4) goto main::@2
@ -63,8 +63,8 @@ SYMBOL TABLE SSA
(void()) main()
(byte/signed word/word/dword/signed dword~) main::$0
(byte/signed word/word/dword/signed dword~) main::$1
(byte~) main::$2
(byte~) main::$3
(byte/signed word/word/dword/signed dword~) main::$2
(byte/word/dword~) main::$3
(bool~) main::$4
(bool~) main::$5
(label) main::@1
@ -117,6 +117,10 @@ Resolved ranged next value main::sub#1 ← ++ main::sub#2 to ++
Resolved ranged comparison value if(main::sub#1!=rangelast(0,main::$1)) goto main::@2 to (const byte/signed word/word/dword/signed dword) main::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value main::item#1 ← ++ main::item#4 to ++
Resolved ranged comparison value if(main::item#1!=rangelast(0,main::$0)) goto main::@1 to (const byte/signed word/word/dword/signed dword) main::$0+(byte/signed byte/word/signed word/dword/signed dword) 1
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::item#4 * (byte/signed byte/word/signed word/dword/signed dword) $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inferred type updated to byte in [2] (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [3] (byte/word/dword~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2
Inlining constant with var siblings (const byte) main::item#0
Inlining constant with var siblings (const byte) main::sub#0
Inlining constant with var siblings (const byte*) main::cur_item#0

View File

@ -135,8 +135,8 @@ init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_
(byte~) init_plot_tables::$1 ← > (byte*) BITMAP#0
*((byte[$100]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$1
*((byte[$100]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3
(byte~) init_plot_tables::$2 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) init_plot_tables::bits#1 ← (byte~) init_plot_tables::$2
(byte/signed word/word/dword/signed dword~) init_plot_tables::$2 ← (byte) init_plot_tables::bits#3 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) init_plot_tables::bits#1 ← (byte/signed word/word/dword/signed dword~) init_plot_tables::$2
(bool~) init_plot_tables::$3 ← (byte) init_plot_tables::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) init_plot_tables::$4 ← ! (bool~) init_plot_tables::$3
if((bool~) init_plot_tables::$4) goto init_plot_tables::@2
@ -267,7 +267,7 @@ SYMBOL TABLE SSA
(word/signed word/dword/signed dword~) init_plot_tables::$13
(byte*~) init_plot_tables::$14
(bool~) init_plot_tables::$15
(byte~) init_plot_tables::$2
(byte/signed word/word/dword/signed dword~) init_plot_tables::$2
(bool~) init_plot_tables::$3
(bool~) init_plot_tables::$4
(bool~) init_plot_tables::$5
@ -402,7 +402,7 @@ Inversing boolean not [102] (bool~) init_plot_tables::$12 ← (byte~) init_plot_
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte) plots::i#2 = (byte) plots::i#3
Alias (byte*) plot::plotter#0 = (byte*~) plot::$4
Alias (byte) init_plot_tables::bits#1 = (byte~) init_plot_tables::$2
Alias (byte) init_plot_tables::bits#1 = (byte/signed word/word/dword/signed dword~) init_plot_tables::$2
Alias (byte) init_plot_tables::x#2 = (byte) init_plot_tables::x#4
Alias (byte*) init_plot_tables::yoffs#2 = (byte*) init_plot_tables::yoffs#3
Alias (byte) init_plot_tables::y#2 = (byte) init_plot_tables::y#4
@ -484,6 +484,8 @@ Resolved ranged next value init_plot_tables::x#1 ← ++ init_plot_tables::x#2 to
Resolved ranged comparison value if(init_plot_tables::x#1!=rangelast(0,$ff)) goto init_plot_tables::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0
Resolved ranged next value init_plot_tables::y#1 ← ++ init_plot_tables::y#2 to ++
Resolved ranged comparison value if(init_plot_tables::y#1!=rangelast(0,$ff)) goto init_plot_tables::@5 to (byte/signed byte/word/signed word/dword/signed dword) 0
Rewriting division to use shift (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 / (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) init_plot_tables::@4

View File

@ -106,7 +106,7 @@ main: {
sta CIA2_PORT_A
// Set VIC Bank
// VIC memory
lda #(SCREEN&$3fff)>>6|(>(SCREEN&$3fff))>>2
lda #(SCREEN&$3fff)/$40|(>(SCREEN&$3fff))/4
sta VIC_MEMORY
ldx #0
// DTV Palette - Grey Tones

View File

@ -32,7 +32,7 @@ main::@6: scope:[main] from main
[23] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[24] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[25] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) SCREEN#0/(word/signed word/dword/signed dword) $4000
[26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
[26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
to:main::@1
main::@1: scope:[main] from main::@1 main::@6
[27] (byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )

View File

@ -236,14 +236,14 @@ main::@17: scope:[main] from main
*((byte*) CIA2_PORT_A#0) ← (byte/word/dword~) main::$15
(word~) main::$16 ← ((word)) (byte*) SCREEN#0
(word~) main::$17 ← (word~) main::$16 & (word/signed word/dword/signed dword) $3fff
(word~) main::$18 ← (word~) main::$17 >> (byte/signed byte/word/signed word/dword/signed dword) 6
(byte~) main::$19 ← ((byte)) (word~) main::$18
(word/signed dword/dword~) main::$18 ← (word~) main::$17 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte~) main::$19 ← ((byte)) (word/signed dword/dword~) main::$18
(word~) main::$20 ← ((word)) (byte*) SCREEN#0
(word~) main::$21 ← (word~) main::$20 & (word/signed word/dword/signed dword) $3fff
(byte~) main::$22 ← > (word~) main::$21
(byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) main::$24 ← (byte~) main::$19 | (byte~) main::$23
*((byte*) VIC_MEMORY#0) ← (byte~) main::$24
(byte/signed word/word/dword/signed dword~) main::$23 ← (byte~) main::$22 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword~) main::$24 ← (byte~) main::$19 | (byte/signed word/word/dword/signed dword~) main::$23
*((byte*) VIC_MEMORY#0) ← (byte/word/dword~) main::$24
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main::@1 main::@17
@ -283,8 +283,8 @@ main::@12: scope:[main] from main::@12 main::@8
(byte~) main::$32 ← (byte) main::rst#1 & (byte/signed byte/word/signed word/dword/signed dword) 7
(byte~) main::$33 ← (byte~) main::$31 | (byte~) main::$32
*((byte*) VIC_CONTROL#0) ← (byte~) main::$33
(byte~) main::$34 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4
*((byte*) BORDERCOL#0) ← (byte~) main::$34
(byte/signed word/word/dword/signed dword~) main::$34 ← (byte) main::rst#1 * (byte/signed byte/word/signed word/dword/signed dword) $10
*((byte*) BORDERCOL#0) ← (byte/signed word/word/dword/signed dword~) main::$34
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
(bool~) main::$35 ← (byte) main::rst#1 != (byte/word/signed word/dword/signed dword) $f2
if((bool~) main::$35) goto main::@12
@ -317,10 +317,10 @@ gfx_init_screen0::@2: scope:[gfx_init_screen0] from gfx_init_screen0::@1 gfx_in
(byte) gfx_init_screen0::cx#2 ← phi( gfx_init_screen0::@1/(byte) gfx_init_screen0::cx#0 gfx_init_screen0::@2/(byte) gfx_init_screen0::cx#1 )
(byte) gfx_init_screen0::cy#2 ← phi( gfx_init_screen0::@1/(byte) gfx_init_screen0::cy#4 gfx_init_screen0::@2/(byte) gfx_init_screen0::cy#2 )
(byte~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) gfx_init_screen0::$2 ← (byte) gfx_init_screen0::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) gfx_init_screen0::$3 ← (byte~) gfx_init_screen0::$1 | (byte~) gfx_init_screen0::$2
*((byte*) gfx_init_screen0::ch#2) ← (byte~) gfx_init_screen0::$3
(byte/word/dword~) gfx_init_screen0::$3 ← (byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 | (byte~) gfx_init_screen0::$2
*((byte*) gfx_init_screen0::ch#2) ← (byte/word/dword~) gfx_init_screen0::$3
(byte*) gfx_init_screen0::ch#1 ← ++ (byte*) gfx_init_screen0::ch#2
(byte) gfx_init_screen0::cx#1 ← (byte) gfx_init_screen0::cx#2 + rangenext(0,$27)
(bool~) gfx_init_screen0::$4 ← (byte) gfx_init_screen0::cx#1 != rangelast(0,$27)
@ -398,8 +398,8 @@ gfx_init_plane_charset8::@4: scope:[gfx_init_plane_charset8] from gfx_init_plan
(byte) gfx_init_plane_charset8::c#2 ← phi( gfx_init_plane_charset8::@3/(byte) gfx_init_plane_charset8::c#0 gfx_init_plane_charset8::@5/(byte) gfx_init_plane_charset8::c#1 )
*((byte*) gfx_init_plane_charset8::gfxa#2) ← (byte) gfx_init_plane_charset8::c#2
(byte*) gfx_init_plane_charset8::gfxa#1 ← ++ (byte*) gfx_init_plane_charset8::gfxa#2
(byte~) gfx_init_plane_charset8::$13 ← (byte) gfx_init_plane_charset8::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) gfx_init_plane_charset8::bits#1 ← (byte~) gfx_init_plane_charset8::$13
(byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$13 ← (byte) gfx_init_plane_charset8::bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) gfx_init_plane_charset8::bits#1 ← (byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$13
(byte) gfx_init_plane_charset8::col#1 ← ++ (byte) gfx_init_plane_charset8::col#2
(byte) gfx_init_plane_charset8::cp#1 ← (byte) gfx_init_plane_charset8::cp#2 + rangenext(0,7)
(bool~) gfx_init_plane_charset8::$14 ← (byte) gfx_init_plane_charset8::cp#1 != rangelast(0,7)
@ -830,7 +830,7 @@ SYMBOL TABLE SSA
(byte~) gfx_init_plane_charset8::$10
(bool~) gfx_init_plane_charset8::$11
(bool~) gfx_init_plane_charset8::$12
(byte~) gfx_init_plane_charset8::$13
(byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$13
(bool~) gfx_init_plane_charset8::$14
(bool~) gfx_init_plane_charset8::$15
(bool~) gfx_init_plane_charset8::$16
@ -921,9 +921,9 @@ SYMBOL TABLE SSA
(byte) gfx_init_plane_charset8::gfxbCpuBank#2
(void()) gfx_init_screen0()
(byte~) gfx_init_screen0::$0
(byte~) gfx_init_screen0::$1
(byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1
(byte~) gfx_init_screen0::$2
(byte~) gfx_init_screen0::$3
(byte/word/dword~) gfx_init_screen0::$3
(bool~) gfx_init_screen0::$4
(bool~) gfx_init_screen0::$5
(label) gfx_init_screen0::@1
@ -956,14 +956,14 @@ SYMBOL TABLE SSA
(byte/word/dword~) main::$15
(word~) main::$16
(word~) main::$17
(word~) main::$18
(word/signed dword/dword~) main::$18
(byte~) main::$19
(byte~) main::$2
(word~) main::$20
(word~) main::$21
(byte~) main::$22
(byte~) main::$23
(byte~) main::$24
(byte/signed word/word/dword/signed dword~) main::$23
(byte/word/dword~) main::$24
(bool~) main::$25
(byte~) main::$26
(byte~) main::$27
@ -974,7 +974,7 @@ SYMBOL TABLE SSA
(byte~) main::$31
(byte~) main::$32
(byte~) main::$33
(byte~) main::$34
(byte/signed word/word/dword/signed dword~) main::$34
(bool~) main::$35
(byte~) main::$4
(byte~) main::$5
@ -1012,7 +1012,7 @@ Alias (byte) gfx_init_screen0::cy#2 = (byte) gfx_init_screen0::cy#3
Alias (byte*) gfx_init_screen0::ch#1 = (byte*) gfx_init_screen0::ch#4
Alias (byte) gfx_init_plane_charset8::gfxbCpuBank#0 = (byte~) gfx_init_plane_charset8::$1 (byte) gfx_init_plane_charset8::gfxbCpuBank#2
Alias (byte*) gfx_init_plane_charset8::chargen#0 = (byte*~) gfx_init_plane_charset8::$6
Alias (byte) gfx_init_plane_charset8::bits#1 = (byte~) gfx_init_plane_charset8::$13
Alias (byte) gfx_init_plane_charset8::bits#1 = (byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$13
Alias (byte) gfx_init_plane_charset8::col#3 = (byte) gfx_init_plane_charset8::col#4 (byte) gfx_init_plane_charset8::c#1
Alias (byte*) gfx_init_plane_charset8::gfxa#3 = (byte*) gfx_init_plane_charset8::gfxa#4
Alias (byte) gfx_init_plane_charset8::bits#2 = (byte) gfx_init_plane_charset8::bits#4
@ -1276,7 +1276,7 @@ Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$3 = main::$2|DTV_BADLINE_OFF#0
Constant (const byte/word/dword) main::$6 = main::$5|3
Constant (const byte) main::$14 = ((byte))main::$13
Constant (const word) main::$18 = main::$17>>6
Constant (const word/signed dword/dword) main::$18 = main::$17/$40
Constant (const byte) main::$22 = >main::$21
Constant (const byte/word/dword) main::$28 = main::$27|3
Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_plane_charset8::gfxbCpuBank#0
@ -1285,10 +1285,10 @@ Constant (const word/signed dword/dword) gfx_init_plane_charset8::$5 = $4000+gfx
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte/word/dword) main::$15 = 3^main::$14
Constant (const byte) main::$19 = ((byte))main::$18
Constant (const byte) main::$23 = main::$22>>2
Constant (const byte/signed word/word/dword/signed dword) main::$23 = main::$22/4
Constant (const byte*) gfx_init_plane_charset8::gfxa#0 = ((byte*))gfx_init_plane_charset8::$5
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$24 = main::$19|main::$23
Constant (const byte/word/dword) main::$24 = main::$19|main::$23
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [31] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
@ -1307,6 +1307,10 @@ Resolved ranged next value gfx_init_plane_charset8::cr#1 ← ++ gfx_init_plane_c
Resolved ranged comparison value if(gfx_init_plane_charset8::cr#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value gfx_init_plane_charset8::ch#1 ← ++ gfx_init_plane_charset8::ch#7 to ++
Resolved ranged comparison value if(gfx_init_plane_charset8::ch#1!=rangelast(0,$ff)) goto gfx_init_plane_charset8::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$34 ← (byte) main::rst#1 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte) gfx_init_plane_charset8::bits#1 ← (byte) gfx_init_plane_charset8::bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@3
@ -1316,6 +1320,9 @@ Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#7
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [40] (byte/signed word/word/dword/signed dword~) main::$34 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [50] (byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [52] (byte/word/dword~) gfx_init_screen0::$3 ← (byte~) gfx_init_screen0::$1 | (byte~) gfx_init_screen0::$2
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#1
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0
Inlining constant with var siblings (const byte) main::j#0
@ -1348,14 +1355,14 @@ Constant inlined main::$11 = >(const byte*) CHARSET8#0
Constant inlined gfx_init_plane_charset8::chargen#0 = (const byte*) CHARGEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::$16 = ((word))(const byte*) SCREEN#0
Constant inlined main::$17 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff
Constant inlined main::$18 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6
Constant inlined main::$19 = ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6
Constant inlined main::$18 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined main::$19 = ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined gfx_init_plane_charset8::ch#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined gfx_init_screen0::cx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined gfx_init_screen0::cy#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::$23 = >((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::$24 = ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::$23 = >((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined main::$24 = ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined main::$26 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0
Constant inlined main::$20 = ((word))(const byte*) SCREEN#0
Constant inlined main::$21 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff
@ -1480,7 +1487,7 @@ main::@6: scope:[main] from main
[23] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[24] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[25] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) SCREEN#0/(word/signed word/dword/signed dword) $4000
[26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
[26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
to:main::@1
main::@1: scope:[main] from main::@1 main::@6
[27] (byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
@ -2082,10 +2089,10 @@ main: {
// Set VIC Bank bits to output - all others to input
lda #3^SCREEN/$4000
sta CIA2_PORT_A
//SEG34 [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
//SEG34 [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 -- _deref_pbuc1=vbuc2
// Set VIC Bank
// VIC memory
lda #(SCREEN&$3fff)>>6|(>(SCREEN&$3fff))>>2
lda #(SCREEN&$3fff)/$40|(>(SCREEN&$3fff))/4
sta VIC_MEMORY
//SEG35 [27] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
b1_from_b6:
@ -2573,7 +2580,7 @@ Statement [22] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte/signed byte/wor
Statement [23] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [24] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [25] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) SCREEN#0/(word/signed word/dword/signed dword) $4000 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x
Statement [32] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [33] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -2622,7 +2629,7 @@ Statement [22] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte/signed byte/wor
Statement [23] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [24] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [25] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) SCREEN#0/(word/signed word/dword/signed dword) $4000 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x
Statement [32] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [33] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -2859,10 +2866,10 @@ main: {
// Set VIC Bank bits to output - all others to input
lda #3^SCREEN/$4000
sta CIA2_PORT_A
//SEG34 [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
//SEG34 [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 -- _deref_pbuc1=vbuc2
// Set VIC Bank
// VIC memory
lda #(SCREEN&$3fff)>>6|(>(SCREEN&$3fff))>>2
lda #(SCREEN&$3fff)/$40|(>(SCREEN&$3fff))/4
sta VIC_MEMORY
//SEG35 [27] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
b1_from_b6:
@ -3856,10 +3863,10 @@ main: {
// Set VIC Bank bits to output - all others to input
lda #3^SCREEN/$4000
sta CIA2_PORT_A
//SEG34 [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
//SEG34 [26] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 -- _deref_pbuc1=vbuc2
// Set VIC Bank
// VIC memory
lda #(SCREEN&$3fff)>>6|(>(SCREEN&$3fff))>>2
lda #(SCREEN&$3fff)/$40|(>(SCREEN&$3fff))/4
sta VIC_MEMORY
//SEG35 [27] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
//SEG36 [27] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1

View File

@ -84,7 +84,7 @@ main: {
sta CIA2_PORT_A
// Set VIC Bank
// VIC memory
lda #(CHUNKY&$3fff)>>6|(0)>>2
lda #(CHUNKY&$3fff)/$40|(0)/4
sta VIC_MEMORY
ldx #0
// DTV Palette - Grey Tones

View File

@ -26,7 +26,7 @@ main::@6: scope:[main] from main
[17] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[18] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[19] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) CHUNKY#0/(word/signed word/dword/signed dword) $4000
[20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
[20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
to:main::@1
main::@1: scope:[main] from main::@1 main::@6
[21] (byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )

View File

@ -228,14 +228,14 @@ main::@17: scope:[main] from main
*((byte*) CIA2_PORT_A#0) ← (byte/word/dword~) main::$14
(word~) main::$15 ← ((word)) (byte*) CHUNKY#0
(word~) main::$16 ← (word~) main::$15 & (word/signed word/dword/signed dword) $3fff
(word~) main::$17 ← (word~) main::$16 >> (byte/signed byte/word/signed word/dword/signed dword) 6
(byte~) main::$18 ← ((byte)) (word~) main::$17
(word/signed dword/dword~) main::$17 ← (word~) main::$16 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte~) main::$18 ← ((byte)) (word/signed dword/dword~) main::$17
(word~) main::$19 ← ((word)) (byte*) CHUNKY#0
(word~) main::$20 ← (word~) main::$19 & (word/signed word/dword/signed dword) $3fff
(byte~) main::$21 ← > (word~) main::$20
(byte~) main::$22 ← (byte~) main::$21 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) main::$23 ← (byte~) main::$18 | (byte~) main::$22
*((byte*) VIC_MEMORY#0) ← (byte~) main::$23
(byte/signed word/word/dword/signed dword~) main::$22 ← (byte~) main::$21 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword~) main::$23 ← (byte~) main::$18 | (byte/signed word/word/dword/signed dword~) main::$22
*((byte*) VIC_MEMORY#0) ← (byte/word/dword~) main::$23
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main::@1 main::@17
@ -275,8 +275,8 @@ main::@12: scope:[main] from main::@12 main::@8
(byte~) main::$31 ← (byte) main::rst#1 & (byte/signed byte/word/signed word/dword/signed dword) 7
(byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31
*((byte*) VIC_CONTROL#0) ← (byte~) main::$32
(byte~) main::$33 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4
*((byte*) BORDERCOL#0) ← (byte~) main::$33
(byte/signed word/word/dword/signed dword~) main::$33 ← (byte) main::rst#1 * (byte/signed byte/word/signed word/dword/signed dword) $10
*((byte*) BORDERCOL#0) ← (byte/signed word/word/dword/signed dword~) main::$33
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
(bool~) main::$34 ← (byte) main::rst#1 != (byte/word/signed word/dword/signed dword) $f2
if((bool~) main::$34) goto main::@12
@ -799,14 +799,14 @@ SYMBOL TABLE SSA
(byte/word/dword~) main::$14
(word~) main::$15
(word~) main::$16
(word~) main::$17
(word/signed dword/dword~) main::$17
(byte~) main::$18
(word~) main::$19
(byte~) main::$2
(word~) main::$20
(byte~) main::$21
(byte~) main::$22
(byte~) main::$23
(byte/signed word/word/dword/signed dword~) main::$22
(byte/word/dword~) main::$23
(bool~) main::$24
(byte~) main::$25
(byte~) main::$26
@ -817,7 +817,7 @@ SYMBOL TABLE SSA
(byte~) main::$30
(byte~) main::$31
(byte~) main::$32
(byte~) main::$33
(byte/signed word/word/dword/signed dword~) main::$33
(bool~) main::$34
(byte~) main::$4
(byte~) main::$5
@ -1085,7 +1085,7 @@ Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$3 = main::$2|DTV_CHUNKY#0
Constant (const byte/word/dword) main::$7 = main::$6|3
Constant (const byte) main::$13 = ((byte))main::$12
Constant (const word) main::$17 = main::$16>>6
Constant (const word/signed dword/dword) main::$17 = main::$16/$40
Constant (const byte) main::$21 = >main::$20
Constant (const byte/word/dword) main::$27 = main::$26|3
Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_chunky::gfxbCpuBank#0
@ -1094,9 +1094,9 @@ Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$4 = main::$3|DTV_BADLINE_OFF#0
Constant (const byte/word/dword) main::$14 = 3^main::$13
Constant (const byte) main::$18 = ((byte))main::$17
Constant (const byte) main::$22 = main::$21>>2
Constant (const byte/signed word/word/dword/signed dword) main::$22 = main::$21/4
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$23 = main::$18|main::$22
Constant (const byte/word/dword) main::$23 = main::$18|main::$22
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [25] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
@ -1109,12 +1109,15 @@ Resolved ranged next value gfx_init_chunky::x#1 ← ++ gfx_init_chunky::x#2 to +
Resolved ranged comparison value if(gfx_init_chunky::x#1!=rangelast(0,$13f)) goto gfx_init_chunky::@2 to (word/signed word/dword/signed dword) $140
Resolved ranged next value gfx_init_chunky::y#1 ← ++ gfx_init_chunky::y#6 to ++
Resolved ranged comparison value if(gfx_init_chunky::y#1!=rangelast(0,$32)) goto gfx_init_chunky::@1 to (byte/signed byte/word/signed word/dword/signed dword) $33
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$33 ← (byte) main::rst#1 * (byte/signed byte/word/signed word/dword/signed dword) $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@7
Culled Empty Block (label) gfx_init_chunky::@7
Successful SSA optimization Pass2CullEmptyBlocks
Inferred type updated to byte in [34] (byte/signed word/word/dword/signed dword~) main::$33 ← (byte) main::rst#1 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0
Inlining constant with var siblings (const byte) main::j#0
@ -1138,11 +1141,11 @@ Constant inlined main::$30 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(cons
Constant inlined main::$10 = >(const byte*) CHUNKY#0
Constant inlined main::$11 = ((word))(const byte*) CHUNKY#0
Constant inlined main::$16 = ((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff
Constant inlined main::$17 = ((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6
Constant inlined main::$18 = ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6
Constant inlined main::$17 = ((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined main::$18 = ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined main::$19 = ((word))(const byte*) CHUNKY#0
Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::$23 = ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::$23 = ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined gfx_init_chunky::gfxbCpuBank#1 = ++((byte))(const byte*) CHUNKY#0/(word/signed word/dword/signed dword) $4000
Constant inlined main::$25 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0
Constant inlined main::$26 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0
@ -1150,7 +1153,7 @@ Constant inlined gfx_init_chunky::gfxb#2 = ((byte*))(word/signed word/dword/sign
Constant inlined main::$20 = ((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff
Constant inlined gfx_init_chunky::gfxb#0 = ((byte*))(word/signed word/dword/signed dword) $4000
Constant inlined main::$21 = >((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff
Constant inlined main::$22 = >((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::$22 = >((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined gfx_init_chunky::gfxbCpuBank#0 = ((byte))(const byte*) CHUNKY#0/(word/signed word/dword/signed dword) $4000
Constant inlined main::$1 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0
Constant inlined main::$27 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3
@ -1241,7 +1244,7 @@ main::@6: scope:[main] from main
[17] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[18] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[19] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) CHUNKY#0/(word/signed word/dword/signed dword) $4000
[20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2
[20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4
to:main::@1
main::@1: scope:[main] from main::@1 main::@6
[21] (byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
@ -1703,10 +1706,10 @@ main: {
// Set VIC Bank bits to output - all others to input
lda #3^CHUNKY/$4000
sta CIA2_PORT_A
//SEG28 [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
//SEG28 [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 -- _deref_pbuc1=vbuc2
// Set VIC Bank
// VIC memory
lda #(CHUNKY&$3fff)>>6|(0)>>2
lda #(CHUNKY&$3fff)/$40|(0)/4
sta VIC_MEMORY
//SEG29 [21] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
b1_from_b6:
@ -2048,7 +2051,7 @@ Statement [16] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte/signed byte/wor
Statement [17] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [18] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [19] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) CHUNKY#0/(word/signed word/dword/signed dword) $4000 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x
Statement [26] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [27] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -2080,7 +2083,7 @@ Statement [16] *((const byte*) DTV_PLANEB_MODULO_LO#0) ← (byte/signed byte/wor
Statement [17] *((const byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [18] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [19] *((const byte*) CIA2_PORT_A#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3^((byte))((word))(const byte*) CHUNKY#0/(word/signed word/dword/signed dword) $4000 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x
Statement [26] *((const byte*) VIC_CONTROL#0) ← (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [27] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -2252,10 +2255,10 @@ main: {
// Set VIC Bank bits to output - all others to input
lda #3^CHUNKY/$4000
sta CIA2_PORT_A
//SEG28 [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
//SEG28 [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 -- _deref_pbuc1=vbuc2
// Set VIC Bank
// VIC memory
lda #(CHUNKY&$3fff)>>6|(0)>>2
lda #(CHUNKY&$3fff)/$40|(0)/4
sta VIC_MEMORY
//SEG29 [21] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
b1_from_b6:
@ -3018,10 +3021,10 @@ main: {
// Set VIC Bank bits to output - all others to input
lda #3^CHUNKY/$4000
sta CIA2_PORT_A
//SEG28 [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 6|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff>>(byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2
//SEG28 [20] *((const byte*) VIC_MEMORY#0) ← ((byte))((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) $40|>((word))(const byte*) CHUNKY#0&(word/signed word/dword/signed dword) $3fff/(byte/signed byte/word/signed word/dword/signed dword) 4 -- _deref_pbuc1=vbuc2
// Set VIC Bank
// VIC memory
lda #(CHUNKY&$3fff)>>6|(0)>>2
lda #(CHUNKY&$3fff)/$40|(0)/4
sta VIC_MEMORY
//SEG29 [21] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
//SEG30 [21] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1

View File

@ -2092,9 +2092,9 @@ gfx_mode::@9: scope:[gfx_mode] from gfx_mode::@20 gfx_mode::@8
(byte) keyboard_events_size#141 ← phi( gfx_mode::@20/(byte) keyboard_events_size#143 gfx_mode::@8/(byte) keyboard_events_size#144 )
(byte) gfx_mode::vic_control2#2 ← phi( gfx_mode::@20/(byte) gfx_mode::vic_control2#1 gfx_mode::@8/(byte) gfx_mode::vic_control2#0 )
*((byte*) VIC_CONTROL2#0) ← (byte) gfx_mode::vic_control2#2
(byte~) gfx_mode::$20 ← *((byte*) form_a_start_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$21 ← (byte~) gfx_mode::$20 | *((byte*) form_a_start_lo#0)
(byte) gfx_mode::plane_a_offs#0 ← (byte~) gfx_mode::$21
(byte/signed word/word/dword/signed dword~) gfx_mode::$20 ← *((byte*) form_a_start_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$21 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$20 | *((byte*) form_a_start_lo#0)
(byte) gfx_mode::plane_a_offs#0 ← (byte/word/dword~) gfx_mode::$21
(byte) get_plane::idx#0 ← *((byte*) form_a_pattern#0)
call get_plane
(dword) get_plane::return#16 ← (dword) get_plane::return#14
@ -2116,16 +2116,16 @@ gfx_mode::@46: scope:[gfx_mode] from gfx_mode::@9
(word~) gfx_mode::$28 ← > (dword) gfx_mode::plane_a#0
(byte~) gfx_mode::$29 ← < (word~) gfx_mode::$28
*((byte*) DTV_PLANEA_START_HI#0) ← (byte~) gfx_mode::$29
(byte~) gfx_mode::$30 ← *((byte*) form_a_step_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$31 ← (byte~) gfx_mode::$30 | *((byte*) form_a_step_lo#0)
*((byte*) DTV_PLANEA_STEP#0) ← (byte~) gfx_mode::$31
(byte~) gfx_mode::$32 ← *((byte*) form_a_mod_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$33 ← (byte~) gfx_mode::$32 | *((byte*) form_a_mod_lo#0)
*((byte*) DTV_PLANEA_MODULO_LO#0) ← (byte~) gfx_mode::$33
(byte/signed word/word/dword/signed dword~) gfx_mode::$30 ← *((byte*) form_a_step_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$31 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$30 | *((byte*) form_a_step_lo#0)
*((byte*) DTV_PLANEA_STEP#0) ← (byte/word/dword~) gfx_mode::$31
(byte/signed word/word/dword/signed dword~) gfx_mode::$32 ← *((byte*) form_a_mod_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$33 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$32 | *((byte*) form_a_mod_lo#0)
*((byte*) DTV_PLANEA_MODULO_LO#0) ← (byte/word/dword~) gfx_mode::$33
*((byte*) DTV_PLANEA_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte~) gfx_mode::$34 ← *((byte*) form_b_start_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$35 ← (byte~) gfx_mode::$34 | *((byte*) form_b_start_lo#0)
(byte) gfx_mode::plane_b_offs#0 ← (byte~) gfx_mode::$35
(byte/signed word/word/dword/signed dword~) gfx_mode::$34 ← *((byte*) form_b_start_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$35 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$34 | *((byte*) form_b_start_lo#0)
(byte) gfx_mode::plane_b_offs#0 ← (byte/word/dword~) gfx_mode::$35
(byte) get_plane::idx#1 ← *((byte*) form_b_pattern#0)
call get_plane
(dword) get_plane::return#17 ← (dword) get_plane::return#14
@ -2147,12 +2147,12 @@ gfx_mode::@47: scope:[gfx_mode] from gfx_mode::@46
(word~) gfx_mode::$42 ← > (dword) gfx_mode::plane_b#0
(byte~) gfx_mode::$43 ← < (word~) gfx_mode::$42
*((byte*) DTV_PLANEB_START_HI#0) ← (byte~) gfx_mode::$43
(byte~) gfx_mode::$44 ← *((byte*) form_b_step_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$45 ← (byte~) gfx_mode::$44 | *((byte*) form_b_step_lo#0)
*((byte*) DTV_PLANEB_STEP#0) ← (byte~) gfx_mode::$45
(byte~) gfx_mode::$46 ← *((byte*) form_b_mod_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$47 ← (byte~) gfx_mode::$46 | *((byte*) form_b_mod_lo#0)
*((byte*) DTV_PLANEB_MODULO_LO#0) ← (byte~) gfx_mode::$47
(byte/signed word/word/dword/signed dword~) gfx_mode::$44 ← *((byte*) form_b_step_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$45 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$44 | *((byte*) form_b_step_lo#0)
*((byte*) DTV_PLANEB_STEP#0) ← (byte/word/dword~) gfx_mode::$45
(byte/signed word/word/dword/signed dword~) gfx_mode::$46 ← *((byte*) form_b_mod_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$47 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$46 | *((byte*) form_b_mod_lo#0)
*((byte*) DTV_PLANEB_MODULO_LO#0) ← (byte/word/dword~) gfx_mode::$47
*((byte*) DTV_PLANEB_MODULO_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
*((byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
(word~) gfx_mode::$48 ← ((word)) (byte*) VIC_SCREEN0#0
@ -2171,8 +2171,8 @@ gfx_mode::@48: scope:[gfx_mode] from gfx_mode::@47
(byte*~) gfx_mode::$52 ← (byte*) get_vic_screen::return#10
(word~) gfx_mode::$53 ← ((word)) (byte*~) gfx_mode::$52
(word~) gfx_mode::$54 ← (word~) gfx_mode::$53 & (word/signed word/dword/signed dword) $3fff
(word~) gfx_mode::$55 ← (word~) gfx_mode::$54 >> (byte/signed byte/word/signed word/dword/signed dword) 6
(byte~) gfx_mode::$56 ← ((byte)) (word~) gfx_mode::$55
(word/signed dword/dword~) gfx_mode::$55 ← (word~) gfx_mode::$54 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte~) gfx_mode::$56 ← ((byte)) (word/signed dword/dword~) gfx_mode::$55
(byte) get_vic_charset::idx#0 ← *((byte*) form_vic_gfx#0)
call get_vic_charset
(byte*) get_vic_charset::return#4 ← (byte*) get_vic_charset::return#2
@ -2185,9 +2185,9 @@ gfx_mode::@49: scope:[gfx_mode] from gfx_mode::@48
(word~) gfx_mode::$58 ← ((word)) (byte*~) gfx_mode::$57
(word~) gfx_mode::$59 ← (word~) gfx_mode::$58 & (word/signed word/dword/signed dword) $3fff
(byte~) gfx_mode::$60 ← > (word~) gfx_mode::$59
(byte~) gfx_mode::$61 ← (byte~) gfx_mode::$60 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) gfx_mode::$62 ← (byte~) gfx_mode::$56 | (byte~) gfx_mode::$61
*((byte*) VIC_MEMORY#0) ← (byte~) gfx_mode::$62
(byte/signed word/word/dword/signed dword~) gfx_mode::$61 ← (byte~) gfx_mode::$60 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword~) gfx_mode::$62 ← (byte~) gfx_mode::$56 | (byte/signed word/word/dword/signed dword~) gfx_mode::$61
*((byte*) VIC_MEMORY#0) ← (byte/word/dword~) gfx_mode::$62
(byte) get_vic_screen::idx#1 ← *((byte*) form_vic_cols#0)
call get_vic_screen
(byte*) get_vic_screen::return#8 ← (byte*) get_vic_screen::return#5
@ -2244,18 +2244,18 @@ gfx_mode::@24: scope:[gfx_mode] from gfx_mode::@23
(byte) keyboard_modifiers#96 ← phi( gfx_mode::@23/(byte) keyboard_modifiers#102 )
(byte) keyboard_events_size#103 ← phi( gfx_mode::@23/(byte) keyboard_events_size#114 )
*((byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte~) gfx_mode::$64 ← *((byte*) form_vic_bg0_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$65 ← (byte~) gfx_mode::$64 | *((byte*) form_vic_bg0_lo#0)
*((byte*) BGCOL1#0) ← (byte~) gfx_mode::$65
(byte~) gfx_mode::$66 ← *((byte*) form_vic_bg1_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$67 ← (byte~) gfx_mode::$66 | *((byte*) form_vic_bg1_lo#0)
*((byte*) BGCOL2#0) ← (byte~) gfx_mode::$67
(byte~) gfx_mode::$68 ← *((byte*) form_vic_bg2_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$69 ← (byte~) gfx_mode::$68 | *((byte*) form_vic_bg2_lo#0)
*((byte*) BGCOL3#0) ← (byte~) gfx_mode::$69
(byte~) gfx_mode::$70 ← *((byte*) form_vic_bg3_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_mode::$71 ← (byte~) gfx_mode::$70 | *((byte*) form_vic_bg3_lo#0)
*((byte*) BGCOL4#0) ← (byte~) gfx_mode::$71
(byte/signed word/word/dword/signed dword~) gfx_mode::$64 ← *((byte*) form_vic_bg0_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$65 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$64 | *((byte*) form_vic_bg0_lo#0)
*((byte*) BGCOL1#0) ← (byte/word/dword~) gfx_mode::$65
(byte/signed word/word/dword/signed dword~) gfx_mode::$66 ← *((byte*) form_vic_bg1_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$67 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$66 | *((byte*) form_vic_bg1_lo#0)
*((byte*) BGCOL2#0) ← (byte/word/dword~) gfx_mode::$67
(byte/signed word/word/dword/signed dword~) gfx_mode::$68 ← *((byte*) form_vic_bg2_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$69 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$68 | *((byte*) form_vic_bg2_lo#0)
*((byte*) BGCOL3#0) ← (byte/word/dword~) gfx_mode::$69
(byte/signed word/word/dword/signed dword~) gfx_mode::$70 ← *((byte*) form_vic_bg3_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_mode::$71 ← (byte/signed word/word/dword/signed dword~) gfx_mode::$70 | *((byte*) form_vic_bg3_lo#0)
*((byte*) BGCOL4#0) ← (byte/word/dword~) gfx_mode::$71
(bool~) gfx_mode::$72 ← *((byte*) form_dtv_palet#0) == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) gfx_mode::$72) goto gfx_mode::@10
to:gfx_mode::@25
@ -2443,10 +2443,10 @@ gfx_init_screen0::@2: scope:[gfx_init_screen0] from gfx_init_screen0::@1 gfx_in
(byte) gfx_init_screen0::cx#2 ← phi( gfx_init_screen0::@1/(byte) gfx_init_screen0::cx#0 gfx_init_screen0::@2/(byte) gfx_init_screen0::cx#1 )
(byte) gfx_init_screen0::cy#2 ← phi( gfx_init_screen0::@1/(byte) gfx_init_screen0::cy#4 gfx_init_screen0::@2/(byte) gfx_init_screen0::cy#2 )
(byte~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) gfx_init_screen0::$2 ← (byte) gfx_init_screen0::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) gfx_init_screen0::$3 ← (byte~) gfx_init_screen0::$1 | (byte~) gfx_init_screen0::$2
*((byte*) gfx_init_screen0::ch#2) ← (byte~) gfx_init_screen0::$3
(byte/word/dword~) gfx_init_screen0::$3 ← (byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 | (byte~) gfx_init_screen0::$2
*((byte*) gfx_init_screen0::ch#2) ← (byte/word/dword~) gfx_init_screen0::$3
(byte*) gfx_init_screen0::ch#1 ← ++ (byte*) gfx_init_screen0::ch#2
(byte) gfx_init_screen0::cx#1 ← (byte) gfx_init_screen0::cx#2 + rangenext(0,$27)
(bool~) gfx_init_screen0::$4 ← (byte) gfx_init_screen0::cx#1 != rangelast(0,$27)
@ -2511,9 +2511,9 @@ gfx_init_screen2::@2: scope:[gfx_init_screen2] from gfx_init_screen2::@1 gfx_in
(byte) gfx_init_screen2::col#0 ← (byte~) gfx_init_screen2::$1
(byte/signed word/word/dword/signed dword~) gfx_init_screen2::$2 ← (byte/signed byte/word/signed word/dword/signed dword) $f - (byte) gfx_init_screen2::col#0
(byte) gfx_init_screen2::col2#0 ← (byte/signed word/word/dword/signed dword~) gfx_init_screen2::$2
(byte~) gfx_init_screen2::$3 ← (byte) gfx_init_screen2::col#0 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) gfx_init_screen2::$4 ← (byte~) gfx_init_screen2::$3 | (byte) gfx_init_screen2::col2#0
*((byte*) gfx_init_screen2::ch#2) ← (byte~) gfx_init_screen2::$4
(byte/signed word/word/dword/signed dword~) gfx_init_screen2::$3 ← (byte) gfx_init_screen2::col#0 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) gfx_init_screen2::$4 ← (byte/signed word/word/dword/signed dword~) gfx_init_screen2::$3 | (byte) gfx_init_screen2::col2#0
*((byte*) gfx_init_screen2::ch#2) ← (byte/word/dword~) gfx_init_screen2::$4
(byte*) gfx_init_screen2::ch#1 ← ++ (byte*) gfx_init_screen2::ch#2
(byte) gfx_init_screen2::cx#1 ← (byte) gfx_init_screen2::cx#2 + rangenext(0,$27)
(bool~) gfx_init_screen2::$5 ← (byte) gfx_init_screen2::cx#1 != rangelast(0,$27)
@ -2543,10 +2543,10 @@ gfx_init_screen3::@2: scope:[gfx_init_screen3] from gfx_init_screen3::@1 gfx_in
(byte) gfx_init_screen3::cy#2 ← phi( gfx_init_screen3::@1/(byte) gfx_init_screen3::cy#4 gfx_init_screen3::@2/(byte) gfx_init_screen3::cy#2 )
(byte) gfx_init_screen3::cx#2 ← phi( gfx_init_screen3::@1/(byte) gfx_init_screen3::cx#0 gfx_init_screen3::@2/(byte) gfx_init_screen3::cx#1 )
(byte~) gfx_init_screen3::$0 ← (byte) gfx_init_screen3::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte~) gfx_init_screen3::$1 ← (byte~) gfx_init_screen3::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) gfx_init_screen3::$1 ← (byte~) gfx_init_screen3::$0 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) gfx_init_screen3::$2 ← (byte) gfx_init_screen3::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte~) gfx_init_screen3::$3 ← (byte~) gfx_init_screen3::$1 | (byte~) gfx_init_screen3::$2
*((byte*) gfx_init_screen3::ch#2) ← (byte~) gfx_init_screen3::$3
(byte/word/dword~) gfx_init_screen3::$3 ← (byte/signed word/word/dword/signed dword~) gfx_init_screen3::$1 | (byte~) gfx_init_screen3::$2
*((byte*) gfx_init_screen3::ch#2) ← (byte/word/dword~) gfx_init_screen3::$3
(byte*) gfx_init_screen3::ch#1 ← ++ (byte*) gfx_init_screen3::ch#2
(byte) gfx_init_screen3::cx#1 ← (byte) gfx_init_screen3::cx#2 + rangenext(0,$27)
(bool~) gfx_init_screen3::$4 ← (byte) gfx_init_screen3::cx#1 != rangelast(0,$27)
@ -2791,9 +2791,9 @@ gfx_init_plane_horisontal2::@2: scope:[gfx_init_plane_horisontal2] from gfx_ini
(byte) gfx_init_plane_horisontal2::ax#2 ← phi( gfx_init_plane_horisontal2::@1/(byte) gfx_init_plane_horisontal2::ax#0 gfx_init_plane_horisontal2::@2/(byte) gfx_init_plane_horisontal2::ax#1 )
(byte*) gfx_init_plane_horisontal2::gfxa#2 ← phi( gfx_init_plane_horisontal2::@1/(byte*) gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::@2/(byte*) gfx_init_plane_horisontal2::gfxa#1 )
(byte) gfx_init_plane_horisontal2::ay#2 ← phi( gfx_init_plane_horisontal2::@1/(byte) gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::@2/(byte) gfx_init_plane_horisontal2::ay#2 )
(byte~) gfx_init_plane_horisontal2::$8 ← (byte) gfx_init_plane_horisontal2::ay#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) gfx_init_plane_horisontal2::$9 ← (byte~) gfx_init_plane_horisontal2::$8 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) gfx_init_plane_horisontal2::row#0 ← (byte~) gfx_init_plane_horisontal2::$9
(byte/signed word/word/dword/signed dword~) gfx_init_plane_horisontal2::$8 ← (byte) gfx_init_plane_horisontal2::ay#2 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/word/dword~) gfx_init_plane_horisontal2::$9 ← (byte/signed word/word/dword/signed dword~) gfx_init_plane_horisontal2::$8 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) gfx_init_plane_horisontal2::row#0 ← (byte/word/dword~) gfx_init_plane_horisontal2::$9
*((byte*) gfx_init_plane_horisontal2::gfxa#2) ← *((byte[]) gfx_init_plane_horisontal2::row_bitmask#0 + (byte) gfx_init_plane_horisontal2::row#0)
(byte*) gfx_init_plane_horisontal2::gfxa#1 ← ++ (byte*) gfx_init_plane_horisontal2::gfxa#2
(byte) gfx_init_plane_horisontal2::ax#1 ← (byte) gfx_init_plane_horisontal2::ax#2 + rangenext(0,$27)
@ -2926,8 +2926,8 @@ gfx_init_plane_charset8::@4: scope:[gfx_init_plane_charset8] from gfx_init_plan
(byte) gfx_init_plane_charset8::c#2 ← phi( gfx_init_plane_charset8::@3/(byte) gfx_init_plane_charset8::c#0 gfx_init_plane_charset8::@5/(byte) gfx_init_plane_charset8::c#1 )
*((byte*) gfx_init_plane_charset8::gfxa#2) ← (byte) gfx_init_plane_charset8::c#2
(byte*) gfx_init_plane_charset8::gfxa#1 ← ++ (byte*) gfx_init_plane_charset8::gfxa#2
(byte~) gfx_init_plane_charset8::$11 ← (byte) gfx_init_plane_charset8::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) gfx_init_plane_charset8::bits#1 ← (byte~) gfx_init_plane_charset8::$11
(byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$11 ← (byte) gfx_init_plane_charset8::bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) gfx_init_plane_charset8::bits#1 ← (byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$11
(byte) gfx_init_plane_charset8::col#1 ← ++ (byte) gfx_init_plane_charset8::col#2
(byte) gfx_init_plane_charset8::cp#1 ← (byte) gfx_init_plane_charset8::cp#2 + rangenext(0,7)
(bool~) gfx_init_plane_charset8::$12 ← (byte) gfx_init_plane_charset8::cp#1 != rangelast(0,7)
@ -3007,7 +3007,7 @@ gfx_init_plane_full::@return: scope:[gfx_init_plane_full] from gfx_init_plane_f
gfx_init_plane_fill: scope:[gfx_init_plane_fill] from gfx_init_plane_blank gfx_init_plane_full gfx_init_plane_vertical2
(byte) gfx_init_plane_fill::fill#7 ← phi( gfx_init_plane_blank/(byte) gfx_init_plane_fill::fill#1 gfx_init_plane_full/(byte) gfx_init_plane_fill::fill#2 gfx_init_plane_vertical2/(byte) gfx_init_plane_fill::fill#0 )
(dword) gfx_init_plane_fill::plane_addr#3 ← phi( gfx_init_plane_blank/(dword) gfx_init_plane_fill::plane_addr#1 gfx_init_plane_full/(dword) gfx_init_plane_fill::plane_addr#2 gfx_init_plane_vertical2/(dword) gfx_init_plane_fill::plane_addr#0 )
(dword~) gfx_init_plane_fill::$0 ← (dword) gfx_init_plane_fill::plane_addr#3 << (byte/signed byte/word/signed word/dword/signed dword) 2
(dword~) gfx_init_plane_fill::$0 ← (dword) gfx_init_plane_fill::plane_addr#3 * (byte/signed byte/word/signed word/dword/signed dword) 4
(word~) gfx_init_plane_fill::$1 ← > (dword~) gfx_init_plane_fill::$0
(byte~) gfx_init_plane_fill::$2 ← < (word~) gfx_init_plane_fill::$1
(byte) gfx_init_plane_fill::gfxbCpuBank#0 ← (byte~) gfx_init_plane_fill::$2
@ -5715,7 +5715,7 @@ SYMBOL TABLE SSA
(dword~) gfx_init_plane_charset8::$0
(byte~) gfx_init_plane_charset8::$1
(bool~) gfx_init_plane_charset8::$10
(byte~) gfx_init_plane_charset8::$11
(byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$11
(bool~) gfx_init_plane_charset8::$12
(bool~) gfx_init_plane_charset8::$13
(bool~) gfx_init_plane_charset8::$14
@ -5920,8 +5920,8 @@ SYMBOL TABLE SSA
(word/dword/signed dword~) gfx_init_plane_horisontal2::$4
(byte/signed byte/word/signed word/dword/signed dword~) gfx_init_plane_horisontal2::$5
(byte~) gfx_init_plane_horisontal2::$6
(byte~) gfx_init_plane_horisontal2::$8
(byte~) gfx_init_plane_horisontal2::$9
(byte/signed word/word/dword/signed dword~) gfx_init_plane_horisontal2::$8
(byte/word/dword~) gfx_init_plane_horisontal2::$9
(label) gfx_init_plane_horisontal2::@1
(label) gfx_init_plane_horisontal2::@2
(label) gfx_init_plane_horisontal2::@3
@ -5994,9 +5994,9 @@ SYMBOL TABLE SSA
(label) gfx_init_plane_vertical2::@return
(void()) gfx_init_screen0()
(byte~) gfx_init_screen0::$0
(byte~) gfx_init_screen0::$1
(byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1
(byte~) gfx_init_screen0::$2
(byte~) gfx_init_screen0::$3
(byte/word/dword~) gfx_init_screen0::$3
(bool~) gfx_init_screen0::$4
(bool~) gfx_init_screen0::$5
(label) gfx_init_screen0::@1
@ -6048,8 +6048,8 @@ SYMBOL TABLE SSA
(byte~) gfx_init_screen2::$0
(byte~) gfx_init_screen2::$1
(byte/signed word/word/dword/signed dword~) gfx_init_screen2::$2
(byte~) gfx_init_screen2::$3
(byte~) gfx_init_screen2::$4
(byte/signed word/word/dword/signed dword~) gfx_init_screen2::$3
(byte/word/dword~) gfx_init_screen2::$4
(bool~) gfx_init_screen2::$5
(bool~) gfx_init_screen2::$6
(label) gfx_init_screen2::@1
@ -6078,9 +6078,9 @@ SYMBOL TABLE SSA
(byte) gfx_init_screen2::cy#4
(void()) gfx_init_screen3()
(byte~) gfx_init_screen3::$0
(byte~) gfx_init_screen3::$1
(byte/signed word/word/dword/signed dword~) gfx_init_screen3::$1
(byte~) gfx_init_screen3::$2
(byte~) gfx_init_screen3::$3
(byte/word/dword~) gfx_init_screen3::$3
(bool~) gfx_init_screen3::$4
(bool~) gfx_init_screen3::$5
(label) gfx_init_screen3::@1
@ -6160,8 +6160,8 @@ SYMBOL TABLE SSA
(bool~) gfx_mode::$18
(bool~) gfx_mode::$19
(bool~) gfx_mode::$2
(byte~) gfx_mode::$20
(byte~) gfx_mode::$21
(byte/signed word/word/dword/signed dword~) gfx_mode::$20
(byte/word/dword~) gfx_mode::$21
(dword~) gfx_mode::$22
(dword~) gfx_mode::$23
(word~) gfx_mode::$24
@ -6171,12 +6171,12 @@ SYMBOL TABLE SSA
(word~) gfx_mode::$28
(byte~) gfx_mode::$29
(bool~) gfx_mode::$3
(byte~) gfx_mode::$30
(byte~) gfx_mode::$31
(byte~) gfx_mode::$32
(byte~) gfx_mode::$33
(byte~) gfx_mode::$34
(byte~) gfx_mode::$35
(byte/signed word/word/dword/signed dword~) gfx_mode::$30
(byte/word/dword~) gfx_mode::$31
(byte/signed word/word/dword/signed dword~) gfx_mode::$32
(byte/word/dword~) gfx_mode::$33
(byte/signed word/word/dword/signed dword~) gfx_mode::$34
(byte/word/dword~) gfx_mode::$35
(dword~) gfx_mode::$36
(dword~) gfx_mode::$37
(word~) gfx_mode::$38
@ -6186,10 +6186,10 @@ SYMBOL TABLE SSA
(byte~) gfx_mode::$41
(word~) gfx_mode::$42
(byte~) gfx_mode::$43
(byte~) gfx_mode::$44
(byte~) gfx_mode::$45
(byte~) gfx_mode::$46
(byte~) gfx_mode::$47
(byte/signed word/word/dword/signed dword~) gfx_mode::$44
(byte/word/dword~) gfx_mode::$45
(byte/signed word/word/dword/signed dword~) gfx_mode::$46
(byte/word/dword~) gfx_mode::$47
(word~) gfx_mode::$48
(word/signed dword/dword~) gfx_mode::$49
(bool~) gfx_mode::$5
@ -6198,25 +6198,25 @@ SYMBOL TABLE SSA
(byte*~) gfx_mode::$52
(word~) gfx_mode::$53
(word~) gfx_mode::$54
(word~) gfx_mode::$55
(word/signed dword/dword~) gfx_mode::$55
(byte~) gfx_mode::$56
(byte*~) gfx_mode::$57
(word~) gfx_mode::$58
(word~) gfx_mode::$59
(bool~) gfx_mode::$6
(byte~) gfx_mode::$60
(byte~) gfx_mode::$61
(byte~) gfx_mode::$62
(byte/signed word/word/dword/signed dword~) gfx_mode::$61
(byte/word/dword~) gfx_mode::$62
(byte*~) gfx_mode::$63
(byte~) gfx_mode::$64
(byte~) gfx_mode::$65
(byte~) gfx_mode::$66
(byte~) gfx_mode::$67
(byte~) gfx_mode::$68
(byte~) gfx_mode::$69
(byte/signed word/word/dword/signed dword~) gfx_mode::$64
(byte/word/dword~) gfx_mode::$65
(byte/signed word/word/dword/signed dword~) gfx_mode::$66
(byte/word/dword~) gfx_mode::$67
(byte/signed word/word/dword/signed dword~) gfx_mode::$68
(byte/word/dword~) gfx_mode::$69
(bool~) gfx_mode::$7
(byte~) gfx_mode::$70
(byte~) gfx_mode::$71
(byte/signed word/word/dword/signed dword~) gfx_mode::$70
(byte/word/dword~) gfx_mode::$71
(bool~) gfx_mode::$72
(byte~) gfx_mode::$73
(byte~) gfx_mode::$74
@ -7528,12 +7528,12 @@ Alias (byte) gfx_mode::vic_control#5 = (byte) gfx_mode::vic_control#6
Alias (byte) keyboard_events_size#145 = (byte) keyboard_events_size#146
Alias (byte) keyboard_modifiers#125 = (byte) keyboard_modifiers#126
Alias (byte) gfx_mode::vic_control#2 = (byte~) gfx_mode::$80
Alias (byte) gfx_mode::plane_a_offs#0 = (byte~) gfx_mode::$21 (byte) gfx_mode::plane_a_offs#1
Alias (byte) gfx_mode::plane_a_offs#0 = (byte/word/dword~) gfx_mode::$21 (byte) gfx_mode::plane_a_offs#1
Alias (dword) get_plane::return#16 = (dword) get_plane::return#19
Alias (byte) keyboard_events_size#130 = (byte) keyboard_events_size#139 (byte) keyboard_events_size#141 (byte) keyboard_events_size#137 (byte) keyboard_events_size#135 (byte) keyboard_events_size#133
Alias (byte) keyboard_modifiers#111 = (byte) keyboard_modifiers#119 (byte) keyboard_modifiers#121 (byte) keyboard_modifiers#117 (byte) keyboard_modifiers#115 (byte) keyboard_modifiers#113
Alias (dword) gfx_mode::plane_a#0 = (dword~) gfx_mode::$23
Alias (byte) gfx_mode::plane_b_offs#0 = (byte~) gfx_mode::$35 (byte) gfx_mode::plane_b_offs#1
Alias (byte) gfx_mode::plane_b_offs#0 = (byte/word/dword~) gfx_mode::$35 (byte) gfx_mode::plane_b_offs#1
Alias (dword) get_plane::return#17 = (dword) get_plane::return#20
Alias (dword) gfx_mode::plane_b#0 = (dword~) gfx_mode::$37
Alias (byte*) get_vic_screen::return#10 = (byte*) get_vic_screen::return#7
@ -7593,7 +7593,7 @@ Alias (byte) gfx_init_plane_horisontal::ay#3 = (byte) gfx_init_plane_horisontal:
Alias (byte*) gfx_init_plane_horisontal::gfxa#7 = (byte*) gfx_init_plane_horisontal::gfxa#8
Alias (byte) dtvSetCpuBankSegment1::cpuBankIdx#4 = (byte~) gfx_init_plane_horisontal::$6
Alias (byte) gfx_init_plane_horisontal2::gfxbCpuBank#0 = (byte~) gfx_init_plane_horisontal2::$1 (byte) gfx_init_plane_horisontal2::gfxbCpuBank#2
Alias (byte) gfx_init_plane_horisontal2::row#0 = (byte~) gfx_init_plane_horisontal2::$9
Alias (byte) gfx_init_plane_horisontal2::row#0 = (byte/word/dword~) gfx_init_plane_horisontal2::$9
Alias (byte) gfx_init_plane_horisontal2::ay#2 = (byte) gfx_init_plane_horisontal2::ay#3
Alias (byte*) gfx_init_plane_horisontal2::gfxa#1 = (byte*) gfx_init_plane_horisontal2::gfxa#4
Alias (byte) dtvSetCpuBankSegment1::cpuBankIdx#6 = (byte~) gfx_init_plane_horisontal2::$6
@ -7602,7 +7602,7 @@ Alias (byte) gfx_init_plane_vertical::by#2 = (byte) gfx_init_plane_vertical::by#
Alias (byte*) gfx_init_plane_vertical::gfxb#1 = (byte*) gfx_init_plane_vertical::gfxb#4
Alias (byte) dtvSetCpuBankSegment1::cpuBankIdx#8 = (byte~) gfx_init_plane_vertical::$6
Alias (byte) gfx_init_plane_charset8::gfxbCpuBank#0 = (byte~) gfx_init_plane_charset8::$1 (byte) gfx_init_plane_charset8::gfxbCpuBank#2
Alias (byte) gfx_init_plane_charset8::bits#1 = (byte~) gfx_init_plane_charset8::$11
Alias (byte) gfx_init_plane_charset8::bits#1 = (byte/signed word/word/dword/signed dword~) gfx_init_plane_charset8::$11
Alias (byte) gfx_init_plane_charset8::col#3 = (byte) gfx_init_plane_charset8::col#4 (byte) gfx_init_plane_charset8::c#1
Alias (byte*) gfx_init_plane_charset8::gfxa#3 = (byte*) gfx_init_plane_charset8::gfxa#4
Alias (byte) gfx_init_plane_charset8::bits#2 = (byte) gfx_init_plane_charset8::bits#4
@ -8837,6 +8837,25 @@ Resolved ranged next value form_mode::i#1 ← ++ form_mode::i#2 to ++
Resolved ranged comparison value if(form_mode::i#1!=rangelast(0,$f)) goto form_mode::@1 to (byte/signed byte/word/signed word/dword/signed dword) $10
Resolved ranged next value form_set_screen::y#1 ← ++ form_set_screen::y#2 to ++
Resolved ranged comparison value if(form_set_screen::y#1!=rangelast(0,$18)) goto form_set_screen::@1 to (byte/signed byte/word/signed word/dword/signed dword) $19
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$20 ← *((const byte*) form_a_start_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$30 ← *((const byte*) form_a_step_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$32 ← *((const byte*) form_a_mod_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$34 ← *((const byte*) form_b_start_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$44 ← *((const byte*) form_b_step_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$46 ← *((const byte*) form_b_mod_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting division to use shift (word/signed dword/dword~) gfx_mode::$55 ← (word~) gfx_mode::$54 / (byte/signed byte/word/signed word/dword/signed dword) $40
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$61 ← (byte~) gfx_mode::$60 / (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$64 ← *((const byte*) form_vic_bg0_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$66 ← *((const byte*) form_vic_bg1_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$68 ← *((const byte*) form_vic_bg2_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_mode::$70 ← *((const byte*) form_vic_bg3_hi#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_init_screen2::$3 ← (byte) gfx_init_screen2::col#0 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gfx_init_screen3::$1 ← (byte~) gfx_init_screen3::$0 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) gfx_init_plane_horisontal2::$8 ← (byte) gfx_init_plane_horisontal2::ay#4 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) gfx_init_plane_charset8::bits#1 ← (byte) gfx_init_plane_charset8::bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (dword~) gfx_init_plane_fill::$0 ← (dword) gfx_init_plane_fill::plane_addr#3 * (byte/signed byte/word/signed word/dword/signed dword) 4
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) print_str_lines::@2
@ -8941,6 +8960,34 @@ Redundant Phi (byte) form_field_idx#14 (byte) form_field_idx#18
Successful SSA optimization Pass2RedundantPhiElimination
Redundant Phi (byte) keyboard_events_size#45 (byte) keyboard_events_size#24
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [367] (byte/signed word/word/dword/signed dword~) gfx_mode::$20 ← *((const byte*) form_a_start_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [383] (byte/signed word/word/dword/signed dword~) gfx_mode::$30 ← *((const byte*) form_a_step_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [384] (byte/word/dword~) gfx_mode::$31 ← (byte~) gfx_mode::$30 | *((const byte*) form_a_step_lo#0)
Inferred type updated to byte in [386] (byte/signed word/word/dword/signed dword~) gfx_mode::$32 ← *((const byte*) form_a_mod_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [387] (byte/word/dword~) gfx_mode::$33 ← (byte~) gfx_mode::$32 | *((const byte*) form_a_mod_lo#0)
Inferred type updated to byte in [390] (byte/signed word/word/dword/signed dword~) gfx_mode::$34 ← *((const byte*) form_b_start_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [406] (byte/signed word/word/dword/signed dword~) gfx_mode::$44 ← *((const byte*) form_b_step_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [407] (byte/word/dword~) gfx_mode::$45 ← (byte~) gfx_mode::$44 | *((const byte*) form_b_step_lo#0)
Inferred type updated to byte in [409] (byte/signed word/word/dword/signed dword~) gfx_mode::$46 ← *((const byte*) form_b_mod_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [410] (byte/word/dword~) gfx_mode::$47 ← (byte~) gfx_mode::$46 | *((const byte*) form_b_mod_lo#0)
Inferred type updated to word in [420] (word/signed dword/dword~) gfx_mode::$55 ← (word~) gfx_mode::$54 >> (byte/signed byte/word/signed word/dword/signed dword) 6
Inferred type updated to byte in [428] (byte/signed word/word/dword/signed dword~) gfx_mode::$61 ← (byte~) gfx_mode::$60 >> (byte/signed byte/word/signed word/dword/signed dword) 2
Inferred type updated to byte in [429] (byte/word/dword~) gfx_mode::$62 ← (byte~) gfx_mode::$56 | (byte~) gfx_mode::$61
Inferred type updated to byte in [445] (byte/signed word/word/dword/signed dword~) gfx_mode::$64 ← *((const byte*) form_vic_bg0_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [446] (byte/word/dword~) gfx_mode::$65 ← (byte~) gfx_mode::$64 | *((const byte*) form_vic_bg0_lo#0)
Inferred type updated to byte in [448] (byte/signed word/word/dword/signed dword~) gfx_mode::$66 ← *((const byte*) form_vic_bg1_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [449] (byte/word/dword~) gfx_mode::$67 ← (byte~) gfx_mode::$66 | *((const byte*) form_vic_bg1_lo#0)
Inferred type updated to byte in [451] (byte/signed word/word/dword/signed dword~) gfx_mode::$68 ← *((const byte*) form_vic_bg2_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [452] (byte/word/dword~) gfx_mode::$69 ← (byte~) gfx_mode::$68 | *((const byte*) form_vic_bg2_lo#0)
Inferred type updated to byte in [454] (byte/signed word/word/dword/signed dword~) gfx_mode::$70 ← *((const byte*) form_vic_bg3_hi#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [455] (byte/word/dword~) gfx_mode::$71 ← (byte~) gfx_mode::$70 | *((const byte*) form_vic_bg3_lo#0)
Inferred type updated to byte in [504] (byte/signed word/word/dword/signed dword~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [506] (byte/word/dword~) gfx_init_screen0::$3 ← (byte~) gfx_init_screen0::$1 | (byte~) gfx_init_screen0::$2
Inferred type updated to byte in [530] (byte/signed word/word/dword/signed dword~) gfx_init_screen2::$3 ← (byte) gfx_init_screen2::col#0 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [531] (byte/word/dword~) gfx_init_screen2::$4 ← (byte~) gfx_init_screen2::$3 | (byte) gfx_init_screen2::col2#0
Inferred type updated to byte in [542] (byte/signed word/word/dword/signed dword~) gfx_init_screen3::$1 ← (byte~) gfx_init_screen3::$0 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [544] (byte/word/dword~) gfx_init_screen3::$3 ← (byte~) gfx_init_screen3::$1 | (byte~) gfx_init_screen3::$2
Inferred type updated to byte in [609] (byte/signed word/word/dword/signed dword~) gfx_init_plane_horisontal2::$8 ← (byte) gfx_init_plane_horisontal2::ay#4 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Culled Empty Block (label) gfx_mode::@31
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2

View File

@ -1901,10 +1901,10 @@ mode_stdchar::@4: scope:[mode_stdchar] from mode_stdchar::@3 mode_stdchar::@4
*((byte*) mode_stdchar::col#2) ← (byte~) mode_stdchar::$26
(byte*) mode_stdchar::col#1 ← ++ (byte*) mode_stdchar::col#2
(byte~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_stdchar::$29 ← (byte) mode_stdchar::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_stdchar::$30 ← (byte~) mode_stdchar::$28 | (byte~) mode_stdchar::$29
*((byte*) mode_stdchar::ch#2) ← (byte~) mode_stdchar::$30
(byte/word/dword~) mode_stdchar::$30 ← (byte/signed word/word/dword/signed dword~) mode_stdchar::$28 | (byte~) mode_stdchar::$29
*((byte*) mode_stdchar::ch#2) ← (byte/word/dword~) mode_stdchar::$30
(byte*) mode_stdchar::ch#1 ← ++ (byte*) mode_stdchar::ch#2
(byte) mode_stdchar::cx#1 ← (byte) mode_stdchar::cx#2 + rangenext(0,$27)
(bool~) mode_stdchar::$31 ← (byte) mode_stdchar::cx#1 != rangelast(0,$27)
@ -2009,10 +2009,10 @@ mode_ecmchar::@4: scope:[mode_ecmchar] from mode_ecmchar::@3 mode_ecmchar::@4
*((byte*) mode_ecmchar::col#2) ← (byte~) mode_ecmchar::$27
(byte*) mode_ecmchar::col#1 ← ++ (byte*) mode_ecmchar::col#2
(byte~) mode_ecmchar::$28 ← (byte) mode_ecmchar::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_ecmchar::$30 ← (byte) mode_ecmchar::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_ecmchar::$31 ← (byte~) mode_ecmchar::$29 | (byte~) mode_ecmchar::$30
*((byte*) mode_ecmchar::ch#2) ← (byte~) mode_ecmchar::$31
(byte/word/dword~) mode_ecmchar::$31 ← (byte/signed word/word/dword/signed dword~) mode_ecmchar::$29 | (byte~) mode_ecmchar::$30
*((byte*) mode_ecmchar::ch#2) ← (byte/word/dword~) mode_ecmchar::$31
(byte*) mode_ecmchar::ch#1 ← ++ (byte*) mode_ecmchar::ch#2
(byte) mode_ecmchar::cx#1 ← (byte) mode_ecmchar::cx#2 + rangenext(0,$27)
(bool~) mode_ecmchar::$32 ← (byte) mode_ecmchar::cx#1 != rangelast(0,$27)
@ -2116,10 +2116,10 @@ mode_mcchar::@4: scope:[mode_mcchar] from mode_mcchar::@3 mode_mcchar::@4
*((byte*) mode_mcchar::col#2) ← (byte~) mode_mcchar::$27
(byte*) mode_mcchar::col#1 ← ++ (byte*) mode_mcchar::col#2
(byte~) mode_mcchar::$28 ← (byte) mode_mcchar::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_mcchar::$30 ← (byte) mode_mcchar::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_mcchar::$31 ← (byte~) mode_mcchar::$29 | (byte~) mode_mcchar::$30
*((byte*) mode_mcchar::ch#2) ← (byte~) mode_mcchar::$31
(byte/word/dword~) mode_mcchar::$31 ← (byte/signed word/word/dword/signed dword~) mode_mcchar::$29 | (byte~) mode_mcchar::$30
*((byte*) mode_mcchar::ch#2) ← (byte/word/dword~) mode_mcchar::$31
(byte*) mode_mcchar::ch#1 ← ++ (byte*) mode_mcchar::ch#2
(byte) mode_mcchar::cx#1 ← (byte) mode_mcchar::cx#2 + rangenext(0,$27)
(bool~) mode_mcchar::$32 ← (byte) mode_mcchar::cx#1 != rangelast(0,$27)
@ -2209,9 +2209,9 @@ mode_stdbitmap::@4: scope:[mode_stdbitmap] from mode_stdbitmap::@3 mode_stdbitm
(byte) mode_stdbitmap::col#0 ← (byte~) mode_stdbitmap::$23
(byte/signed word/word/dword/signed dword~) mode_stdbitmap::$24 ← (byte/signed byte/word/signed word/dword/signed dword) $f - (byte) mode_stdbitmap::col#0
(byte) mode_stdbitmap::col2#0 ← (byte/signed word/word/dword/signed dword~) mode_stdbitmap::$24
(byte~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) mode_stdbitmap::$26 ← (byte~) mode_stdbitmap::$25 | (byte) mode_stdbitmap::col2#0
*((byte*) mode_stdbitmap::ch#2) ← (byte~) mode_stdbitmap::$26
(byte/signed word/word/dword/signed dword~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) mode_stdbitmap::$26 ← (byte/signed word/word/dword/signed dword~) mode_stdbitmap::$25 | (byte) mode_stdbitmap::col2#0
*((byte*) mode_stdbitmap::ch#2) ← (byte/word/dword~) mode_stdbitmap::$26
(byte*) mode_stdbitmap::ch#1 ← ++ (byte*) mode_stdbitmap::ch#2
(byte) mode_stdbitmap::cx#1 ← (byte) mode_stdbitmap::cx#2 + rangenext(0,$27)
(bool~) mode_stdbitmap::$27 ← (byte) mode_stdbitmap::cx#1 != rangelast(0,$27)
@ -2341,10 +2341,10 @@ mode_hicolstdchar::@4: scope:[mode_hicolstdchar] from mode_hicolstdchar::@3 mod
(byte) mode_hicolstdchar::cx#2 ← phi( mode_hicolstdchar::@3/(byte) mode_hicolstdchar::cx#0 mode_hicolstdchar::@4/(byte) mode_hicolstdchar::cx#1 )
(byte) mode_hicolstdchar::cy#2 ← phi( mode_hicolstdchar::@3/(byte) mode_hicolstdchar::cy#4 mode_hicolstdchar::@4/(byte) mode_hicolstdchar::cy#2 )
(byte~) mode_hicolstdchar::$25 ← (byte) mode_hicolstdchar::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_hicolstdchar::$27 ← (byte) mode_hicolstdchar::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_hicolstdchar::$28 ← (byte~) mode_hicolstdchar::$26 | (byte~) mode_hicolstdchar::$27
(byte) mode_hicolstdchar::v#0 ← (byte~) mode_hicolstdchar::$28
(byte/word/dword~) mode_hicolstdchar::$28 ← (byte/signed word/word/dword/signed dword~) mode_hicolstdchar::$26 | (byte~) mode_hicolstdchar::$27
(byte) mode_hicolstdchar::v#0 ← (byte/word/dword~) mode_hicolstdchar::$28
*((byte*) mode_hicolstdchar::col#2) ← (byte) mode_hicolstdchar::v#0
(byte*) mode_hicolstdchar::col#1 ← ++ (byte*) mode_hicolstdchar::col#2
*((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0
@ -2448,10 +2448,10 @@ mode_hicolecmchar::@4: scope:[mode_hicolecmchar] from mode_hicolecmchar::@3 mod
(byte) mode_hicolecmchar::cx#2 ← phi( mode_hicolecmchar::@3/(byte) mode_hicolecmchar::cx#0 mode_hicolecmchar::@4/(byte) mode_hicolecmchar::cx#1 )
(byte) mode_hicolecmchar::cy#2 ← phi( mode_hicolecmchar::@3/(byte) mode_hicolecmchar::cy#4 mode_hicolecmchar::@4/(byte) mode_hicolecmchar::cy#2 )
(byte~) mode_hicolecmchar::$26 ← (byte) mode_hicolecmchar::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_hicolecmchar::$28 ← (byte) mode_hicolecmchar::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_hicolecmchar::$29 ← (byte~) mode_hicolecmchar::$27 | (byte~) mode_hicolecmchar::$28
(byte) mode_hicolecmchar::v#0 ← (byte~) mode_hicolecmchar::$29
(byte/word/dword~) mode_hicolecmchar::$29 ← (byte/signed word/word/dword/signed dword~) mode_hicolecmchar::$27 | (byte~) mode_hicolecmchar::$28
(byte) mode_hicolecmchar::v#0 ← (byte/word/dword~) mode_hicolecmchar::$29
*((byte*) mode_hicolecmchar::col#2) ← (byte) mode_hicolecmchar::v#0
(byte*) mode_hicolecmchar::col#1 ← ++ (byte*) mode_hicolecmchar::col#2
*((byte*) mode_hicolecmchar::ch#2) ← (byte) mode_hicolecmchar::v#0
@ -2554,10 +2554,10 @@ mode_hicolmcchar::@4: scope:[mode_hicolmcchar] from mode_hicolmcchar::@3 mode_h
(byte) mode_hicolmcchar::cx#2 ← phi( mode_hicolmcchar::@3/(byte) mode_hicolmcchar::cx#0 mode_hicolmcchar::@4/(byte) mode_hicolmcchar::cx#1 )
(byte) mode_hicolmcchar::cy#2 ← phi( mode_hicolmcchar::@3/(byte) mode_hicolmcchar::cy#4 mode_hicolmcchar::@4/(byte) mode_hicolmcchar::cy#2 )
(byte~) mode_hicolmcchar::$26 ← (byte) mode_hicolmcchar::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_hicolmcchar::$28 ← (byte) mode_hicolmcchar::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_hicolmcchar::$29 ← (byte~) mode_hicolmcchar::$27 | (byte~) mode_hicolmcchar::$28
(byte) mode_hicolmcchar::v#0 ← (byte~) mode_hicolmcchar::$29
(byte/word/dword~) mode_hicolmcchar::$29 ← (byte/signed word/word/dword/signed dword~) mode_hicolmcchar::$27 | (byte~) mode_hicolmcchar::$28
(byte) mode_hicolmcchar::v#0 ← (byte/word/dword~) mode_hicolmcchar::$29
*((byte*) mode_hicolmcchar::col#2) ← (byte) mode_hicolmcchar::v#0
(byte*) mode_hicolmcchar::col#1 ← ++ (byte*) mode_hicolmcchar::col#2
*((byte*) mode_hicolmcchar::ch#2) ← (byte) mode_hicolmcchar::v#0
@ -2654,10 +2654,10 @@ mode_twoplanebitmap::@4: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::
(byte) mode_twoplanebitmap::cx#2 ← phi( mode_twoplanebitmap::@3/(byte) mode_twoplanebitmap::cx#0 mode_twoplanebitmap::@4/(byte) mode_twoplanebitmap::cx#1 )
(byte) mode_twoplanebitmap::cy#2 ← phi( mode_twoplanebitmap::@3/(byte) mode_twoplanebitmap::cy#4 mode_twoplanebitmap::@4/(byte) mode_twoplanebitmap::cy#2 )
(byte~) mode_twoplanebitmap::$16 ← (byte) mode_twoplanebitmap::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_twoplanebitmap::$19 ← (byte~) mode_twoplanebitmap::$17 | (byte~) mode_twoplanebitmap::$18
*((byte*) mode_twoplanebitmap::col#2) ← (byte~) mode_twoplanebitmap::$19
(byte/word/dword~) mode_twoplanebitmap::$19 ← (byte/signed word/word/dword/signed dword~) mode_twoplanebitmap::$17 | (byte~) mode_twoplanebitmap::$18
*((byte*) mode_twoplanebitmap::col#2) ← (byte/word/dword~) mode_twoplanebitmap::$19
(byte*) mode_twoplanebitmap::col#1 ← ++ (byte*) mode_twoplanebitmap::col#2
(byte) mode_twoplanebitmap::cx#1 ← (byte) mode_twoplanebitmap::cx#2 + rangenext(0,$27)
(bool~) mode_twoplanebitmap::$20 ← (byte) mode_twoplanebitmap::cx#1 != rangelast(0,$27)
@ -2864,9 +2864,9 @@ mode_sixsfred::@8: scope:[mode_sixsfred] from mode_sixsfred::@7 mode_sixsfred::
(byte) mode_sixsfred::ax#2 ← phi( mode_sixsfred::@7/(byte) mode_sixsfred::ax#0 mode_sixsfred::@8/(byte) mode_sixsfred::ax#1 )
(byte*) mode_sixsfred::gfxa#2 ← phi( mode_sixsfred::@7/(byte*) mode_sixsfred::gfxa#3 mode_sixsfred::@8/(byte*) mode_sixsfred::gfxa#1 )
(byte) mode_sixsfred::ay#2 ← phi( mode_sixsfred::@7/(byte) mode_sixsfred::ay#4 mode_sixsfred::@8/(byte) mode_sixsfred::ay#2 )
(byte~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) mode_sixsfred::$22 ← (byte~) mode_sixsfred::$21 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) mode_sixsfred::row#0 ← (byte~) mode_sixsfred::$22
(byte/signed word/word/dword/signed dword~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#2 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/word/dword~) mode_sixsfred::$22 ← (byte/signed word/word/dword/signed dword~) mode_sixsfred::$21 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) mode_sixsfred::row#0 ← (byte/word/dword~) mode_sixsfred::$22
*((byte*) mode_sixsfred::gfxa#2) ← *((byte[]) mode_sixsfred::row_bitmask#0 + (byte) mode_sixsfred::row#0)
(byte*) mode_sixsfred::gfxa#1 ← ++ (byte*) mode_sixsfred::gfxa#2
(byte) mode_sixsfred::ax#1 ← (byte) mode_sixsfred::ax#2 + rangenext(0,$27)
@ -2987,10 +2987,10 @@ mode_sixsfred2::@4: scope:[mode_sixsfred2] from mode_sixsfred2::@3 mode_sixsfre
(byte) mode_sixsfred2::cy#2 ← phi( mode_sixsfred2::@3/(byte) mode_sixsfred2::cy#4 mode_sixsfred2::@4/(byte) mode_sixsfred2::cy#2 )
(byte) mode_sixsfred2::cx#2 ← phi( mode_sixsfred2::@3/(byte) mode_sixsfred2::cx#0 mode_sixsfred2::@4/(byte) mode_sixsfred2::cx#1 )
(byte~) mode_sixsfred2::$15 ← (byte) mode_sixsfred2::cx#2 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#2 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte~) mode_sixsfred2::$18 ← (byte~) mode_sixsfred2::$16 | (byte~) mode_sixsfred2::$17
*((byte*) mode_sixsfred2::col#2) ← (byte~) mode_sixsfred2::$18
(byte/word/dword~) mode_sixsfred2::$18 ← (byte/signed word/word/dword/signed dword~) mode_sixsfred2::$16 | (byte~) mode_sixsfred2::$17
*((byte*) mode_sixsfred2::col#2) ← (byte/word/dword~) mode_sixsfred2::$18
(byte*) mode_sixsfred2::col#1 ← ++ (byte*) mode_sixsfred2::col#2
(byte) mode_sixsfred2::cx#1 ← (byte) mode_sixsfred2::cx#2 + rangenext(0,$27)
(bool~) mode_sixsfred2::$19 ← (byte) mode_sixsfred2::cx#1 != rangelast(0,$27)
@ -3021,9 +3021,9 @@ mode_sixsfred2::@8: scope:[mode_sixsfred2] from mode_sixsfred2::@7 mode_sixsfre
(byte) mode_sixsfred2::ax#2 ← phi( mode_sixsfred2::@7/(byte) mode_sixsfred2::ax#0 mode_sixsfred2::@8/(byte) mode_sixsfred2::ax#1 )
(byte*) mode_sixsfred2::gfxa#2 ← phi( mode_sixsfred2::@7/(byte*) mode_sixsfred2::gfxa#3 mode_sixsfred2::@8/(byte*) mode_sixsfred2::gfxa#1 )
(byte) mode_sixsfred2::ay#2 ← phi( mode_sixsfred2::@7/(byte) mode_sixsfred2::ay#4 mode_sixsfred2::@8/(byte) mode_sixsfred2::ay#2 )
(byte~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) mode_sixsfred2::$22 ← (byte~) mode_sixsfred2::$21 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) mode_sixsfred2::row#0 ← (byte~) mode_sixsfred2::$22
(byte/signed word/word/dword/signed dword~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#2 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/word/dword~) mode_sixsfred2::$22 ← (byte/signed word/word/dword/signed dword~) mode_sixsfred2::$21 & (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) mode_sixsfred2::row#0 ← (byte/word/dword~) mode_sixsfred2::$22
*((byte*) mode_sixsfred2::gfxa#2) ← *((byte[]) mode_sixsfred2::row_bitmask#0 + (byte) mode_sixsfred2::row#0)
(byte*) mode_sixsfred2::gfxa#1 ← ++ (byte*) mode_sixsfred2::gfxa#2
(byte) mode_sixsfred2::ax#1 ← (byte) mode_sixsfred2::ax#2 + rangenext(0,$27)
@ -3140,10 +3140,10 @@ mode_8bpppixelcell::@4: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@3
(byte) mode_8bpppixelcell::ax#2 ← phi( mode_8bpppixelcell::@3/(byte) mode_8bpppixelcell::ax#0 mode_8bpppixelcell::@4/(byte) mode_8bpppixelcell::ax#1 )
(byte) mode_8bpppixelcell::ay#2 ← phi( mode_8bpppixelcell::@3/(byte) mode_8bpppixelcell::ay#4 mode_8bpppixelcell::@4/(byte) mode_8bpppixelcell::ay#2 )
(byte~) mode_8bpppixelcell::$14 ← (byte) mode_8bpppixelcell::ay#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 * (byte/signed byte/word/signed word/dword/signed dword) $10
(byte~) mode_8bpppixelcell::$16 ← (byte) mode_8bpppixelcell::ax#2 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) mode_8bpppixelcell::$17 ← (byte~) mode_8bpppixelcell::$15 | (byte~) mode_8bpppixelcell::$16
*((byte*) mode_8bpppixelcell::gfxa#2) ← (byte~) mode_8bpppixelcell::$17
(byte/word/dword~) mode_8bpppixelcell::$17 ← (byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$15 | (byte~) mode_8bpppixelcell::$16
*((byte*) mode_8bpppixelcell::gfxa#2) ← (byte/word/dword~) mode_8bpppixelcell::$17
(byte*) mode_8bpppixelcell::gfxa#1 ← ++ (byte*) mode_8bpppixelcell::gfxa#2
(byte) mode_8bpppixelcell::ax#1 ← (byte) mode_8bpppixelcell::ax#2 + rangenext(0,$27)
(bool~) mode_8bpppixelcell::$18 ← (byte) mode_8bpppixelcell::ax#1 != rangelast(0,$27)
@ -3212,8 +3212,8 @@ mode_8bpppixelcell::@10: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@1
(byte) mode_8bpppixelcell::c#2 ← phi( mode_8bpppixelcell::@11/(byte) mode_8bpppixelcell::c#1 mode_8bpppixelcell::@9/(byte) mode_8bpppixelcell::c#0 )
*((byte*) mode_8bpppixelcell::gfxb#2) ← (byte) mode_8bpppixelcell::c#2
(byte*) mode_8bpppixelcell::gfxb#1 ← ++ (byte*) mode_8bpppixelcell::gfxb#2
(byte~) mode_8bpppixelcell::$23 ← (byte) mode_8bpppixelcell::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) mode_8bpppixelcell::bits#1 ← (byte~) mode_8bpppixelcell::$23
(byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$23 ← (byte) mode_8bpppixelcell::bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) mode_8bpppixelcell::bits#1 ← (byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$23
(byte) mode_8bpppixelcell::col#1 ← ++ (byte) mode_8bpppixelcell::col#2
(byte) mode_8bpppixelcell::cp#1 ← (byte) mode_8bpppixelcell::cp#2 + rangenext(0,7)
(bool~) mode_8bpppixelcell::$24 ← (byte) mode_8bpppixelcell::cp#1 != rangelast(0,7)
@ -5088,16 +5088,16 @@ SYMBOL TABLE SSA
(byte~) mode_8bpppixelcell::$11
(bool~) mode_8bpppixelcell::$13
(byte~) mode_8bpppixelcell::$14
(byte~) mode_8bpppixelcell::$15
(byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$15
(byte~) mode_8bpppixelcell::$16
(byte~) mode_8bpppixelcell::$17
(byte/word/dword~) mode_8bpppixelcell::$17
(bool~) mode_8bpppixelcell::$18
(bool~) mode_8bpppixelcell::$19
(byte~) mode_8bpppixelcell::$2
(byte~) mode_8bpppixelcell::$20
(bool~) mode_8bpppixelcell::$21
(bool~) mode_8bpppixelcell::$22
(byte~) mode_8bpppixelcell::$23
(byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$23
(bool~) mode_8bpppixelcell::$24
(bool~) mode_8bpppixelcell::$25
(bool~) mode_8bpppixelcell::$26
@ -5331,10 +5331,10 @@ SYMBOL TABLE SSA
(byte~) mode_ecmchar::$26
(byte~) mode_ecmchar::$27
(byte~) mode_ecmchar::$28
(byte~) mode_ecmchar::$29
(byte/signed word/word/dword/signed dword~) mode_ecmchar::$29
(dword~) mode_ecmchar::$3
(byte~) mode_ecmchar::$30
(byte~) mode_ecmchar::$31
(byte/word/dword~) mode_ecmchar::$31
(bool~) mode_ecmchar::$32
(bool~) mode_ecmchar::$33
(word~) mode_ecmchar::$4
@ -5403,9 +5403,9 @@ SYMBOL TABLE SSA
(byte~) mode_hicolecmchar::$23
(bool~) mode_hicolecmchar::$25
(byte~) mode_hicolecmchar::$26
(byte~) mode_hicolecmchar::$27
(byte/signed word/word/dword/signed dword~) mode_hicolecmchar::$27
(byte~) mode_hicolecmchar::$28
(byte~) mode_hicolecmchar::$29
(byte/word/dword~) mode_hicolecmchar::$29
(byte*~) mode_hicolecmchar::$3
(bool~) mode_hicolecmchar::$30
(bool~) mode_hicolecmchar::$31
@ -5477,9 +5477,9 @@ SYMBOL TABLE SSA
(byte~) mode_hicolmcchar::$23
(bool~) mode_hicolmcchar::$25
(byte~) mode_hicolmcchar::$26
(byte~) mode_hicolmcchar::$27
(byte/signed word/word/dword/signed dword~) mode_hicolmcchar::$27
(byte~) mode_hicolmcchar::$28
(byte~) mode_hicolmcchar::$29
(byte/word/dword~) mode_hicolmcchar::$29
(byte*~) mode_hicolmcchar::$3
(bool~) mode_hicolmcchar::$30
(bool~) mode_hicolmcchar::$31
@ -5550,9 +5550,9 @@ SYMBOL TABLE SSA
(byte~) mode_hicolstdchar::$22
(bool~) mode_hicolstdchar::$24
(byte~) mode_hicolstdchar::$25
(byte~) mode_hicolstdchar::$26
(byte/signed word/word/dword/signed dword~) mode_hicolstdchar::$26
(byte~) mode_hicolstdchar::$27
(byte~) mode_hicolstdchar::$28
(byte/word/dword~) mode_hicolstdchar::$28
(bool~) mode_hicolstdchar::$29
(byte*~) mode_hicolstdchar::$3
(bool~) mode_hicolstdchar::$30
@ -5626,10 +5626,10 @@ SYMBOL TABLE SSA
(byte~) mode_mcchar::$26
(byte~) mode_mcchar::$27
(byte~) mode_mcchar::$28
(byte~) mode_mcchar::$29
(byte/signed word/word/dword/signed dword~) mode_mcchar::$29
(dword~) mode_mcchar::$3
(byte~) mode_mcchar::$30
(byte~) mode_mcchar::$31
(byte/word/dword~) mode_mcchar::$31
(bool~) mode_mcchar::$32
(bool~) mode_mcchar::$33
(word~) mode_mcchar::$4
@ -5692,8 +5692,8 @@ SYMBOL TABLE SSA
(bool~) mode_sixsfred::$19
(byte~) mode_sixsfred::$2
(bool~) mode_sixsfred::$20
(byte~) mode_sixsfred::$21
(byte~) mode_sixsfred::$22
(byte/signed word/word/dword/signed dword~) mode_sixsfred::$21
(byte/word/dword~) mode_sixsfred::$22
(bool~) mode_sixsfred::$23
(bool~) mode_sixsfred::$24
(bool~) mode_sixsfred::$25
@ -5791,14 +5791,14 @@ SYMBOL TABLE SSA
(byte~) mode_sixsfred2::$12
(bool~) mode_sixsfred2::$14
(byte~) mode_sixsfred2::$15
(byte~) mode_sixsfred2::$16
(byte/signed word/word/dword/signed dword~) mode_sixsfred2::$16
(byte~) mode_sixsfred2::$17
(byte~) mode_sixsfred2::$18
(byte/word/dword~) mode_sixsfred2::$18
(bool~) mode_sixsfred2::$19
(byte~) mode_sixsfred2::$2
(bool~) mode_sixsfred2::$20
(byte~) mode_sixsfred2::$21
(byte~) mode_sixsfred2::$22
(byte/signed word/word/dword/signed dword~) mode_sixsfred2::$21
(byte/word/dword~) mode_sixsfred2::$22
(bool~) mode_sixsfred2::$23
(bool~) mode_sixsfred2::$24
(bool~) mode_sixsfred2::$25
@ -5904,8 +5904,8 @@ SYMBOL TABLE SSA
(byte~) mode_stdbitmap::$22
(byte~) mode_stdbitmap::$23
(byte/signed word/word/dword/signed dword~) mode_stdbitmap::$24
(byte~) mode_stdbitmap::$25
(byte~) mode_stdbitmap::$26
(byte/signed word/word/dword/signed dword~) mode_stdbitmap::$25
(byte/word/dword~) mode_stdbitmap::$26
(bool~) mode_stdbitmap::$27
(bool~) mode_stdbitmap::$28
(byte/signed word/word/dword/signed dword~) mode_stdbitmap::$29
@ -5991,10 +5991,10 @@ SYMBOL TABLE SSA
(byte~) mode_stdchar::$25
(byte~) mode_stdchar::$26
(byte~) mode_stdchar::$27
(byte~) mode_stdchar::$28
(byte/signed word/word/dword/signed dword~) mode_stdchar::$28
(byte~) mode_stdchar::$29
(dword~) mode_stdchar::$3
(byte~) mode_stdchar::$30
(byte/word/dword~) mode_stdchar::$30
(bool~) mode_stdchar::$31
(bool~) mode_stdchar::$32
(word~) mode_stdchar::$4
@ -6052,9 +6052,9 @@ SYMBOL TABLE SSA
(byte~) mode_twoplanebitmap::$13
(bool~) mode_twoplanebitmap::$15
(byte~) mode_twoplanebitmap::$16
(byte~) mode_twoplanebitmap::$17
(byte/signed word/word/dword/signed dword~) mode_twoplanebitmap::$17
(byte~) mode_twoplanebitmap::$18
(byte~) mode_twoplanebitmap::$19
(byte/word/dword~) mode_twoplanebitmap::$19
(byte~) mode_twoplanebitmap::$2
(bool~) mode_twoplanebitmap::$20
(bool~) mode_twoplanebitmap::$21
@ -6749,7 +6749,7 @@ Alias (byte) dtv_control#28 = (byte) dtv_control#79 (byte) dtv_control#80 (byte)
Alias (byte) dtv_control#212 = (byte) dtv_control#228
Alias (byte*) mode_hicolstdchar::COLORS#0 = (byte*) mode_hicolstdchar::col#0
Alias (byte*) mode_hicolstdchar::SCREEN#0 = (byte*) mode_hicolstdchar::ch#0
Alias (byte) mode_hicolstdchar::v#0 = (byte~) mode_hicolstdchar::$28
Alias (byte) mode_hicolstdchar::v#0 = (byte/word/dword~) mode_hicolstdchar::$28
Alias (byte) mode_hicolstdchar::cy#2 = (byte) mode_hicolstdchar::cy#3
Alias (byte*) mode_hicolstdchar::col#1 = (byte*) mode_hicolstdchar::col#4
Alias (byte*) mode_hicolstdchar::ch#1 = (byte*) mode_hicolstdchar::ch#4
@ -6758,7 +6758,7 @@ Alias (byte) dtv_control#31 = (byte) dtv_control#81 (byte) dtv_control#82 (byte)
Alias (byte) dtv_control#213 = (byte) dtv_control#229
Alias (byte*) mode_hicolecmchar::COLORS#0 = (byte*) mode_hicolecmchar::col#0
Alias (byte*) mode_hicolecmchar::SCREEN#0 = (byte*) mode_hicolecmchar::ch#0
Alias (byte) mode_hicolecmchar::v#0 = (byte~) mode_hicolecmchar::$29
Alias (byte) mode_hicolecmchar::v#0 = (byte/word/dword~) mode_hicolecmchar::$29
Alias (byte) mode_hicolecmchar::cy#2 = (byte) mode_hicolecmchar::cy#3
Alias (byte*) mode_hicolecmchar::col#1 = (byte*) mode_hicolecmchar::col#4
Alias (byte*) mode_hicolecmchar::ch#1 = (byte*) mode_hicolecmchar::ch#4
@ -6767,7 +6767,7 @@ Alias (byte) dtv_control#34 = (byte) dtv_control#83 (byte) dtv_control#84 (byte)
Alias (byte) dtv_control#214 = (byte) dtv_control#230
Alias (byte*) mode_hicolmcchar::COLORS#0 = (byte*) mode_hicolmcchar::col#0
Alias (byte*) mode_hicolmcchar::SCREEN#0 = (byte*) mode_hicolmcchar::ch#0
Alias (byte) mode_hicolmcchar::v#0 = (byte~) mode_hicolmcchar::$29
Alias (byte) mode_hicolmcchar::v#0 = (byte/word/dword~) mode_hicolmcchar::$29
Alias (byte) mode_hicolmcchar::cy#2 = (byte) mode_hicolmcchar::cy#3
Alias (byte*) mode_hicolmcchar::col#1 = (byte*) mode_hicolmcchar::col#4
Alias (byte*) mode_hicolmcchar::ch#1 = (byte*) mode_hicolmcchar::ch#4
@ -6799,7 +6799,7 @@ Alias (byte) mode_sixsfred::cy#2 = (byte) mode_sixsfred::cy#3
Alias (byte*) mode_sixsfred::col#1 = (byte*) mode_sixsfred::col#4
Alias (byte) dtv_control#260 = (byte) dtv_control#267 (byte) dtv_control#274
Alias (byte*) mode_sixsfred::PLANEA#0 = (byte*) mode_sixsfred::gfxa#0
Alias (byte) mode_sixsfred::row#0 = (byte~) mode_sixsfred::$22
Alias (byte) mode_sixsfred::row#0 = (byte/word/dword~) mode_sixsfred::$22
Alias (byte) mode_sixsfred::ay#2 = (byte) mode_sixsfred::ay#3
Alias (byte*) mode_sixsfred::gfxa#1 = (byte*) mode_sixsfred::gfxa#4
Alias (byte) dtv_control#216 = (byte) dtv_control#232 (byte) dtv_control#242
@ -6814,7 +6814,7 @@ Alias (byte) mode_sixsfred2::cy#2 = (byte) mode_sixsfred2::cy#3
Alias (byte*) mode_sixsfred2::col#1 = (byte*) mode_sixsfred2::col#4
Alias (byte) dtv_control#261 = (byte) dtv_control#268 (byte) dtv_control#275
Alias (byte*) mode_sixsfred2::PLANEA#0 = (byte*) mode_sixsfred2::gfxa#0
Alias (byte) mode_sixsfred2::row#0 = (byte~) mode_sixsfred2::$22
Alias (byte) mode_sixsfred2::row#0 = (byte/word/dword~) mode_sixsfred2::$22
Alias (byte) mode_sixsfred2::ay#2 = (byte) mode_sixsfred2::ay#3
Alias (byte*) mode_sixsfred2::gfxa#1 = (byte*) mode_sixsfred2::gfxa#4
Alias (byte) dtv_control#217 = (byte) dtv_control#233 (byte) dtv_control#243
@ -6831,7 +6831,7 @@ Alias (byte*) mode_8bpppixelcell::gfxa#1 = (byte*) mode_8bpppixelcell::gfxa#4
Alias (byte) dtv_control#253 = (byte) dtv_control#262 (byte) dtv_control#269
Alias (byte*) mode_8bpppixelcell::PLANEB#0 = (byte*) mode_8bpppixelcell::gfxb#0
Alias (byte*) mode_8bpppixelcell::CHARGEN#0 = (byte*) mode_8bpppixelcell::chargen#0
Alias (byte) mode_8bpppixelcell::bits#1 = (byte~) mode_8bpppixelcell::$23
Alias (byte) mode_8bpppixelcell::bits#1 = (byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$23
Alias (byte) mode_8bpppixelcell::col#3 = (byte) mode_8bpppixelcell::col#4 (byte) mode_8bpppixelcell::c#1
Alias (byte*) mode_8bpppixelcell::gfxb#3 = (byte*) mode_8bpppixelcell::gfxb#4
Alias (byte) mode_8bpppixelcell::bits#2 = (byte) mode_8bpppixelcell::bits#4
@ -8086,6 +8086,20 @@ Resolved ranged next value mode_8bppchunkybmm::x#1 ← ++ mode_8bppchunkybmm::x#
Resolved ranged comparison value if(mode_8bppchunkybmm::x#1!=rangelast(0,$13f)) goto mode_8bppchunkybmm::@4 to (word/signed word/dword/signed dword) $140
Resolved ranged next value mode_8bppchunkybmm::y#1 ← ++ mode_8bppchunkybmm::y#6 to ++
Resolved ranged comparison value if(mode_8bppchunkybmm::y#1!=rangelast(0,$c7)) goto mode_8bppchunkybmm::@3 to (byte/word/signed word/dword/signed dword) $c8
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#4 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#4 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (byte) mode_8bpppixelcell::bits#1 ← (byte) mode_8bpppixelcell::bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) print_str_lines::@2
@ -8189,6 +8203,25 @@ Redundant Phi (byte) mode_8bpppixelcell::ch#7 (byte) mode_8bpppixelcell::ch#8
Redundant Phi (byte) dtv_control#234 (byte) dtv_control#244
Redundant Phi (byte) dtv_control#235 (const byte) dtv_control#51
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [365] (byte/signed word/word/dword/signed dword~) mode_stdchar::$28 ← (byte~) mode_stdchar::$27 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [367] (byte/word/dword~) mode_stdchar::$30 ← (byte~) mode_stdchar::$28 | (byte~) mode_stdchar::$29
Inferred type updated to byte in [401] (byte/signed word/word/dword/signed dword~) mode_ecmchar::$29 ← (byte~) mode_ecmchar::$28 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [403] (byte/word/dword~) mode_ecmchar::$31 ← (byte~) mode_ecmchar::$29 | (byte~) mode_ecmchar::$30
Inferred type updated to byte in [436] (byte/signed word/word/dword/signed dword~) mode_mcchar::$29 ← (byte~) mode_mcchar::$28 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [438] (byte/word/dword~) mode_mcchar::$31 ← (byte~) mode_mcchar::$29 | (byte~) mode_mcchar::$30
Inferred type updated to byte in [465] (byte/signed word/word/dword/signed dword~) mode_stdbitmap::$25 ← (byte) mode_stdbitmap::col#0 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [466] (byte/word/dword~) mode_stdbitmap::$26 ← (byte~) mode_stdbitmap::$25 | (byte) mode_stdbitmap::col2#0
Inferred type updated to byte in [503] (byte/signed word/word/dword/signed dword~) mode_hicolstdchar::$26 ← (byte~) mode_hicolstdchar::$25 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [537] (byte/signed word/word/dword/signed dword~) mode_hicolecmchar::$27 ← (byte~) mode_hicolecmchar::$26 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [570] (byte/signed word/word/dword/signed dword~) mode_hicolmcchar::$27 ← (byte~) mode_hicolmcchar::$26 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [610] (byte/signed word/word/dword/signed dword~) mode_twoplanebitmap::$17 ← (byte~) mode_twoplanebitmap::$16 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [612] (byte/word/dword~) mode_twoplanebitmap::$19 ← (byte~) mode_twoplanebitmap::$17 | (byte~) mode_twoplanebitmap::$18
Inferred type updated to byte in [676] (byte/signed word/word/dword/signed dword~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#4 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [719] (byte/signed word/word/dword/signed dword~) mode_sixsfred2::$16 ← (byte~) mode_sixsfred2::$15 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [721] (byte/word/dword~) mode_sixsfred2::$18 ← (byte~) mode_sixsfred2::$16 | (byte~) mode_sixsfred2::$17
Inferred type updated to byte in [730] (byte/signed word/word/dword/signed dword~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#4 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [771] (byte/signed word/word/dword/signed dword~) mode_8bpppixelcell::$15 ← (byte~) mode_8bpppixelcell::$14 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [773] (byte/word/dword~) mode_8bpppixelcell::$17 ← (byte~) mode_8bpppixelcell::$15 | (byte~) mode_8bpppixelcell::$16
Culled Empty Block (label) main::@1
Successful SSA optimization Pass2CullEmptyBlocks
Self Phi Eliminated (byte) dtv_control#244

View File

@ -44,8 +44,8 @@ main::@3: scope:[main] from main::@2 main::@4
(byte) main::c#2 ← phi( main::@2/(byte) main::c#0 main::@4/(byte) main::c#1 )
*((byte*) main::sc#3) ← (byte) main::c#2
(byte*) main::sc#1 ← ++ (byte*) main::sc#3
(byte~) main::$4 ← (byte) main::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::bits#1 ← (byte~) main::$4
(byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits#1 ← (byte/signed word/word/dword/signed dword~) main::$4
(byte) main::x#1 ← (byte) main::x#2 + rangenext(0,7)
(bool~) main::$5 ← (byte) main::x#1 != rangelast(0,7)
if((bool~) main::$5) goto main::@2
@ -98,7 +98,7 @@ SYMBOL TABLE SSA
(byte~) main::$1
(bool~) main::$2
(bool~) main::$3
(byte~) main::$4
(byte/signed word/word/dword/signed dword~) main::$4
(bool~) main::$5
(byte*~) main::$6
(bool~) main::$7
@ -155,7 +155,7 @@ Successful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not [16] (bool~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [15] (bool~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) main::CHAR_A#0 = (byte*~) main::$0
Alias (byte) main::bits#1 = (byte~) main::$4
Alias (byte) main::bits#1 = (byte/signed word/word/dword/signed dword~) main::$4
Alias (byte*) main::sc#5 = (byte*) main::sc#6
Alias (byte) main::bits#2 = (byte) main::bits#4
Alias (byte) main::x#3 = (byte) main::x#4
@ -197,6 +197,8 @@ Resolved ranged next value main::x#1 ← ++ main::x#2 to ++
Resolved ranged comparison value if(main::x#1!=rangelast(0,7)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value main::y#1 ← ++ main::y#2 to ++
Resolved ranged comparison value if(main::y#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte) main::bits#1 ← (byte) main::bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Self Phi Eliminated (byte*) main::CHAR_A#1
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) main::CHAR_A#1 (const byte*) main::CHAR_A#0

View File

@ -157,8 +157,8 @@ sprites_init: scope:[sprites_init] from main::@4
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
(byte) sprites_init::xpos#2 ← phi( sprites_init/(byte) sprites_init::xpos#0 sprites_init::@1/(byte) sprites_init::xpos#1 )
(byte) sprites_init::s#2 ← phi( sprites_init/(byte) sprites_init::s#0 sprites_init::@1/(byte) sprites_init::s#1 )
(byte~) sprites_init::$2 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) sprites_init::s2#0 ← (byte~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$2 ← (byte) sprites_init::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) sprites_init::s2#0 ← (byte/signed word/word/dword/signed dword~) sprites_init::$2
*((byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
*((byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (byte) BLACK#0
(byte/signed word/word/dword/signed dword~) sprites_init::$3 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18
@ -461,8 +461,8 @@ main::@1: scope:[main] from main::@5 main::@6
(byte) main::ypos#2 ← phi( main::@5/(byte) main::ypos#1 main::@6/(byte) main::ypos#0 )
(byte) main::xpos#2 ← phi( main::@5/(byte) main::xpos#1 main::@6/(byte) main::xpos#0 )
(byte) main::s#2 ← phi( main::@5/(byte) main::s#1 main::@6/(byte) main::s#0 )
(byte~) main::$5 ← (byte) main::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::s2#0 ← (byte~) main::$5
(byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::s2#0 ← (byte/signed word/word/dword/signed dword~) main::$5
*((byte*) SPRITES_XPOS#0 + (byte) main::s2#0) ← (byte) main::xpos#2
*((byte*) SPRITES_YPOS#0 + (byte) main::s2#0) ← (byte) main::ypos#2
(byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::s#2 - (byte/signed byte/word/signed word/dword/signed dword) 3
@ -543,8 +543,8 @@ loop::@6: scope:[loop] from loop::@5 loop::@6
(byte) sin_idx#14 ← phi( loop::@5/(byte) sin_idx#8 loop::@6/(byte) sin_idx#14 )
(byte) loop::idx#2 ← phi( loop::@5/(byte) loop::idx#0 loop::@6/(byte) loop::idx#1 )
(byte) loop::s#2 ← phi( loop::@5/(byte) loop::s#0 loop::@6/(byte) loop::s#1 )
(byte~) loop::$1 ← (byte) loop::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((byte*) SPRITES_YPOS#0 + (byte~) loop::$1) ← *((byte*) SIN#0 + (byte) loop::idx#2)
(byte/signed word/word/dword/signed dword~) loop::$1 ← (byte) loop::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*) SPRITES_YPOS#0 + (byte/signed word/word/dword/signed dword~) loop::$1) ← *((byte*) SIN#0 + (byte) loop::idx#2)
(byte) loop::idx#1 ← (byte) loop::idx#2 + (byte/signed byte/word/signed word/dword/signed dword) $a
(byte) loop::s#1 ← (byte) loop::s#2 + rangenext(4,7)
(bool~) loop::$2 ← (byte) loop::s#1 != rangelast(4,7)
@ -884,7 +884,7 @@ SYMBOL TABLE SSA
(word) lines_bcd#0
(void()) loop()
(bool~) loop::$0
(byte~) loop::$1
(byte/signed word/word/dword/signed dword~) loop::$1
(bool~) loop::$2
(label) loop::@1
(label) loop::@2
@ -903,7 +903,7 @@ SYMBOL TABLE SSA
(byte) loop::s#2
(void()) main()
(byte~) main::$1
(byte~) main::$5
(byte/signed word/word/dword/signed dword~) main::$5
(byte/signed word/word/dword/signed dword~) main::$6
(byte~) main::$7
(bool~) main::$8
@ -1068,7 +1068,7 @@ SYMBOL TABLE SSA
(void()) sprites_init()
(byte/signed byte/word/signed word/dword/signed dword~) sprites_init::$0
(byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
(byte~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$3
(bool~) sprites_init::$4
(label) sprites_init::@1
@ -1159,7 +1159,7 @@ Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (b
Alias (byte*) PLAYFIELD_SPRITE_PTRS_1#0 = (byte*~) $0
Alias (byte*) PLAYFIELD_SPRITE_PTRS_2#0 = (byte*~) $1
Alias (byte) sprites_init::xpos#0 = (byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
Alias (byte) sprites_init::s2#0 = (byte~) sprites_init::$2
Alias (byte) sprites_init::s2#0 = (byte/signed word/word/dword/signed dword~) sprites_init::$2
Alias (byte) sprites_init::xpos#1 = (byte/signed word/word/dword/signed dword~) sprites_init::$3
Alias (byte) render_screen_showing#0 = (byte) render_screen_showing#9 (byte) render_screen_showing#8 (byte) render_screen_showing#7 (byte) render_screen_showing#6 (byte) render_screen_showing#5 (byte) render_screen_showing#4
Alias (byte*) PLAYFIELD_SPRITES#0 = (byte*) toSpritePtr1_sprite#0 (byte*) toSpritePtr1_sprite#1
@ -1188,7 +1188,7 @@ Alias (byte) main::vicSelectGfxBank1_toDd001_return#0 = (byte/word/dword) main::
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1
Alias (byte) main::toD0181_return#0 = (byte/word/dword) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$1
Alias (byte) main::s2#0 = (byte~) main::$5
Alias (byte) main::s2#0 = (byte/signed word/word/dword/signed dword~) main::$5
Alias (byte*) main::toSpritePtr2_sprite#0 = (byte*) main::toSpritePtr2_sprite#1
Alias (byte) main::s#2 = (byte) main::s#5 (byte) main::s#4 (byte) main::s#3
Alias (byte) main::xpos#2 = (byte) main::xpos#5 (byte) main::xpos#4 (byte) main::xpos#3
@ -1449,6 +1449,10 @@ Resolved ranged next value main::s#1 ← ++ main::s#2 to ++
Resolved ranged comparison value if(main::s#1!=rangelast(4,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value loop::s#1 ← ++ loop::s#2 to ++
Resolved ranged comparison value if(loop::s#1!=rangelast(4,7)) goto loop::@6 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) main::s2#0 ← (byte) main::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) loop::$1 ← (byte) loop::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) toSpritePtr1_@return
Culled Empty Block (label) sprites_irq::toSpritePtr2_@return
Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return
@ -1460,6 +1464,7 @@ Culled Empty Block (label) loop::@2
Culled Empty Block (label) @11
Successful SSA optimization Pass2CullEmptyBlocks
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Inferred type updated to byte in [95] (byte/signed word/word/dword/signed dword~) loop::$1 ← (byte) loop::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Inlining constant with var siblings (const byte) sprites_init::s#0
Inlining constant with var siblings (const byte) sprites_init::xpos#0

View File

@ -577,10 +577,10 @@ render_init::@1: scope:[render_init] from render_init::@1 render_init::@5
(byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@5/(byte*) render_init::li_2#0 )
(byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@5/(byte*) render_init::li_1#0 )
(byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@5/(byte) render_init::i#0 )
(byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2
(byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2
(byte/signed word/word/dword/signed dword~) render_init::$13 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte/signed word/word/dword/signed dword~) render_init::$13) ← (byte*) render_init::li_1#2
(byte/signed word/word/dword/signed dword~) render_init::$14 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte/signed word/word/dword/signed dword~) render_init::$14) ← (byte*) render_init::li_2#2
(byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
(byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
(byte) render_init::i#1 ← (byte) render_init::i#2 + rangenext(0,render_init::$12)
@ -932,9 +932,9 @@ render_playfield::@1: scope:[render_playfield] from render_playfield render_pla
(byte) render_playfield::i#3 ← phi( render_playfield/(byte) render_playfield::i#0 render_playfield::@3/(byte) render_playfield::i#4 )
(byte) render_screen_render#13 ← phi( render_playfield/(byte) render_screen_render#22 render_playfield::@3/(byte) render_screen_render#23 )
(byte) render_playfield::l#2 ← phi( render_playfield/(byte) render_playfield::l#0 render_playfield::@3/(byte) render_playfield::l#1 )
(byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) render_playfield::$3 ← (byte) render_screen_render#13 + (byte~) render_playfield::$2
(byte*) render_playfield::screen_line#0 ← *((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3)
(byte/signed word/word/dword/signed dword~) render_playfield::$2 ← (byte) render_playfield::l#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/signed word/word/dword/signed dword~) render_playfield::$3 ← (byte) render_screen_render#13 + (byte/signed word/word/dword/signed dword~) render_playfield::$2
(byte*) render_playfield::screen_line#0 ← *((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte/signed word/word/dword/signed dword~) render_playfield::$3)
(byte/signed word/word/dword/signed dword~) render_playfield::$4 ← (byte) PLAYFIELD_COLS#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) render_playfield::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_playfield::@2
@ -969,8 +969,8 @@ render_moving: scope:[render_moving] from main::@32 main::@39
(byte) render_screen_render#33 ← phi( main::@32/(byte) render_screen_render#36 main::@39/(byte) render_screen_render#39 )
(byte) current_ypos#13 ← phi( main::@32/(byte) current_ypos#30 main::@39/(byte) current_ypos#31 )
(byte) render_moving::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte~) render_moving::$0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) render_moving::ypos2#0 ← (byte~) render_moving::$0
(byte/signed word/word/dword/signed dword~) render_moving::$0 ← (byte) current_ypos#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) render_moving::ypos2#0 ← (byte/signed word/word/dword/signed dword~) render_moving::$0
(byte) render_moving::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_moving::@1
render_moving::@1: scope:[render_moving] from render_moving render_moving::@3
@ -1095,8 +1095,8 @@ render_next::@3: scope:[render_next] from render_next
render_next::@2: scope:[render_next] from render_next::@1 render_next::@3
(byte*) render_next::screen_next_area#11 ← phi( render_next::@1/(byte*) render_next::screen_next_area#1 render_next::@3/(byte*) render_next::screen_next_area#2 )
(byte) next_piece_idx#12 ← phi( render_next::@1/(byte) next_piece_idx#24 render_next::@3/(byte) next_piece_idx#25 )
(byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((word[]) PIECES#0 + (byte~) render_next::$4)
(byte/signed word/word/dword/signed dword~) render_next::$4 ← (byte) next_piece_idx#12 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) render_next::$4)
(byte) render_next::next_piece_char#0 ← *((byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12)
(byte) render_next::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_next::@5
@ -1202,8 +1202,8 @@ sprites_init: scope:[sprites_init] from main::@26
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
(byte) sprites_init::xpos#2 ← phi( sprites_init/(byte) sprites_init::xpos#0 sprites_init::@1/(byte) sprites_init::xpos#1 )
(byte) sprites_init::s#2 ← phi( sprites_init/(byte) sprites_init::s#0 sprites_init::@1/(byte) sprites_init::s#1 )
(byte~) sprites_init::$2 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) sprites_init::s2#0 ← (byte~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$2 ← (byte) sprites_init::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) sprites_init::s2#0 ← (byte/signed word/word/dword/signed dword~) sprites_init::$2
*((byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
*((byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (byte) BLACK#0
(byte/signed word/word/dword/signed dword~) sprites_init::$3 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18
@ -1544,8 +1544,8 @@ play_init::@1: scope:[play_init] from play_init play_init::@1
(byte) play_init::idx#2 ← phi( play_init/(byte) play_init::idx#0 play_init::@1/(byte) play_init::idx#1 )
(byte*) play_init::pli#2 ← phi( play_init/(byte*) play_init::pli#0 play_init::@1/(byte*) play_init::pli#1 )
(byte) play_init::j#2 ← phi( play_init/(byte) play_init::j#0 play_init::@1/(byte) play_init::j#1 )
(byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2
(byte/signed word/word/dword/signed dword~) play_init::$2 ← (byte) play_init::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte/signed word/word/dword/signed dword~) play_init::$2) ← (byte*) play_init::pli#2
*((byte[$29]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2
(byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (byte) PLAYFIELD_COLS#0
(byte) play_init::idx#1 ← (byte) play_init::idx#2 + (byte) PLAYFIELD_COLS#0
@ -1563,8 +1563,8 @@ play_init::@2: scope:[play_init] from play_init::@1
play_init::@3: scope:[play_init] from play_init::@2 play_init::@3
(byte) current_movedown_slow#29 ← phi( play_init::@2/(byte) current_movedown_slow#1 play_init::@3/(byte) current_movedown_slow#29 )
(byte) play_init::b#2 ← phi( play_init::@2/(byte) play_init::b#0 play_init::@3/(byte) play_init::b#1 )
(byte~) play_init::$4 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_init::b4#0 ← (byte~) play_init::$4
(byte/signed word/word/dword/signed dword~) play_init::$4 ← (byte) play_init::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) play_init::b4#0 ← (byte/signed word/word/dword/signed dword~) play_init::$4
*((dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0)
(byte) play_init::b#1 ← (byte) play_init::b#2 + rangenext(0,4)
(bool~) play_init::$5 ← (byte) play_init::b#1 != rangelast(0,4)
@ -2388,8 +2388,8 @@ play_collision: scope:[play_collision] from play_move_down::@9 play_move_leftri
(byte*~) play_collision::$0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5
(byte*) play_collision::piece_gfx#0 ← (byte*~) play_collision::$0
(byte) play_collision::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte~) play_collision::$1 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_collision::ypos2#0 ← (byte~) play_collision::$1
(byte/signed word/word/dword/signed dword~) play_collision::$1 ← (byte) play_collision::ypos#5 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_collision::ypos2#0 ← (byte/signed word/word/dword/signed dword~) play_collision::$1
(byte) play_collision::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_collision::@1
play_collision::@1: scope:[play_collision] from play_collision play_collision::@17
@ -2531,8 +2531,8 @@ play_lock_current: scope:[play_lock_current] from play_move_down::@10
(byte) current_xpos#52 ← phi( play_move_down::@10/(byte) current_xpos#70 )
(byte) current_ypos#23 ← phi( play_move_down::@10/(byte) current_ypos#44 )
(byte) play_lock_current::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte~) play_lock_current::$0 ← (byte) current_ypos#23 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_lock_current::ypos2#0 ← (byte~) play_lock_current::$0
(byte/signed word/word/dword/signed dword~) play_lock_current::$0 ← (byte) current_ypos#23 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_lock_current::ypos2#0 ← (byte/signed word/word/dword/signed dword~) play_lock_current::$0
(byte) play_lock_current::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_lock_current::@1
play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@5
@ -2607,8 +2607,8 @@ play_spawn_current: scope:[play_spawn_current] from main::@29 main::@30 play_mo
(byte) game_over#75 ← phi( main::@29/(byte) game_over#30 main::@30/(byte) game_over#7 play_move_down::@21/(byte) game_over#26 )
(byte) next_piece_idx#17 ← phi( main::@29/(byte) next_piece_idx#32 main::@30/(byte) next_piece_idx#7 play_move_down::@21/(byte) next_piece_idx#29 )
(byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17
(byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) current_piece#5 ← ((byte*)) *((word[]) PIECES#0 + (byte~) play_spawn_current::$0)
(byte/signed word/word/dword/signed dword~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) current_piece#5 ← ((byte*)) *((word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) play_spawn_current::$0)
(byte) current_piece_char#5 ← *((byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0)
(byte) current_orientation#8 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*~) play_spawn_current::$1 ← (byte*) current_piece#5 + (byte) current_orientation#8
@ -2872,8 +2872,8 @@ play_update_score::@2: scope:[play_update_score] from play_update_score
(byte~) play_update_score::$2 ← < (word) lines_bcd#16
(byte~) play_update_score::$3 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) $f0
(byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$3
(byte~) play_update_score::$4 ← (byte) play_update_score::removed#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
(dword) play_update_score::add_bcd#0 ← *((dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4)
(byte/signed word/word/dword/signed dword~) play_update_score::$4 ← (byte) play_update_score::removed#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
(dword) play_update_score::add_bcd#0 ← *((dword[5]) score_add_bcd#0 + (byte/signed word/word/dword/signed dword~) play_update_score::$4)
asm { sed }
(word) lines_bcd#5 ← (word) lines_bcd#16 + (byte) play_update_score::removed#2
(dword) score_bcd#5 ← (dword) score_bcd#15 + (dword) play_update_score::add_bcd#0
@ -2968,8 +2968,8 @@ play_increase_level::@7: scope:[play_increase_level] from play_increase_level::
(byte) current_movedown_slow#56 ← phi( play_increase_level::@3/(byte) current_movedown_slow#69 play_increase_level::@7/(byte) current_movedown_slow#56 )
(byte) level#52 ← phi( play_increase_level::@3/(byte) level#67 play_increase_level::@7/(byte) level#52 )
(byte) play_increase_level::b#2 ← phi( play_increase_level::@3/(byte) play_increase_level::b#0 play_increase_level::@7/(byte) play_increase_level::b#1 )
(byte~) play_increase_level::$4 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_increase_level::b4#0 ← (byte~) play_increase_level::$4
(byte/signed word/word/dword/signed dword~) play_increase_level::$4 ← (byte) play_increase_level::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) play_increase_level::b4#0 ← (byte/signed word/word/dword/signed dword~) play_increase_level::$4
*((dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0)
(byte) play_increase_level::b#1 ← (byte) play_increase_level::b#2 + rangenext(0,4)
(bool~) play_increase_level::$5 ← (byte) play_increase_level::b#1 != rangelast(0,4)
@ -6046,7 +6046,7 @@ SYMBOL TABLE SSA
(byte) next_piece_idx#9
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
(byte*~) play_collision::$0
(byte~) play_collision::$1
(byte/signed word/word/dword/signed dword~) play_collision::$1
(bool~) play_collision::$10
(bool~) play_collision::$11
(bool~) play_collision::$12
@ -6205,7 +6205,7 @@ SYMBOL TABLE SSA
(byte~) play_increase_level::$1
(bool~) play_increase_level::$2
(bool~) play_increase_level::$3
(byte~) play_increase_level::$4
(byte/signed word/word/dword/signed dword~) play_increase_level::$4
(bool~) play_increase_level::$5
(label) play_increase_level::@1
(label) play_increase_level::@2
@ -6224,9 +6224,9 @@ SYMBOL TABLE SSA
(void()) play_init()
(byte~) play_init::$0
(byte/signed word/word/dword/signed dword~) play_init::$1
(byte~) play_init::$2
(byte/signed word/word/dword/signed dword~) play_init::$2
(bool~) play_init::$3
(byte~) play_init::$4
(byte/signed word/word/dword/signed dword~) play_init::$4
(bool~) play_init::$5
(label) play_init::@1
(label) play_init::@2
@ -6251,7 +6251,7 @@ SYMBOL TABLE SSA
(byte*) play_init::pli#1
(byte*) play_init::pli#2
(void()) play_lock_current()
(byte~) play_lock_current::$0
(byte/signed word/word/dword/signed dword~) play_lock_current::$0
(bool~) play_lock_current::$1
(bool~) play_lock_current::$2
(bool~) play_lock_current::$3
@ -6571,7 +6571,7 @@ SYMBOL TABLE SSA
(byte) play_remove_lines::y#7
(byte) play_remove_lines::y#8
(void()) play_spawn_current()
(byte~) play_spawn_current::$0
(byte/signed word/word/dword/signed dword~) play_spawn_current::$0
(byte*~) play_spawn_current::$1
(byte~) play_spawn_current::$2
(bool~) play_spawn_current::$3
@ -6606,7 +6606,7 @@ SYMBOL TABLE SSA
(bool~) play_update_score::$1
(byte~) play_update_score::$2
(byte~) play_update_score::$3
(byte~) play_update_score::$4
(byte/signed word/word/dword/signed dword~) play_update_score::$4
(byte~) play_update_score::$5
(byte~) play_update_score::$6
(bool~) play_update_score::$7
@ -6691,8 +6691,8 @@ SYMBOL TABLE SSA
(byte*~) render_init::$10
(byte*~) render_init::$11
(byte/signed word/word/dword/signed dword~) render_init::$12
(byte~) render_init::$13
(byte~) render_init::$14
(byte/signed word/word/dword/signed dword~) render_init::$13
(byte/signed word/word/dword/signed dword~) render_init::$14
(bool~) render_init::$15
(byte~) render_init::$2
(byte/word/dword~) render_init::$3
@ -6744,7 +6744,7 @@ SYMBOL TABLE SSA
(byte) render_init::vicSelectGfxBank1_toDd001_return#2
(byte) render_init::vicSelectGfxBank1_toDd001_return#3
(void()) render_moving()
(byte~) render_moving::$0
(byte/signed word/word/dword/signed dword~) render_moving::$0
(bool~) render_moving::$1
(byte~) render_moving::$2
(bool~) render_moving::$3
@ -6814,7 +6814,7 @@ SYMBOL TABLE SSA
(word/signed dword/dword/signed word~) render_next::$1
(word/signed dword/dword/signed word~) render_next::$2
(bool~) render_next::$3
(byte~) render_next::$4
(byte/signed word/word/dword/signed dword~) render_next::$4
(byte*~) render_next::$5
(byte*~) render_next::$6
(bool~) render_next::$7
@ -6885,8 +6885,8 @@ SYMBOL TABLE SSA
(void()) render_playfield()
(byte/signed word/word/dword/signed dword~) render_playfield::$0
(byte/signed word/word/dword/signed dword~) render_playfield::$1
(byte~) render_playfield::$2
(byte~) render_playfield::$3
(byte/signed word/word/dword/signed dword~) render_playfield::$2
(byte/signed word/word/dword/signed dword~) render_playfield::$3
(byte/signed word/word/dword/signed dword~) render_playfield::$4
(bool~) render_playfield::$5
(bool~) render_playfield::$6
@ -7398,7 +7398,7 @@ SYMBOL TABLE SSA
(void()) sprites_init()
(byte/signed byte/word/signed word/dword/signed dword~) sprites_init::$0
(byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
(byte~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$3
(bool~) sprites_init::$4
(label) sprites_init::@1
@ -7609,7 +7609,7 @@ Alias (byte) render_playfield::i#0 = (byte/signed word/word/dword/signed dword~)
Alias (byte) render_playfield::l#3 = (byte) render_playfield::l#4
Alias (byte) render_screen_render#23 = (byte) render_screen_render#32
Alias (byte) render_playfield::i#1 = (byte) render_playfield::i#4
Alias (byte) render_moving::ypos2#0 = (byte~) render_moving::$0
Alias (byte) render_moving::ypos2#0 = (byte/signed word/word/dword/signed dword~) render_moving::$0
Alias (byte) render_screen_render#14 = (byte) render_screen_render#24 (byte) render_screen_render#42
Alias (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#3 (byte) render_moving::ypos2#6
Alias (byte) current_xpos#16 = (byte) current_xpos#36 (byte) current_xpos#82
@ -7653,7 +7653,7 @@ Alias (dword) score_bcd#0 = (dword) score_bcd#84 (dword) score_bcd#80 (dword) sc
Alias (byte) level#0 = (byte) level#109 (byte) level#103 (byte) level#96 (byte) level#87 (byte) level#74 (byte) level#66 (byte) level#57 (byte) level#41
Alias (byte) level_bcd#0 = (byte) level_bcd#101 (byte) level_bcd#96 (byte) level_bcd#89 (byte) level_bcd#80 (byte) level_bcd#70 (byte) level_bcd#63 (byte) level_bcd#56 (byte) level_bcd#41
Alias (byte) sprites_init::xpos#0 = (byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
Alias (byte) sprites_init::s2#0 = (byte~) sprites_init::$2
Alias (byte) sprites_init::s2#0 = (byte/signed word/word/dword/signed dword~) sprites_init::$2
Alias (byte) sprites_init::xpos#1 = (byte/signed word/word/dword/signed dword~) sprites_init::$3
Alias (byte*) PLAYFIELD_SPRITES#0 = (byte*) toSpritePtr1_sprite#0 (byte*) toSpritePtr1_sprite#1
Alias (byte) toSpritePtr1_return#0 = (byte) toSpritePtr1_$2#0 (byte) toSpritePtr1_return#2 (byte) toSpritePtr1_return#1 (byte) toSpritePtr1_return#3 (byte~) $6
@ -7676,7 +7676,7 @@ Alias (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#8 (byte) irq_sprite_ypo
Alias (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#8 (byte) irq_sprite_ptr#4
Alias (byte) irq_cnt#0 = (byte) irq_cnt#20 (byte) irq_cnt#19 (byte) irq_cnt#17
Alias (byte) level#13 = (byte) level#28
Alias (byte) play_init::b4#0 = (byte~) play_init::$4
Alias (byte) play_init::b4#0 = (byte/signed word/word/dword/signed dword~) play_init::$4
Alias (byte) current_movedown_slow#16 = (byte) current_movedown_slow#29 (byte) current_movedown_slow#2
Alias (byte) play_move_down::return#0 = (byte) play_move_down::return#4
Alias (byte) play_movement::render#0 = (byte) play_movement::render#4
@ -7844,7 +7844,7 @@ Alias (byte) current_orientation#0 = (byte) current_orientation#62 (byte) curren
Alias (byte) next_piece_idx#0 = (byte) next_piece_idx#46 (byte) next_piece_idx#35
Alias (byte) current_movedown_counter#0 = (byte) current_movedown_counter#35 (byte) current_movedown_counter#27
Alias (byte*) play_collision::piece_gfx#0 = (byte*~) play_collision::$0
Alias (byte) play_collision::ypos2#0 = (byte~) play_collision::$1
Alias (byte) play_collision::ypos2#0 = (byte/signed word/word/dword/signed dword~) play_collision::$1
Alias (byte) play_collision::col#0 = (byte) play_collision::xpos#5
Alias (byte) play_collision::ypos2#10 = (byte) play_collision::ypos2#3 (byte) play_collision::ypos2#5 (byte) play_collision::ypos2#9 (byte) play_collision::ypos2#8 (byte) play_collision::ypos2#7
Alias (byte) play_collision::col#3 = (byte) play_collision::col#8 (byte) play_collision::col#6 (byte) play_collision::col#4 (byte) play_collision::col#5 (byte) play_collision::col#7
@ -7860,7 +7860,7 @@ Alias (byte) play_collision::l#2 = (byte) play_collision::l#3
Alias (byte) play_collision::xpos#7 = (byte) play_collision::xpos#8
Alias (byte*) play_collision::piece_gfx#3 = (byte*) play_collision::piece_gfx#4
Alias (byte) play_collision::i#4 = (byte) play_collision::i#5
Alias (byte) play_lock_current::ypos2#0 = (byte~) play_lock_current::$0
Alias (byte) play_lock_current::ypos2#0 = (byte/signed word/word/dword/signed dword~) play_lock_current::$0
Alias (byte) current_piece_char#17 = (byte) current_piece_char#31
Alias (byte*) play_lock_current::playfield_line#1 = (byte*) play_lock_current::playfield_line#2
Alias (byte) play_lock_current::col#3 = (byte) play_lock_current::col#4
@ -7934,7 +7934,7 @@ Alias (byte) level#21 = (byte) level#90 (byte) level#7
Alias (byte) level_bcd#21 = (byte) level_bcd#7
Alias (byte) level#79 = (byte) level#80
Alias (byte) current_movedown_slow#76 = (byte) current_movedown_slow#77
Alias (byte) play_increase_level::b4#0 = (byte~) play_increase_level::$4
Alias (byte) play_increase_level::b4#0 = (byte/signed word/word/dword/signed dword~) play_increase_level::$4
Alias (byte) level#22 = (byte) level#38 (byte) level#52 (byte) level#8
Alias (byte) current_movedown_slow#11 = (byte) current_movedown_slow#42 (byte) current_movedown_slow#56 (byte) current_movedown_slow#24
Alias (byte) level_bcd#22 = (byte) level_bcd#38 (byte) level_bcd#51 (byte) level_bcd#9
@ -9141,8 +9141,8 @@ if() condition always true - replacing block destination [527] if(true) goto mai
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((const word[]) PIECES#0 + (byte~) render_next::$4)
Eliminating Noop Cast (byte*) current_piece#5 ← ((byte*)) *((const word[]) PIECES#0 + (byte~) play_spawn_current::$0)
Eliminating Noop Cast (byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((const word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) render_next::$4)
Eliminating Noop Cast (byte*) current_piece#5 ← ((byte*)) *((const word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) play_spawn_current::$0)
Successful SSA optimization Pass2NopCastElimination
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
@ -9188,6 +9188,20 @@ Resolved ranged next value play_increase_level::b#1 ← ++ play_increase_level::
Resolved ranged comparison value if(play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@7 to (byte/signed byte/word/signed word/dword/signed dword) 5
Rewriting conditional comparison if((byte) render_moving::ypos2#2>(byte/signed byte/word/signed word/dword/signed dword) 2) goto render_moving::@2
Rewriting conditional comparison if((byte) level#21>(byte/signed byte/word/signed word/dword/signed dword) $1d) goto play_increase_level::@1
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_init::$13 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_init::$14 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_playfield::$2 ← (byte) render_playfield::l#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_next::$4 ← (byte) next_piece_idx#12 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) play_init::$2 ← (byte) play_init::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) play_init::b4#0 ← (byte) play_init::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) play_update_score::$4 ← (byte) play_update_score::removed#0 * (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @5
Culled Empty Block (label) @9
Culled Empty Block (label) keyboard_event_scan::@9
@ -9287,6 +9301,14 @@ Redundant Phi (dword) score_bcd#42 (dword) score_bcd#14
Redundant Phi (byte) level#102 (byte) level#17
Redundant Phi (byte) level_bcd#100 (byte) level_bcd#17
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [82] (byte/signed word/word/dword/signed dword~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [84] (byte/signed word/word/dword/signed dword~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [165] (byte/signed word/word/dword/signed dword~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [166] (byte/signed word/word/dword/signed dword~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2
Inferred type updated to byte in [201] (byte/signed word/word/dword/signed dword~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [287] (byte/signed word/word/dword/signed dword~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [427] (byte/signed word/word/dword/signed dword~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [469] (byte/signed word/word/dword/signed dword~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Inlining constant with var siblings (const byte) keyboard_event_scan::keycode#0
Inlining constant with var siblings (const byte) keyboard_event_scan::row#0

View File

@ -9,8 +9,8 @@ main: scope:[main] from @1
to:main::@1
main::@1: scope:[main] from main main::@1
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
(byte~) main::$0 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((signed word[3]) world#0 + (byte~) main::$0) ← (word/signed word/dword/signed dword) $190
(byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((signed word[3]) world#0 + (byte/signed word/word/dword/signed dword~) main::$0) ← (word/signed word/dword/signed dword) $190
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,2)
(bool~) main::$1 ← (byte) main::i#1 != rangelast(0,2)
if((bool~) main::$1) goto main::@1
@ -35,7 +35,7 @@ SYMBOL TABLE SSA
(label) @begin
(label) @end
(void()) main()
(byte~) main::$0
(byte/signed word/word/dword/signed dword~) main::$0
(bool~) main::$1
(label) main::@1
(label) main::@2
@ -61,6 +61,9 @@ Consolidated array index constant in *(world#0+0)
Successful SSA optimization Pass2ConstantAdditionElimination
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,2)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 3
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inferred type updated to byte in [1] (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const byte) main::i#0
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2ConstantInlining

View File

@ -554,8 +554,8 @@ anim::@29: scope:[anim] from anim::@22
*((signed byte[8]) pps#0 + (byte) anim::i#3) ← *((signed byte*) pp#0)
*((signed byte[8]) xps#0 + (byte) anim::i#3) ← *((signed byte*) xp#0)
*((signed byte[8]) yps#0 + (byte) anim::i#3) ← *((signed byte*) yp#0)
(byte~) anim::$6 ← (byte) anim::i#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) anim::i2#0 ← (byte~) anim::$6
(byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::i#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) anim::i2#0 ← (byte/signed word/word/dword/signed dword~) anim::$6
(byte~) anim::$7 ← ((byte)) *((signed byte*) xp#0)
(byte/word/signed word/dword/signed dword~) anim::$8 ← (byte/word/signed word/dword/signed dword) $80 + (byte~) anim::$7
*((byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte/word/signed word/dword/signed dword~) anim::$8
@ -1694,7 +1694,7 @@ SYMBOL TABLE SSA
(byte/word/signed word/dword/signed dword~) anim::$10
(bool~) anim::$11
(bool~) anim::$2
(byte~) anim::$6
(byte/signed word/word/dword/signed dword~) anim::$6
(byte~) anim::$7
(byte/word/signed word/dword/signed dword~) anim::$8
(byte~) anim::$9
@ -2715,7 +2715,7 @@ Alias (signed byte) sy#15 = (signed byte) sy#23 (signed byte) sy#29 (signed byte
Alias (byte*) print_screen#30 = (byte*) print_screen#43 (byte*) print_screen#45 (byte*) print_screen#62
Alias (signed byte*) COSH#12 = (signed byte*) COSH#16 (signed byte*) COSH#18 (signed byte*) COSH#14
Alias (signed byte*) COSQ#12 = (signed byte*) COSQ#16 (signed byte*) COSQ#18 (signed byte*) COSQ#14
Alias (byte) anim::i2#0 = (byte~) anim::$6
Alias (byte) anim::i2#0 = (byte/signed word/word/dword/signed dword~) anim::$6
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 (byte*) print_line_cursor#40 (byte*) print_line_cursor#39 (byte*) print_line_cursor#38 (byte*) print_line_cursor#37 (byte*) print_line_cursor#36 (byte*) print_line_cursor#35 (byte*) print_line_cursor#34 (byte*) print_line_cursor#33 (byte*) print_line_cursor#32 (byte*) print_line_cursor#31 (byte*) print_line_cursor#30 (byte*) print_line_cursor#29
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#5 (byte*) print_char_cursor#40 (byte*) print_char_cursor#39 (byte*) print_char_cursor#38 (byte*) print_char_cursor#37 (byte*) print_char_cursor#36 (byte*) print_char_cursor#35 (byte*) print_char_cursor#34 (byte*) print_char_cursor#33 (byte*) print_char_cursor#32 (byte*) print_char_cursor#31 (byte*) print_char_cursor#30 (byte*) print_char_cursor#29
Alias (byte*) print_str_at::at#1 = (byte*~) debug_print_init::$3
@ -3254,6 +3254,8 @@ Resolved ranged next value debug_print::i#1 ← ++ debug_print::i#2 to ++
Resolved ranged comparison value if(debug_print::i#1!=rangelast(0,7)) goto debug_print::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value sprites_init::i#1 ← ++ sprites_init::i#2 to ++
Resolved ranged comparison value if(sprites_init::i#1!=rangelast(0,7)) goto sprites_init::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte) anim::i2#0 ← (byte) anim::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) print_sbyte_at::@6
Culled Empty Block (label) @16

View File

@ -511,8 +511,8 @@ plot_chargen: scope:[plot_chargen] from main::@16 main::@3
(byte) plot_chargen::ch#2 ← phi( main::@16/(byte) plot_chargen::ch#1 main::@3/(byte) plot_chargen::ch#0 )
asm { sei }
(word~) plot_chargen::$0 ← ((word)) (byte) plot_chargen::ch#2
(word~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3
(byte*~) plot_chargen::$2 ← (byte*) CHARGEN#0 + (word~) plot_chargen::$1
(word/signed dword/dword~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*~) plot_chargen::$2 ← (byte*) CHARGEN#0 + (word/signed dword/dword~) plot_chargen::$1
(byte*) plot_chargen::chargen#0 ← (byte*~) plot_chargen::$2
(bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) plot_chargen::$4 ← ! (bool~) plot_chargen::$3
@ -571,8 +571,8 @@ plot_chargen::@5: scope:[plot_chargen] from plot_chargen::@4 plot_chargen::@6
(byte) plot_chargen::c#2 ← phi( plot_chargen::@4/(byte) plot_chargen::c#0 plot_chargen::@6/(byte) plot_chargen::c#1 )
*((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2
(byte*) plot_chargen::sc#1 ← ++ (byte*) plot_chargen::sc#3
(byte~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) plot_chargen::bits#1 ← (byte~) plot_chargen::$13
(byte/signed word/word/dword/signed dword~) plot_chargen::$13 ← (byte) plot_chargen::bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) plot_chargen::bits#1 ← (byte/signed word/word/dword/signed dword~) plot_chargen::$13
(byte) plot_chargen::x#1 ← (byte) plot_chargen::x#2 + rangenext(0,7)
(bool~) plot_chargen::$14 ← (byte) plot_chargen::x#1 != rangelast(0,7)
if((bool~) plot_chargen::$14) goto plot_chargen::@4
@ -1180,11 +1180,11 @@ SYMBOL TABLE SSA
(word) mul8u::return#4
(void()) plot_chargen((byte) plot_chargen::pos , (byte) plot_chargen::ch , (byte) plot_chargen::shift)
(word~) plot_chargen::$0
(word~) plot_chargen::$1
(word/signed dword/dword~) plot_chargen::$1
(byte~) plot_chargen::$10
(bool~) plot_chargen::$11
(bool~) plot_chargen::$12
(byte~) plot_chargen::$13
(byte/signed word/word/dword/signed dword~) plot_chargen::$13
(bool~) plot_chargen::$14
(byte*~) plot_chargen::$15
(bool~) plot_chargen::$16
@ -1348,7 +1348,7 @@ Alias (byte*) plot_chargen::chargen#5 = (byte*) plot_chargen::chargen#6
Alias (byte*) plot_chargen::sc#0 = (byte*~) plot_chargen::$8
Alias (byte) plot_chargen::pos#3 = (byte) plot_chargen::pos#4
Alias (byte*) plot_chargen::chargen#1 = (byte*~) plot_chargen::$9
Alias (byte) plot_chargen::bits#1 = (byte~) plot_chargen::$13
Alias (byte) plot_chargen::bits#1 = (byte/signed word/word/dword/signed dword~) plot_chargen::$13
Alias (byte*) plot_chargen::sc#5 = (byte*) plot_chargen::sc#6
Alias (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#4
Alias (byte) plot_chargen::x#3 = (byte) plot_chargen::x#4
@ -1617,6 +1617,9 @@ Resolved ranged next value plot_chargen::x#1 ← ++ plot_chargen::x#2 to ++
Resolved ranged comparison value if(plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value plot_chargen::y#1 ← ++ plot_chargen::y#2 to ++
Resolved ranged comparison value if(plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@3 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (word/signed dword/dword~) plot_chargen::$1 ← (word~) plot_chargen::$0 * (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) mul8u::@3
Culled Empty Block (label) @9
Culled Empty Block (label) @13
@ -1631,6 +1634,7 @@ Self Phi Eliminated (byte*) plot_chargen::chargen#3
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#5
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to word in [90] (word/signed dword/dword~) plot_chargen::$1 ← (word~) plot_chargen::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3
Inlining constant with var siblings (const word) mul8u::res#0
Inlining constant with var siblings (const word) mul8u::mb#0
Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0

View File

@ -245,8 +245,8 @@ fire::@2: scope:[fire] from fire::@1
(byte~) fire::$9 ← *((byte*) fire::buffer#5 + (byte/signed byte/word/signed word/dword/signed dword~) fire::$7) + *((byte*) fire::buffer#5 + (byte/signed byte/word/signed word/dword/signed dword~) fire::$8)
(byte~) fire::$10 ← (byte~) fire::$9 + *((byte*) fire::buffer#5 + (byte/signed byte/word/signed word/dword/signed dword) $28)
(byte~) fire::$11 ← (byte~) fire::$10 + *((byte*) fire::buffer#5 + (byte/signed byte/word/signed word/dword/signed dword) $29)
(byte~) fire::$12 ← (byte~) fire::$11 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) fire::c#0 ← (byte~) fire::$12
(byte/signed word/word/dword/signed dword~) fire::$12 ← (byte~) fire::$11 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) fire::c#0 ← (byte/signed word/word/dword/signed dword~) fire::$12
(bool~) fire::$13 ← (byte) fire::c#0 > (byte/signed byte/word/signed word/dword/signed dword) 2
(bool~) fire::$14 ← ! (bool~) fire::$13
if((bool~) fire::$14) goto fire::@4
@ -296,8 +296,8 @@ fire::@15: scope:[fire] from fire::@10
(byte*) fire::buffer#8 ← phi( fire::@10/(byte*) fire::buffer#10 )
(byte) sid_rnd::return#4 ← phi( fire::@10/(byte) sid_rnd::return#2 )
(byte~) fire::$18 ← (byte) sid_rnd::return#4
(byte~) fire::$19 ← (byte~) fire::$18 >> (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword~) fire::$20 ← (byte/signed byte/word/signed word/dword/signed dword) $30 + (byte~) fire::$19
(byte/signed word/word/dword/signed dword~) fire::$19 ← (byte~) fire::$18 / (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/signed word/word/dword/signed dword~) fire::$20 ← (byte/signed byte/word/signed word/dword/signed dword) $30 + (byte/signed word/word/dword/signed dword~) fire::$19
*((byte*) fire::buffer#8) ← (byte/signed word/word/dword/signed dword~) fire::$20
*((byte*) fire::screen#5) ← *((byte*) fire::buffer#8)
(byte*) fire::screen#3 ← ++ (byte*) fire::screen#5
@ -670,14 +670,14 @@ SYMBOL TABLE SSA
(byte*~) fire::$1
(byte~) fire::$10
(byte~) fire::$11
(byte~) fire::$12
(byte/signed word/word/dword/signed dword~) fire::$12
(bool~) fire::$13
(bool~) fire::$14
(word/signed word/dword/signed dword~) fire::$15
(byte*~) fire::$16
(bool~) fire::$17
(byte~) fire::$18
(byte~) fire::$19
(byte/signed word/word/dword/signed dword~) fire::$19
(word/signed word/dword/signed dword~) fire::$2
(byte/signed word/word/dword/signed dword~) fire::$20
(byte*~) fire::$3
@ -939,7 +939,7 @@ Alias (byte*) fire::screen#0 = (byte*) fire::screenbase#2
Alias (byte*) fire::buffer#4 = (byte*) fire::buffer#5 (byte*) fire::buffer#9
Alias (byte*) fire::screen#6 = (byte*) fire::screen#9 (byte*) fire::screen#7
Alias (byte*) fire::screenbase#3 = (byte*) fire::screenbase#6 (byte*) fire::screenbase#4 (byte*) fire::screenbase#7
Alias (byte) fire::c#0 = (byte~) fire::$12 (byte) fire::c#3
Alias (byte) fire::c#0 = (byte/signed word/word/dword/signed dword~) fire::$12 (byte) fire::c#3
Alias (byte*) fire::screen#1 = (byte*~) fire::$1
Alias (byte*) fire::buffer#1 = (byte*~) fire::$3
Alias (byte*) fire::buffer#10 = (byte*) fire::buffer#7 (byte*) fire::buffer#8
@ -1167,6 +1167,9 @@ Resolved ranged next value fillscreen::i#1 ← ++ fillscreen::i#2 to ++
Resolved ranged comparison value if(fillscreen::i#1!=rangelast(0,$3e7)) goto fillscreen::@1 to (word/signed word/dword/signed dword) $3e8
Rewriting conditional comparison if((byte) fire::c#0<=(byte/signed byte/word/signed word/dword/signed dword) 2) goto fire::@4
Rewriting conditional comparison if((byte) makecharset::bc#1<=(byte/signed byte/word/signed word/dword/signed dword) $3f) goto makecharset::@8
Rewriting division to use shift (byte) fire::c#0 ← (byte~) fire::$11 / (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) fire::$19 ← (byte~) fire::$18 / (byte/signed byte/word/signed word/dword/signed dword) $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @6
Culled Empty Block (label) main::@1
@ -1183,6 +1186,7 @@ Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) makecharset::c#5 (byte) makecharset::c#7
Redundant Phi (byte*) makecharset::charset#9 (byte*) makecharset::charset#10
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [38] (byte/signed word/word/dword/signed dword~) fire::$19 ← (byte~) fire::$18 >> (byte/signed byte/word/signed word/dword/signed dword) 4
Self Phi Eliminated (byte*) makecharset::charset#10
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) makecharset::charset#10 (const byte*) makecharset::charset#0

View File

@ -398,8 +398,8 @@ init::@1: scope:[init] from init::@1 init::@5
(byte*~) init::$4 ← (byte*) SPRITE#0 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte~) init::$5 ← ((byte)) (byte*~) init::$4
*((byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte~) init::$5
(byte~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$6) ← (word) init::xp#2
(byte/signed word/word/dword/signed dword~) init::$6 ← (byte) init::sx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte/signed word/word/dword/signed dword~) init::$6) ← (word) init::xp#2
(word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) init::sx#1 ← (byte) init::sx#2 + rangenext(0,init::$3)
(bool~) init::$7 ← (byte) init::sx#1 != rangelast(0,init::$3)
@ -921,7 +921,7 @@ SYMBOL TABLE SSA
(byte/signed word/word/dword/signed dword~) init::$3
(byte*~) init::$4
(byte~) init::$5
(byte~) init::$6
(byte/signed word/word/dword/signed dword~) init::$6
(bool~) init::$7
(bool~) init::$8
(label) init::@1
@ -1736,6 +1736,8 @@ Resolved ranged next value loop::sy#1 ← ++ loop::sy#2 to ++
Resolved ranged comparison value if(loop::sy#1!=rangelast(0,loop::$1)) goto loop::@10 to (const byte/signed word/word/dword/signed dword) loop::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value loop::ss#1 ← ++ loop::ss#6 to ++
Resolved ranged comparison value if(loop::ss#1!=rangelast(0,loop::$6)) goto loop::@18 to (const byte/signed word/word/dword/signed dword) loop::$6+(byte/signed byte/word/signed word/dword/signed dword) 1
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) init::$6 ← (byte) init::sx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) plexInit::@3
Culled Empty Block (label) plexSort::@5
@ -1766,6 +1768,7 @@ Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) plexSort::$6 [18] if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) $ff) goto plexSort::@8
Simple Condition (bool~) plexSort::$7 [94] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3
Successful SSA optimization Pass2ConditionalJumpSimplification
Inferred type updated to byte in [55] (byte/signed word/word/dword/signed dword~) init::$6 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#44
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) PLEX_SCREEN_PTR#44 (const byte*) PLEX_SCREEN_PTR#1

View File

@ -540,9 +540,9 @@ makecharset::@6: scope:[makecharset] from makecharset::@4
(byte) makecharset::b#3 ← phi( makecharset::@4/(byte) makecharset::b#5 )
(byte) makecharset::i#2 ← phi( makecharset::@4/(byte) makecharset::i#3 )
(word) makecharset::c#3 ← phi( makecharset::@4/(word) makecharset::c#6 )
(word~) makecharset::$8 ← (word) makecharset::c#3 << (byte/signed byte/word/signed word/dword/signed dword) 3
(word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#2
*((byte*) makecharset::charset#1 + (word~) makecharset::$9) ← (byte) makecharset::b#3
(word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#3 * (byte/signed byte/word/signed word/dword/signed dword) 8
(word/signed dword/dword~) makecharset::$9 ← (word/signed dword/dword~) makecharset::$8 + (byte) makecharset::i#2
*((byte*) makecharset::charset#1 + (word/signed dword/dword~) makecharset::$9) ← (byte) makecharset::b#3
(byte) makecharset::i#1 ← ++ (byte) makecharset::i#2
(bool~) makecharset::$10 ← (byte) makecharset::i#1 < (byte/signed byte/word/signed word/dword/signed dword) 8
if((bool~) makecharset::$10) goto makecharset::@2
@ -1059,8 +1059,8 @@ SYMBOL TABLE SSA
(bool~) makecharset::$5
(bool~) makecharset::$6
(bool~) makecharset::$7
(word~) makecharset::$8
(word~) makecharset::$9
(word/signed dword/dword~) makecharset::$8
(word/signed dword/dword~) makecharset::$9
(label) makecharset::@1
(label) makecharset::@11
(label) makecharset::@12
@ -1619,6 +1619,8 @@ Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value main::col#1 ← ++ main::col#2 to ++
Resolved ranged comparison value if(main::col#1!=rangelast(COLS#0,main::$2)) goto main::@1 to (byte*)(const byte*) main::$2+(byte/signed byte/word/signed word/dword/signed dword) 1
Rewriting multiplication to use shift (word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#12 * (byte/signed byte/word/signed word/dword/signed dword) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @16
Culled Empty Block (label) print_cls::@2
@ -1653,6 +1655,8 @@ Redundant Phi (byte*) makecharset::charset#6 (byte*) makecharset::charset#7
Redundant Phi (byte*) print_line_cursor#39 (byte*) print_line_cursor#40
Redundant Phi (byte*) print_char_cursor#44 (byte*) print_char_cursor#45
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to word in [75] (word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3
Inferred type updated to word in [76] (word/signed dword/dword~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
Successful SSA optimization PassNEliminateUnusedVars
Self Phi Eliminated (byte*) makecharset::charset#7
Successful SSA optimization Pass2SelfPhiElimination

View File

@ -596,9 +596,9 @@ makecharset::@6: scope:[makecharset] from makecharset::@4
(byte) makecharset::b#3 ← phi( makecharset::@4/(byte) makecharset::b#5 )
(byte) makecharset::i#2 ← phi( makecharset::@4/(byte) makecharset::i#3 )
(word) makecharset::c#3 ← phi( makecharset::@4/(word) makecharset::c#6 )
(word~) makecharset::$8 ← (word) makecharset::c#3 << (byte/signed byte/word/signed word/dword/signed dword) 3
(word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#2
*((byte*) makecharset::charset#1 + (word~) makecharset::$9) ← (byte) makecharset::b#3
(word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#3 * (byte/signed byte/word/signed word/dword/signed dword) 8
(word/signed dword/dword~) makecharset::$9 ← (word/signed dword/dword~) makecharset::$8 + (byte) makecharset::i#2
*((byte*) makecharset::charset#1 + (word/signed dword/dword~) makecharset::$9) ← (byte) makecharset::b#3
(byte) makecharset::i#1 ← ++ (byte) makecharset::i#2
(bool~) makecharset::$10 ← (byte) makecharset::i#1 < (byte/signed byte/word/signed word/dword/signed dword) 8
if((bool~) makecharset::$10) goto makecharset::@2
@ -1168,8 +1168,8 @@ SYMBOL TABLE SSA
(bool~) makecharset::$5
(bool~) makecharset::$6
(bool~) makecharset::$7
(word~) makecharset::$8
(word~) makecharset::$9
(word/signed dword/dword~) makecharset::$8
(word/signed dword/dword~) makecharset::$9
(label) makecharset::@1
(label) makecharset::@11
(label) makecharset::@12
@ -1753,6 +1753,8 @@ Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value main::col#1 ← ++ main::col#2 to ++
Resolved ranged comparison value if(main::col#1!=rangelast(COLS#0,main::$1)) goto main::@1 to (byte*)(const byte*) main::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Rewriting multiplication to use shift (word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#12 * (byte/signed byte/word/signed word/dword/signed dword) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @16
Culled Empty Block (label) print_cls::@2
@ -1787,6 +1789,8 @@ Redundant Phi (byte*) makecharset::charset#6 (byte*) makecharset::charset#7
Redundant Phi (byte*) print_line_cursor#40 (byte*) print_line_cursor#42
Redundant Phi (byte*) print_char_cursor#45 (byte*) print_char_cursor#47
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to word in [76] (word/signed dword/dword~) makecharset::$8 ← (word) makecharset::c#2 << (byte/signed byte/word/signed word/dword/signed dword) 3
Inferred type updated to word in [77] (word/signed dword/dword~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
Successful SSA optimization PassNEliminateUnusedVars
Self Phi Eliminated (byte*) makecharset::charset#7
Successful SSA optimization Pass2SelfPhiElimination

View File

@ -95,7 +95,7 @@ anim: {
jsr mulf8s_prepared
asl _12
rol _12+1
// signed fixed[8.8]
// signed fixed[8.8]
lda yr
clc
adc _12

View File

@ -422,8 +422,8 @@ anim::@20: scope:[anim] from anim::@17
(signed byte) anim::y#1 ← phi( anim::@17/(signed byte) anim::y#3 )
(signed word) mulf8s_prepared::return#7 ← phi( anim::@17/(signed word) mulf8s_prepared::return#2 )
(signed word~) anim::$4 ← (signed word) mulf8s_prepared::return#7
(signed word~) anim::$5 ← (signed word~) anim::$4 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) anim::xr#0 ← (signed word~) anim::$5
(signed word/signed dword~) anim::$5 ← (signed word~) anim::$4 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) anim::xr#0 ← (signed word/signed dword~) anim::$5
(signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#1
call mulf8s_prepared
(signed word) mulf8s_prepared::return#3 ← (signed word) mulf8s_prepared::return#1
@ -440,8 +440,8 @@ anim::@21: scope:[anim] from anim::@20
(signed byte) anim::sin_a#1 ← phi( anim::@20/(signed byte) anim::sin_a#2 )
(signed word) mulf8s_prepared::return#8 ← phi( anim::@20/(signed word) mulf8s_prepared::return#3 )
(signed word~) anim::$6 ← (signed word) mulf8s_prepared::return#8
(signed word~) anim::$7 ← (signed word~) anim::$6 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) anim::yr#0 ← (signed word~) anim::$7
(signed word/signed dword~) anim::$7 ← (signed word~) anim::$6 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) anim::yr#0 ← (signed word/signed dword~) anim::$7
(signed byte) anim::mulf8s_prepare2_a#0 ← (signed byte) anim::sin_a#1
to:anim::mulf8s_prepare2
anim::mulf8s_prepare2: scope:[anim] from anim::@21
@ -499,8 +499,8 @@ anim::@23: scope:[anim] from anim::@18
(signed word) anim::xr#2 ← phi( anim::@18/(signed word) anim::xr#4 )
(signed word) mulf8s_prepared::return#9 ← phi( anim::@18/(signed word) mulf8s_prepared::return#4 )
(signed word~) anim::$9 ← (signed word) mulf8s_prepared::return#9
(signed word~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) anim::xr#1 ← (signed word) anim::xr#2 - (signed word~) anim::$10
(signed word/signed dword~) anim::$10 ← (signed word~) anim::$9 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) anim::xr#1 ← (signed word) anim::xr#2 - (signed word/signed dword~) anim::$10
(signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#2
call mulf8s_prepared
(signed word) mulf8s_prepared::return#5 ← (signed word) mulf8s_prepared::return#1
@ -516,15 +516,15 @@ anim::@24: scope:[anim] from anim::@23
(signed word) anim::yr#2 ← phi( anim::@23/(signed word) anim::yr#4 )
(signed word) mulf8s_prepared::return#10 ← phi( anim::@23/(signed word) mulf8s_prepared::return#5 )
(signed word~) anim::$11 ← (signed word) mulf8s_prepared::return#10
(signed word~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) anim::yr#1 ← (signed word) anim::yr#2 + (signed word~) anim::$12
(signed word/signed dword~) anim::$12 ← (signed word~) anim::$11 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) anim::yr#1 ← (signed word) anim::yr#2 + (signed word/signed dword~) anim::$12
(byte~) anim::$13 ← > (signed word) anim::xr#3
(signed byte~) anim::$14 ← ((signed byte)) (byte~) anim::$13
(signed word/signed byte/signed dword~) anim::$15 ← (signed byte~) anim::$14 + (byte/signed byte/word/signed word/dword/signed dword) $18
(signed word/signed dword~) anim::$16 ← (signed word/signed byte/signed dword~) anim::$15 + (byte/word/signed word/dword/signed dword) $95
(signed word) anim::xpos#0 ← (signed word/signed dword~) anim::$16
(byte~) anim::$17 ← (byte) anim::sprite_msb#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) anim::sprite_msb#1 ← (byte~) anim::$17
(byte/signed word/word/dword/signed dword~) anim::$17 ← (byte) anim::sprite_msb#3 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) anim::sprite_msb#1 ← (byte/signed word/word/dword/signed dword~) anim::$17
(byte~) anim::$18 ← > (signed word) anim::xpos#0
(bool~) anim::$19 ← (byte~) anim::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) anim::$20 ← ! (bool~) anim::$19
@ -543,8 +543,8 @@ anim::@11: scope:[anim] from anim::@12 anim::@24
(byte/signed word/word/dword/signed dword~) anim::$22 ← (byte~) anim::$21 + (byte/signed byte/word/signed word/dword/signed dword) $59
(byte/signed word/word/dword/signed dword~) anim::$23 ← (byte/signed word/word/dword/signed dword~) anim::$22 + (byte/signed byte/word/signed word/dword/signed dword) $33
(byte) anim::ypos#0 ← (byte/signed word/word/dword/signed dword~) anim::$23
(byte~) anim::$24 ← (byte) anim::i#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) anim::i2#0 ← (byte~) anim::$24
(byte/signed word/word/dword/signed dword~) anim::$24 ← (byte) anim::i#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) anim::i2#0 ← (byte/signed word/word/dword/signed dword~) anim::$24
(byte~) anim::$25 ← < (signed word) anim::xpos#1
*((byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25
*((byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0
@ -796,14 +796,14 @@ SYMBOL TABLE SSA
(void()) anim()
(bool~) anim::$0
(signed byte~) anim::$1
(signed word~) anim::$10
(signed word/signed dword~) anim::$10
(signed word~) anim::$11
(signed word~) anim::$12
(signed word/signed dword~) anim::$12
(byte~) anim::$13
(signed byte~) anim::$14
(signed word/signed byte/signed dword~) anim::$15
(signed word/signed dword~) anim::$16
(byte~) anim::$17
(byte/signed word/word/dword/signed dword~) anim::$17
(byte~) anim::$18
(bool~) anim::$19
(signed byte~) anim::$2
@ -811,13 +811,13 @@ SYMBOL TABLE SSA
(byte~) anim::$21
(byte/signed word/word/dword/signed dword~) anim::$22
(byte/signed word/word/dword/signed dword~) anim::$23
(byte~) anim::$24
(byte/signed word/word/dword/signed dword~) anim::$24
(byte~) anim::$25
(bool~) anim::$26
(signed word~) anim::$4
(signed word~) anim::$5
(signed word/signed dword~) anim::$5
(signed word~) anim::$6
(signed word~) anim::$7
(signed word/signed dword~) anim::$7
(signed word~) anim::$9
(label) anim::@1
(label) anim::@10
@ -1225,17 +1225,17 @@ Alias (byte) anim::angle#11 = (byte) anim::angle#19 (byte) anim::angle#20 (byte)
Alias (byte*) SIN#11 = (byte*) SIN#23 (byte*) SIN#24 (byte*) SIN#22 (byte*) SIN#21 (byte*) SIN#20 (byte*) SIN#19 (byte*) SIN#18 (byte*) SIN#17 (byte*) SIN#15 (byte*) SIN#14 (byte*) SIN#12
Alias (byte) mulf8u_prepare::a#0 = (byte) anim::mulf8s_prepare1_$0#0
Alias (signed word) mulf8s_prepared::return#2 = (signed word) mulf8s_prepared::return#7
Alias (signed word) anim::xr#0 = (signed word~) anim::$5 (signed word) anim::xr#7 (signed word) anim::xr#6 (signed word) anim::xr#5 (signed word) anim::xr#4 (signed word) anim::xr#2
Alias (signed word) anim::xr#0 = (signed word/signed dword~) anim::$5 (signed word) anim::xr#7 (signed word) anim::xr#6 (signed word) anim::xr#5 (signed word) anim::xr#4 (signed word) anim::xr#2
Alias (signed word) mulf8s_prepared::return#3 = (signed word) mulf8s_prepared::return#8
Alias (signed word) anim::yr#0 = (signed word~) anim::$7 (signed word) anim::yr#8 (signed word) anim::yr#7 (signed word) anim::yr#6 (signed word) anim::yr#4 (signed word) anim::yr#2
Alias (signed word) anim::yr#0 = (signed word/signed dword~) anim::$7 (signed word) anim::yr#8 (signed word) anim::yr#7 (signed word) anim::yr#6 (signed word) anim::yr#4 (signed word) anim::yr#2
Alias (byte) mulf8u_prepare::a#1 = (byte) anim::mulf8s_prepare2_$0#0
Alias (signed word) mulf8s_prepared::return#4 = (signed word) mulf8s_prepared::return#9
Alias (signed word) mulf8s_prepared::return#10 = (signed word) mulf8s_prepared::return#5
Alias (signed word) anim::xr#1 = (signed word) anim::xr#3
Alias (signed word) anim::xpos#0 = (signed word/signed dword~) anim::$16 (signed word) anim::xpos#2
Alias (byte) anim::sprite_msb#1 = (byte~) anim::$17 (byte) anim::sprite_msb#4
Alias (byte) anim::sprite_msb#1 = (byte/signed word/word/dword/signed dword~) anim::$17 (byte) anim::sprite_msb#4
Alias (byte) anim::ypos#0 = (byte/signed word/word/dword/signed dword~) anim::$23
Alias (byte) anim::i2#0 = (byte~) anim::$24
Alias (byte) anim::i2#0 = (byte/signed word/word/dword/signed dword~) anim::$24
Alias (signed word) anim::yr#1 = (signed word) anim::yr#5
Alias (byte) anim::sprite_msb#5 = (byte) anim::sprite_msb#7
Alias (byte) anim::angle#3 = (byte) anim::angle#5
@ -1438,6 +1438,13 @@ Resolved ranged next value init::i#1 ← ++ init::i#2 to ++
Resolved ranged comparison value if(init::i#1!=rangelast(0,7)) goto init::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value anim::i#1 ← ++ anim::i#10 to ++
Resolved ranged comparison value if(anim::i#1!=rangelast(0,7)) goto anim::@10 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (signed word) anim::xr#0 ← (signed word~) anim::$4 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (signed word) anim::yr#0 ← (signed word~) anim::$6 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (signed word/signed dword~) anim::$10 ← (signed word~) anim::$9 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (signed word/signed dword~) anim::$12 ← (signed word~) anim::$11 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting division to use shift (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) anim::i2#0 ← (byte) anim::i#10 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) mulf_init::@4
Culled Empty Block (label) @15
@ -1453,6 +1460,8 @@ Self Phi Eliminated (byte*) SIN#3
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) SIN#3 (const byte*) SIN#0
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to signed word in [85] (signed word/signed dword~) anim::$10 ← (signed word~) anim::$9 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to signed word in [91] (signed word/signed dword~) anim::$12 ← (signed word~) anim::$11 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const word) mulf_init::sqr#0
Inlining constant with var siblings (const byte) mulf_init::x_2#0
Inlining constant with var siblings (const byte) mulf_init::c#0
@ -2477,7 +2486,7 @@ anim: {
rol
sta _12+1
//SEG83 [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 -- vwsz1=vwsz2_plus_vwsz3
// signed fixed[8.8]
// signed fixed[8.8]
lda yr
clc
adc _12
@ -3493,7 +3502,7 @@ anim: {
asl _12
rol _12+1
//SEG83 [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 -- vwsz1=vwsz1_plus_vwsz2
// signed fixed[8.8]
// signed fixed[8.8]
lda yr
clc
adc _12
@ -4596,7 +4605,7 @@ anim: {
asl _12
rol _12+1
//SEG83 [42] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 -- vwsz1=vwsz1_plus_vwsz2
// signed fixed[8.8]
// signed fixed[8.8]
lda yr
clc
adc _12

View File

@ -140,8 +140,8 @@ scroll_bit: scope:[scroll_bit] from scroll_soft::@2
(byte*) current_chargen#28 ← phi( scroll_soft::@2/(byte*) current_chargen#16 )
(byte*) nxt#29 ← phi( scroll_soft::@2/(byte*) nxt#22 )
(byte) current_bit#13 ← phi( scroll_soft::@2/(byte) current_bit#18 )
(byte~) scroll_bit::$0 ← (byte) current_bit#13 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) current_bit#5 ← (byte~) scroll_bit::$0
(byte/signed word/word/dword/signed dword~) scroll_bit::$0 ← (byte) current_bit#13 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) current_bit#5 ← (byte/signed word/word/dword/signed dword~) scroll_bit::$0
(bool~) scroll_bit::$1 ← (byte) current_bit#5 == (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) scroll_bit::$2 ← ! (bool~) scroll_bit::$1
if((bool~) scroll_bit::$2) goto scroll_bit::@1
@ -174,8 +174,8 @@ scroll_bit::@8: scope:[scroll_bit] from scroll_bit::@2
(byte~) scroll_bit::$6 ← (byte) next_char::return#3
(byte*) nxt#4 ← (byte*) nxt#15
(word) scroll_bit::c#0 ← ((word)) (byte~) scroll_bit::$6
(word~) scroll_bit::$7 ← (word) scroll_bit::c#0 << (byte/signed byte/word/signed word/dword/signed dword) 3
(byte*~) scroll_bit::$8 ← (byte*) CHARGEN#0 + (word~) scroll_bit::$7
(word/signed dword/dword~) scroll_bit::$7 ← (word) scroll_bit::c#0 * (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*~) scroll_bit::$8 ← (byte*) CHARGEN#0 + (word/signed dword/dword~) scroll_bit::$7
(byte*) current_chargen#5 ← (byte*~) scroll_bit::$8
(byte) current_bit#6 ← (byte/word/signed word/dword/signed dword) $80
to:scroll_bit::@1
@ -556,7 +556,7 @@ SYMBOL TABLE SSA
(byte) scroll#8
(byte) scroll#9
(void()) scroll_bit()
(byte~) scroll_bit::$0
(byte/signed word/word/dword/signed dword~) scroll_bit::$0
(bool~) scroll_bit::$1
(bool~) scroll_bit::$10
(bool~) scroll_bit::$11
@ -567,7 +567,7 @@ SYMBOL TABLE SSA
(byte*~) scroll_bit::$4
(byte*~) scroll_bit::$5
(byte~) scroll_bit::$6
(word~) scroll_bit::$7
(word/signed dword/dword~) scroll_bit::$7
(byte*~) scroll_bit::$8
(byte~) scroll_bit::$9
(label) scroll_bit::@1
@ -685,7 +685,7 @@ Alias (byte*) nxt#14 = (byte*) nxt#23 (byte*) nxt#3
Alias (byte*) current_chargen#11 = (byte*) current_chargen#17 (byte*) current_chargen#3
Alias (byte) scroll#15 = (byte) scroll#19 (byte) scroll#2 (byte) scroll#17
Alias (byte*) CHARGEN#0 = (byte*) current_chargen#4 (byte*) current_chargen#26 (byte*) current_chargen#21
Alias (byte) current_bit#5 = (byte~) scroll_bit::$0
Alias (byte) current_bit#5 = (byte/signed word/word/dword/signed dword~) scroll_bit::$0
Alias (byte*) current_chargen#19 = (byte*) current_chargen#24
Alias (byte) current_bit#21 = (byte) current_bit#26
Alias (byte*) nxt#36 = (byte*) nxt#38
@ -859,6 +859,9 @@ Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value scroll_bit::r#1 ← ++ scroll_bit::r#2 to ++
Resolved ranged comparison value if(scroll_bit::r#1!=rangelast(0,7)) goto scroll_bit::@3 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting division to use shift (byte) current_bit#5 ← (byte) current_bit#29 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (word/signed dword/dword~) scroll_bit::$7 ← (word) scroll_bit::c#0 * (byte/signed byte/word/signed word/dword/signed dword) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@1
Culled Empty Block (label) @1
@ -869,6 +872,7 @@ Culled Empty Block (label) @7
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte) scroll_hard::i#2 = (byte~) scroll_hard::$4 (byte~) scroll_hard::$9 (byte~) scroll_hard::$14 (byte~) scroll_hard::$19 (byte~) scroll_hard::$24 (byte~) scroll_hard::$29 (byte~) scroll_hard::$34 (byte~) scroll_hard::$39
Successful SSA optimization Pass2AliasElimination
Inferred type updated to word in [23] (word/signed dword/dword~) scroll_bit::$7 ← (word) scroll_bit::c#0 << (byte/signed byte/word/signed word/dword/signed dword) 3
Inlining constant with var siblings (const byte) scroll_bit::r#0
Inlining constant with var siblings (const byte) scroll_bit::b#0
Inlining constant with var siblings (const byte) scroll_bit::b#1

View File

@ -751,8 +751,8 @@ render_logo: scope:[render_logo] from loop::@6
(byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7
(byte~) render_logo::$2 ← (byte) VIC_MCM#0 | (byte~) render_logo::$1
*((byte*) D016#0) ← (byte~) render_logo::$2
(signed word~) render_logo::$3 ← (signed word) render_logo::xpos#1 >> (byte/signed byte/word/signed word/dword/signed dword) 3
(signed byte~) render_logo::$4 ← ((signed byte)) (signed word~) render_logo::$3
(signed word/signed dword~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (byte/signed byte/word/signed word/dword/signed dword) 8
(signed byte~) render_logo::$4 ← ((signed byte)) (signed word/signed dword~) render_logo::$3
(signed byte) render_logo::x_char#0 ← (signed byte~) render_logo::$4
(byte) render_logo::line#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) render_logo::$5 ← (signed word) render_logo::xpos#1 < (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1500,7 +1500,7 @@ SYMBOL TABLE SSA
(byte/signed word/word/dword/signed dword~) render_logo::$26
(byte*~) render_logo::$27
(bool~) render_logo::$28
(signed word~) render_logo::$3
(signed word/signed dword~) render_logo::$3
(signed byte~) render_logo::$4
(bool~) render_logo::$5
(byte~) render_logo::$6
@ -2215,6 +2215,8 @@ Resolved ranged next value render_logo::line#6 ← ++ render_logo::line#11 to ++
Resolved ranged comparison value unroll if(render_logo::line#6!=rangelast(0,5)) goto render_logo::@24 to (byte/signed byte/word/signed word/dword/signed dword) 6
Resolved ranged next value render_logo::line#8 ← ++ render_logo::line#12 to ++
Resolved ranged comparison value unroll if(render_logo::line#8!=rangelast(0,5)) goto render_logo::@32 to (byte/signed byte/word/signed word/dword/signed dword) 6
Rewriting division to use shift (signed word/signed dword~) render_logo::$3 ← (signed word) render_logo::xpos#0 / (byte/signed byte/word/signed word/dword/signed dword) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @6
Culled Empty Block (label) @9
@ -2242,6 +2244,7 @@ Self Phi Eliminated (byte) render_logo::logo_start#1
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) render_logo::logo_start#1 (byte)(signed byte) render_logo::x_char#0
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to signed word in [154] (signed word/signed dword~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3
Unrolling loop Loop head: render_logo::@7 tails: render_logo::@7 blocks: render_logo::@7
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#9 (const byte) render_logo::line#1

View File

@ -828,8 +828,8 @@ render_sine: scope:[render_sine] from main::@12
render_sine::@1: scope:[render_sine] from render_sine render_sine::@2
(word) render_sine::xpos#6 ← phi( render_sine/(word) render_sine::xpos#0 render_sine::@2/(word) render_sine::xpos#8 )
(word) render_sine::sin_idx#2 ← phi( render_sine/(word) render_sine::sin_idx#0 render_sine::@2/(word) render_sine::sin_idx#1 )
(word~) render_sine::$0 ← (word) render_sine::sin_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word*~) render_sine::$1 ← (signed word[$200]) sin#0 + (word~) render_sine::$0
(word/signed dword/dword~) render_sine::$0 ← (word) render_sine::sin_idx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word*~) render_sine::$1 ← (signed word[$200]) sin#0 + (word/signed dword/dword~) render_sine::$0
(signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1)
(signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0
call wrap_y
@ -848,8 +848,8 @@ render_sine::@5: scope:[render_sine] from render_sine::@1
render_sine::@6: scope:[render_sine] from render_sine::@5
(word) render_sine::xpos#7 ← phi( render_sine::@5/(word) render_sine::xpos#3 )
(word) render_sine::sin_idx#3 ← phi( render_sine::@5/(word) render_sine::sin_idx#5 )
(word~) render_sine::$4 ← (word) render_sine::sin_idx#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word*~) render_sine::$5 ← (signed word*) sin2#0 + (word~) render_sine::$4
(word/signed dword/dword~) render_sine::$4 ← (word) render_sine::sin_idx#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word*~) render_sine::$5 ← (signed word*) sin2#0 + (word/signed dword/dword~) render_sine::$4
(signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$5)
(signed word/signed dword~) render_sine::$6 ← (signed word) render_sine::sin2_val#0 + (byte/signed byte/word/signed word/dword/signed dword) $a
(signed word) wrap_y::y#1 ← (signed word/signed dword~) render_sine::$6
@ -1613,12 +1613,12 @@ SYMBOL TABLE SSA
(byte) rem8u
(byte) rem8u#0
(void()) render_sine()
(word~) render_sine::$0
(word/signed dword/dword~) render_sine::$0
(signed word*~) render_sine::$1
(bool~) render_sine::$10
(bool~) render_sine::$11
(byte~) render_sine::$2
(word~) render_sine::$4
(word/signed dword/dword~) render_sine::$4
(signed word*~) render_sine::$5
(signed word/signed dword~) render_sine::$6
(byte~) render_sine::$7
@ -2276,6 +2276,9 @@ Resolved ranged next value bitmap_clear::x#1 ← ++ bitmap_clear::x#2 to ++
Resolved ranged comparison value if(bitmap_clear::x#1!=rangelast(0,$c7)) goto bitmap_clear::@2 to (byte/word/signed word/dword/signed dword) $c8
Resolved ranged next value bitmap_clear::y#1 ← ++ bitmap_clear::y#4 to ++
Resolved ranged comparison value if(bitmap_clear::y#1!=rangelast(0,$27)) goto bitmap_clear::@1 to (byte/signed byte/word/signed word/dword/signed dword) $28
Rewriting multiplication to use shift (word/signed dword/dword~) render_sine::$0 ← (word) render_sine::sin_idx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (word/signed dword/dword~) render_sine::$4 ← (word) render_sine::sin_idx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @6
Culled Empty Block (label) @9
@ -2293,6 +2296,8 @@ Successful SSA optimization Pass2CullEmptyBlocks
Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4
Alias (dword) mul16s::m#4 = (dword) mul16s::m#5
Successful SSA optimization Pass2AliasElimination
Inferred type updated to word in [174] (word/signed dword/dword~) render_sine::$0 ← (word) render_sine::sin_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to word in [184] (word/signed dword/dword~) render_sine::$4 ← (word) render_sine::sin_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const word) divr16u::quotient#0
Inlining constant with var siblings (const byte) divr16u::i#0
Inlining constant with var siblings (const word) divr16u::rem#3

View File

@ -423,10 +423,10 @@ anim::@4: scope:[anim] from anim anim::@6
(byte/signed byte/word/signed word/dword/signed dword~) anim::$4 ← ((word)) (byte/signed byte/word/signed word/dword/signed dword) $1e
(byte/signed word/word/dword/signed dword~) anim::$5 ← (byte/signed byte/word/signed word/dword/signed dword~) anim::$4 + *((byte[$dd]) sintab_x#0 + (byte) anim::xidx#3)
(word) anim::x#0 ← (byte/signed word/word/dword/signed dword~) anim::$5
(byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::x_msb#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) anim::$7 ← > (word) anim::x#0
(byte~) anim::$8 ← (byte~) anim::$6 | (byte~) anim::$7
(byte) anim::x_msb#1 ← (byte~) anim::$8
(byte/word/dword~) anim::$8 ← (byte/signed word/word/dword/signed dword~) anim::$6 | (byte~) anim::$7
(byte) anim::x_msb#1 ← (byte/word/dword~) anim::$8
(byte~) anim::$9 ← < (word) anim::x#0
*((byte*) SPRITES_XPOS#0 + (byte) anim::j2#2) ← (byte~) anim::$9
*((byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((byte[$c5]) sintab_y#0 + (byte) anim::yidx#3)
@ -592,8 +592,8 @@ gen_chargen_sprite: scope:[gen_chargen_sprite] from gen_sprites::@1
(byte*) gen_chargen_sprite::sprite#12 ← phi( gen_sprites::@1/(byte*) gen_chargen_sprite::sprite#0 )
(byte) gen_chargen_sprite::ch#1 ← phi( gen_sprites::@1/(byte) gen_chargen_sprite::ch#0 )
(word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#1
(word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3
(byte*~) gen_chargen_sprite::$2 ← (byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1
(word/signed dword/dword~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*~) gen_chargen_sprite::$2 ← (byte*) CHARGEN#0 + (word/signed dword/dword~) gen_chargen_sprite::$1
(byte*) gen_chargen_sprite::chargen#0 ← (byte*~) gen_chargen_sprite::$2
asm { sei }
*((byte*) PROCPORT#0) ← (byte/signed byte/word/signed word/dword/signed dword) $32
@ -653,9 +653,9 @@ gen_chargen_sprite::@4: scope:[gen_chargen_sprite] from gen_chargen_sprite::@3
(byte) gen_chargen_sprite::s_gen_cnt#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen_cnt#5 )
(byte) gen_chargen_sprite::c#2 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::c#3 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::c#4 )
(byte) gen_chargen_sprite::s_gen#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen#5 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen#6 )
(byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) gen_chargen_sprite::$7 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#2
(byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$7
(byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/word/dword~) gen_chargen_sprite::$7 ← (byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#2
(byte) gen_chargen_sprite::s_gen#1 ← (byte/word/dword~) gen_chargen_sprite::$7
(byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3
(bool~) gen_chargen_sprite::$8 ← (byte) gen_chargen_sprite::s_gen_cnt#1 == (byte/signed byte/word/signed word/dword/signed dword) 8
(bool~) gen_chargen_sprite::$9 ← ! (bool~) gen_chargen_sprite::$8
@ -699,8 +699,8 @@ gen_chargen_sprite::@7: scope:[gen_chargen_sprite] from gen_chargen_sprite::@5
(byte*) gen_chargen_sprite::sprite#6 ← phi( gen_chargen_sprite::@5/(byte*) gen_chargen_sprite::sprite#8 )
(byte) gen_chargen_sprite::x#2 ← phi( gen_chargen_sprite::@5/(byte) gen_chargen_sprite::x#3 )
(byte) gen_chargen_sprite::bits#3 ← phi( gen_chargen_sprite::@5/(byte) gen_chargen_sprite::bits#4 )
(byte~) gen_chargen_sprite::$11 ← (byte) gen_chargen_sprite::bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) gen_chargen_sprite::bits#1 ← (byte~) gen_chargen_sprite::$11
(byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$11 ← (byte) gen_chargen_sprite::bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) gen_chargen_sprite::bits#1 ← (byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$11
(byte) gen_chargen_sprite::x#1 ← (byte) gen_chargen_sprite::x#2 + rangenext(0,7)
(bool~) gen_chargen_sprite::$12 ← (byte) gen_chargen_sprite::x#1 != rangelast(0,7)
if((bool~) gen_chargen_sprite::$12) goto gen_chargen_sprite::@2
@ -1153,9 +1153,9 @@ SYMBOL TABLE SSA
(bool~) anim::$3
(byte/signed byte/word/signed word/dword/signed dword~) anim::$4
(byte/signed word/word/dword/signed dword~) anim::$5
(byte~) anim::$6
(byte/signed word/word/dword/signed dword~) anim::$6
(byte~) anim::$7
(byte~) anim::$8
(byte/word/dword~) anim::$8
(byte~) anim::$9
(label) anim::@1
(label) anim::@10
@ -1231,9 +1231,9 @@ SYMBOL TABLE SSA
(byte*) divMEMbyFAC::mem#2
(void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite)
(word~) gen_chargen_sprite::$0
(word~) gen_chargen_sprite::$1
(word/signed dword/dword~) gen_chargen_sprite::$1
(bool~) gen_chargen_sprite::$10
(byte~) gen_chargen_sprite::$11
(byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$11
(bool~) gen_chargen_sprite::$12
(byte*~) gen_chargen_sprite::$13
(bool~) gen_chargen_sprite::$14
@ -1241,8 +1241,8 @@ SYMBOL TABLE SSA
(byte~) gen_chargen_sprite::$3
(bool~) gen_chargen_sprite::$4
(bool~) gen_chargen_sprite::$5
(byte~) gen_chargen_sprite::$6
(byte~) gen_chargen_sprite::$7
(byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$6
(byte/word/dword~) gen_chargen_sprite::$7
(bool~) gen_chargen_sprite::$8
(bool~) gen_chargen_sprite::$9
(label) gen_chargen_sprite::@1
@ -1869,7 +1869,7 @@ Alias (byte) progress_idx#12 = (byte) progress_idx#26 (byte) progress_idx#25
Alias (byte*) progress_cursor#11 = (byte*) progress_cursor#25 (byte*) progress_cursor#23
Alias (byte) progress_idx#35 = (byte) progress_idx#39 (byte) progress_idx#7
Alias (word) anim::x#0 = (byte/signed word/word/dword/signed dword~) anim::$5
Alias (byte) anim::x_msb#1 = (byte~) anim::$8 (byte) anim::x_msb#7
Alias (byte) anim::x_msb#1 = (byte/word/dword~) anim::$8 (byte) anim::x_msb#7
Alias (byte) anim::xidx#1 = (byte/signed word/word/dword/signed dword~) anim::$10 (byte) anim::xidx#4
Alias (byte) anim::yidx#1 = (byte/signed word/word/dword/signed dword~) anim::$14 (byte) anim::yidx#5
Alias (byte) anim::yidx#3 = (byte) anim::yidx#7
@ -1907,7 +1907,7 @@ Alias (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#8
Alias (byte) gen_chargen_sprite::x#7 = (byte) gen_chargen_sprite::x#8
Alias (byte) gen_chargen_sprite::y#10 = (byte) gen_chargen_sprite::y#9
Alias (byte*) gen_chargen_sprite::chargen#8 = (byte*) gen_chargen_sprite::chargen#9
Alias (byte) gen_chargen_sprite::s_gen#1 = (byte~) gen_chargen_sprite::$7 (byte) gen_chargen_sprite::s_gen#4
Alias (byte) gen_chargen_sprite::s_gen#1 = (byte/word/dword~) gen_chargen_sprite::$7 (byte) gen_chargen_sprite::s_gen#4
Alias (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#5
Alias (byte) gen_chargen_sprite::b#3 = (byte) gen_chargen_sprite::b#4
Alias (byte) gen_chargen_sprite::c#2 = (byte) gen_chargen_sprite::c#5
@ -1922,7 +1922,7 @@ Alias (byte) gen_chargen_sprite::y#3 = (byte) gen_chargen_sprite::y#4 (byte) gen
Alias (byte*) gen_chargen_sprite::chargen#2 = (byte*) gen_chargen_sprite::chargen#3 (byte*) gen_chargen_sprite::chargen#4
Alias (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#9
Alias (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#8
Alias (byte) gen_chargen_sprite::bits#1 = (byte~) gen_chargen_sprite::$11
Alias (byte) gen_chargen_sprite::bits#1 = (byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$11
Alias (byte*) gen_chargen_sprite::sprite#2 = (byte*~) gen_chargen_sprite::$13
Alias (word) setFAC::w#0 = (word~) gen_sintab::$0
Alias (byte) gen_sintab::min#2 = (byte) gen_sintab::min#3 (byte) gen_sintab::min#4
@ -2237,6 +2237,11 @@ Resolved ranged next value gen_chargen_sprite::x#1 ← ++ gen_chargen_sprite::x#
Resolved ranged comparison value if(gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value gen_chargen_sprite::y#1 ← ++ gen_chargen_sprite::y#10 to ++
Resolved ranged comparison value if(gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::x_msb#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (word/signed dword/dword~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @31
Culled Empty Block (label) @43
@ -2260,6 +2265,9 @@ Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) gen_chargen_sprite::y#10 (byte) gen_chargen_sprite::y#2
Redundant Phi (byte*) gen_chargen_sprite::chargen#7 (byte*) gen_chargen_sprite::chargen#1
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [77] (byte/signed word/word/dword/signed dword~) anim::$6 ← (byte) anim::x_msb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to word in [128] (word/signed dword/dword~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3
Inferred type updated to byte in [139] (byte/signed word/word/dword/signed dword~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#1
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) gen_chargen_sprite::chargen#1 (byte*) gen_chargen_sprite::chargen#0

View File

@ -18,8 +18,8 @@ main::@2: scope:[main] from main::@1
(byte) main::i#2 ← phi( main::@1/(byte) main::i#3 )
(byte) main::i#1 ← ++ (byte) main::i#2
(byte~) main::$0 ← (byte) main::i#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) main::$1 ← (byte~) main::$0 << (byte/signed byte/word/signed word/dword/signed dword) 1
(void()*) main::f#0 ← *((void()*[2]) fns#0 + (byte~) main::$1)
(byte/signed word/word/dword/signed dword~) main::$1 ← (byte~) main::$0 * (byte/signed byte/word/signed word/dword/signed dword) 2
(void()*) main::f#0 ← *((void()*[2]) fns#0 + (byte/signed word/word/dword/signed dword~) main::$1)
call *((void()*) main::f#0)
to:main::@1
main::@return: scope:[main] from main::@1
@ -65,7 +65,7 @@ SYMBOL TABLE SSA
(void()*[2]) fns#0
(void()) main()
(byte~) main::$0
(byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$1
(label) main::@1
(label) main::@2
(label) main::@return
@ -93,6 +93,9 @@ if() condition always true - replacing block destination [1] if(true) goto main:
Successful SSA optimization Pass2ConstantIfs
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$1 ← (byte~) main::$0 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inferred type updated to byte in [3] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte~) main::$0 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const byte) main::i#0
Constant inlined $0 = &(void()) fn1()
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0

View File

@ -29,11 +29,11 @@ main::@1: scope:[main] from main main::@5
(byte*) main::chargen1#0 ← (byte*~) main::$0
(byte~) main::$1 ← *((byte*) main::chargen#2) & (byte/signed byte/word/signed word/dword/signed dword) $60
(byte~) main::$2 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word/dword/signed dword) $60
(byte~) main::$3 ← (byte~) main::$2 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3
(byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6)
(byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword~) main::$4 ← (byte~) main::$1 | (byte/signed word/word/dword/signed dword~) main::$3
(byte/signed word/word/dword/signed dword~) main::$5 ← (byte/word/dword~) main::$4 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/signed word/word/dword/signed dword~) main::$6 ← (byte/signed word/word/dword/signed dword~) main::$5 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte/signed word/word/dword/signed dword~) main::$6)
(bool~) main::$7 ← (byte) main::bits#0 >= (byte/signed byte/word/signed word/dword/signed dword) 2
(bool~) main::$8 ← ! (bool~) main::$7
if((bool~) main::$8) goto main::@2
@ -43,14 +43,14 @@ main::@2: scope:[main] from main::@1 main::@6
(byte*) main::chargen1#1 ← phi( main::@1/(byte*) main::chargen1#0 main::@6/(byte*) main::chargen1#4 )
(byte*) main::chargen#3 ← phi( main::@1/(byte*) main::chargen#2 main::@6/(byte*) main::chargen#7 )
(byte) main::bits_gen#9 ← phi( main::@1/(byte) main::bits_gen#0 main::@6/(byte) main::bits_gen#2 )
(byte~) main::$10 ← (byte) main::bits_gen#9 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::bits_gen#1 ← (byte~) main::$10
(byte/signed word/word/dword/signed dword~) main::$10 ← (byte) main::bits_gen#9 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits_gen#1 ← (byte/signed word/word/dword/signed dword~) main::$10
(byte~) main::$11 ← *((byte*) main::chargen#3) & (byte/signed byte/word/signed word/dword/signed dword) $18
(byte~) main::$12 ← *((byte*) main::chargen1#1) & (byte/signed byte/word/signed word/dword/signed dword) $18
(byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13
(byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15)
(byte/signed word/word/dword/signed dword~) main::$13 ← (byte~) main::$12 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword~) main::$14 ← (byte~) main::$11 | (byte/signed word/word/dword/signed dword~) main::$13
(byte/signed word/word/dword/signed dword~) main::$15 ← (byte/word/dword~) main::$14 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte/signed word/word/dword/signed dword~) main::$15)
(bool~) main::$16 ← (byte) main::bits#1 >= (byte/signed byte/word/signed word/dword/signed dword) 2
(bool~) main::$17 ← ! (bool~) main::$16
if((bool~) main::$17) goto main::@3
@ -68,14 +68,14 @@ main::@3: scope:[main] from main::@2 main::@7
(byte*) main::chargen1#2 ← phi( main::@2/(byte*) main::chargen1#1 main::@7/(byte*) main::chargen1#5 )
(byte*) main::chargen#4 ← phi( main::@2/(byte*) main::chargen#3 main::@7/(byte*) main::chargen#8 )
(byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@7/(byte) main::bits_gen#4 )
(byte~) main::$19 ← (byte) main::bits_gen#11 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::bits_gen#3 ← (byte~) main::$19
(byte/signed word/word/dword/signed dword~) main::$19 ← (byte) main::bits_gen#11 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits_gen#3 ← (byte/signed word/word/dword/signed dword~) main::$19
(byte~) main::$20 ← *((byte*) main::chargen#4) & (byte/signed byte/word/signed word/dword/signed dword) 6
(byte~) main::$21 ← (byte~) main::$20 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed word/word/dword/signed dword~) main::$21 ← (byte~) main::$20 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) main::$22 ← *((byte*) main::chargen1#2) & (byte/signed byte/word/signed word/dword/signed dword) 6
(byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23
(byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24)
(byte/signed word/word/dword/signed dword~) main::$23 ← (byte~) main::$22 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/word/dword~) main::$24 ← (byte/signed word/word/dword/signed dword~) main::$21 | (byte/signed word/word/dword/signed dword~) main::$23
(byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte/word/dword~) main::$24)
(bool~) main::$25 ← (byte) main::bits#2 >= (byte/signed byte/word/signed word/dword/signed dword) 2
(bool~) main::$26 ← ! (bool~) main::$25
if((bool~) main::$26) goto main::@4
@ -93,13 +93,13 @@ main::@4: scope:[main] from main::@3 main::@8
(byte*) main::chargen1#3 ← phi( main::@3/(byte*) main::chargen1#2 main::@8/(byte*) main::chargen1#6 )
(byte*) main::chargen#5 ← phi( main::@3/(byte*) main::chargen#4 main::@8/(byte*) main::chargen#9 )
(byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#3 main::@8/(byte) main::bits_gen#6 )
(byte~) main::$28 ← (byte) main::bits_gen#13 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::bits_gen#5 ← (byte~) main::$28
(byte/signed word/word/dword/signed dword~) main::$28 ← (byte) main::bits_gen#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits_gen#5 ← (byte/signed word/word/dword/signed dword~) main::$28
(byte~) main::$29 ← *((byte*) main::chargen#5) & (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/signed word/word/dword/signed dword~) main::$30 ← (byte~) main::$29 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) main::$31 ← *((byte*) main::chargen1#3) & (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31
(byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32)
(byte/word/dword~) main::$32 ← (byte/signed word/word/dword/signed dword~) main::$30 | (byte~) main::$31
(byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte/word/dword~) main::$32)
(bool~) main::$33 ← (byte) main::bits#3 >= (byte/signed byte/word/signed word/dword/signed dword) 2
(bool~) main::$34 ← ! (bool~) main::$33
if((bool~) main::$34) goto main::@5
@ -116,8 +116,8 @@ main::@5: scope:[main] from main::@4 main::@9
(byte*) main::chargen#6 ← phi( main::@4/(byte*) main::chargen#5 main::@9/(byte*) main::chargen#10 )
(byte*) main::charset4#2 ← phi( main::@4/(byte*) main::charset4#3 main::@9/(byte*) main::charset4#4 )
(byte) main::bits_gen#15 ← phi( main::@4/(byte) main::bits_gen#5 main::@9/(byte) main::bits_gen#8 )
(byte~) main::$36 ← (byte) main::bits_gen#15 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::bits_gen#7 ← (byte~) main::$36
(byte/signed word/word/dword/signed dword~) main::$36 ← (byte) main::bits_gen#15 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::bits_gen#7 ← (byte/signed word/word/dword/signed dword~) main::$36
*((byte*) main::charset4#2) ← (byte) main::bits_gen#7
(byte*) main::charset4#1 ← ++ (byte*) main::charset4#2
(byte*~) main::$37 ← (byte*) main::chargen#6 + (byte/signed byte/word/signed word/dword/signed dword) 2
@ -180,42 +180,42 @@ SYMBOL TABLE SSA
(void()) main()
(byte*~) main::$0
(byte~) main::$1
(byte~) main::$10
(byte/signed word/word/dword/signed dword~) main::$10
(byte~) main::$11
(byte~) main::$12
(byte~) main::$13
(byte~) main::$14
(byte~) main::$15
(byte/signed word/word/dword/signed dword~) main::$13
(byte/word/dword~) main::$14
(byte/signed word/word/dword/signed dword~) main::$15
(bool~) main::$16
(bool~) main::$17
(byte/signed word/word/dword/signed dword~) main::$18
(byte~) main::$19
(byte/signed word/word/dword/signed dword~) main::$19
(byte~) main::$2
(byte~) main::$20
(byte~) main::$21
(byte/signed word/word/dword/signed dword~) main::$21
(byte~) main::$22
(byte~) main::$23
(byte~) main::$24
(byte/signed word/word/dword/signed dword~) main::$23
(byte/word/dword~) main::$24
(bool~) main::$25
(bool~) main::$26
(byte/signed word/word/dword/signed dword~) main::$27
(byte~) main::$28
(byte/signed word/word/dword/signed dword~) main::$28
(byte~) main::$29
(byte~) main::$3
(byte~) main::$30
(byte/signed word/word/dword/signed dword~) main::$3
(byte/signed word/word/dword/signed dword~) main::$30
(byte~) main::$31
(byte~) main::$32
(byte/word/dword~) main::$32
(bool~) main::$33
(bool~) main::$34
(byte/signed word/word/dword/signed dword~) main::$35
(byte~) main::$36
(byte/signed word/word/dword/signed dword~) main::$36
(byte*~) main::$37
(byte*~) main::$38
(bool~) main::$39
(byte~) main::$4
(byte/word/dword~) main::$4
(bool~) main::$40
(byte~) main::$5
(byte~) main::$6
(byte/signed word/word/dword/signed dword~) main::$5
(byte/signed word/word/dword/signed dword~) main::$6
(bool~) main::$7
(bool~) main::$8
(byte/signed word/word/dword/signed dword~) main::$9
@ -300,22 +300,22 @@ Inversing boolean not [50] (bool~) main::$26 ← (byte) main::bits#2 < (byte/sig
Inversing boolean not [64] (bool~) main::$34 ← (byte) main::bits#3 < (byte/signed byte/word/signed word/dword/signed dword) 2 from [63] (bool~) main::$33 ← (byte) main::bits#3 >= (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) main::chargen1#0 = (byte*~) main::$0 (byte*) main::chargen1#4
Alias (byte) main::bits_gen#1 = (byte~) main::$10 (byte) main::bits_gen#12
Alias (byte) main::bits_gen#1 = (byte/signed word/word/dword/signed dword~) main::$10 (byte) main::bits_gen#12
Alias (byte) main::bits_gen#0 = (byte) main::bits_gen#10
Alias (byte*) main::chargen#2 = (byte*) main::chargen#7
Alias (byte*) main::charset4#10 = (byte*) main::charset4#9
Alias (byte) main::bits_gen#2 = (byte/signed word/word/dword/signed dword~) main::$9
Alias (byte) main::bits_gen#14 = (byte) main::bits_gen#3 (byte~) main::$19
Alias (byte) main::bits_gen#14 = (byte) main::bits_gen#3 (byte/signed word/word/dword/signed dword~) main::$19
Alias (byte*) main::chargen#3 = (byte*) main::chargen#8
Alias (byte*) main::chargen1#1 = (byte*) main::chargen1#5
Alias (byte*) main::charset4#7 = (byte*) main::charset4#8
Alias (byte) main::bits_gen#4 = (byte/signed word/word/dword/signed dword~) main::$18
Alias (byte) main::bits_gen#16 = (byte) main::bits_gen#5 (byte~) main::$28
Alias (byte) main::bits_gen#16 = (byte) main::bits_gen#5 (byte/signed word/word/dword/signed dword~) main::$28
Alias (byte*) main::chargen#4 = (byte*) main::chargen#9
Alias (byte*) main::chargen1#2 = (byte*) main::chargen1#6
Alias (byte*) main::charset4#5 = (byte*) main::charset4#6
Alias (byte) main::bits_gen#6 = (byte/signed word/word/dword/signed dword~) main::$27
Alias (byte) main::bits_gen#7 = (byte~) main::$36
Alias (byte) main::bits_gen#7 = (byte/signed word/word/dword/signed dword~) main::$36
Alias (byte*) main::chargen#1 = (byte*~) main::$37
Alias (byte*) main::charset4#3 = (byte*) main::charset4#4
Alias (byte*) main::chargen#10 = (byte*) main::chargen#5
@ -350,6 +350,31 @@ Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,$ff)) goto main::@11 to (byte/signed byte/word/signed word/dword/signed dword) 0
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 / (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$5 ← (byte/word/dword~) main::$4 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$6 ← (byte/signed word/word/dword/signed dword~) main::$5 / (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$13 ← (byte~) main::$12 / (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$15 ← (byte/word/dword~) main::$14 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$21 ← (byte~) main::$20 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$23 ← (byte~) main::$22 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$30 ← (byte~) main::$29 * (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inferred type updated to byte in [6] (byte/signed word/word/dword/signed dword~) main::$3 ← (byte~) main::$2 >> (byte/signed byte/word/signed word/dword/signed dword) 2
Inferred type updated to byte in [7] (byte/word/dword~) main::$4 ← (byte~) main::$1 | (byte~) main::$3
Inferred type updated to byte in [8] (byte/signed word/word/dword/signed dword~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [9] (byte/signed word/word/dword/signed dword~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word/dword/signed dword) 2
Inferred type updated to byte in [16] (byte/signed word/word/dword/signed dword~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word/dword/signed dword) 2
Inferred type updated to byte in [17] (byte/word/dword~) main::$14 ← (byte~) main::$11 | (byte~) main::$13
Inferred type updated to byte in [18] (byte/signed word/word/dword/signed dword~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [24] (byte/signed word/word/dword/signed dword~) main::$21 ← (byte~) main::$20 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [26] (byte/signed word/word/dword/signed dword~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [27] (byte/word/dword~) main::$24 ← (byte~) main::$21 | (byte~) main::$23
Inferred type updated to byte in [34] (byte/signed word/word/dword/signed dword~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word/dword/signed dword) 2
Inferred type updated to byte in [36] (byte/word/dword~) main::$32 ← (byte~) main::$30 | (byte~) main::$31
Inlining constant with var siblings (const byte) main::bits_gen#0
Inlining constant with var siblings (const byte) main::i#0
Inlining constant with var siblings (const byte*) main::chargen#0

View File

@ -423,9 +423,9 @@ main::@20: scope:[main] from main::@1
(word) rem16u#15 ← phi( main::@1/(word) rem16u#8 )
(word) rem16u#5 ← (word) rem16u#15
(signed word) rem16s#4 ← (signed word) rem16s#10
(byte~) main::$9 ← (byte) main::i#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed word/word/dword/signed dword~) main::$9 ← (byte) main::i#3 / (byte/signed byte/word/signed word/dword/signed dword) 2
(word) bitmap_plot::x#0 ← *((word[4]) x_start#0 + (byte) main::i#3)
(byte) bitmap_plot::y#0 ← *((byte[4]) y_start#0 + (byte~) main::$9)
(byte) bitmap_plot::y#0 ← *((byte[4]) y_start#0 + (byte/signed word/word/dword/signed dword~) main::$9)
call bitmap_plot
to:main::@21
main::@21: scope:[main] from main::@20
@ -471,8 +471,8 @@ point_init: scope:[point_init] from main::@1
(signed word) rem16s#49 ← phi( main::@1/(signed word) rem16s#15 )
(word) rem16u#63 ← phi( main::@1/(word) rem16u#21 )
(byte) point_init::point_idx#1 ← phi( main::@1/(byte) point_init::point_idx#0 )
(byte~) point_init::$0 ← (byte) point_init::point_idx#1 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) point_init::point_idx1#0 ← (byte~) point_init::$0
(byte/signed word/word/dword/signed dword~) point_init::$0 ← (byte) point_init::point_idx#1 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) point_init::point_idx1#0 ← (byte/signed word/word/dword/signed dword~) point_init::$0
(signed word~) point_init::$1 ← ((signed word)) *((word[4]) x_end#0 + (byte) point_init::point_idx#1)
(signed word~) point_init::$2 ← ((signed word)) *((word[4]) x_start#0 + (byte) point_init::point_idx#1)
(signed word~) point_init::$3 ← (signed word~) point_init::$1 - (signed word~) point_init::$2
@ -609,11 +609,11 @@ point_init::@2: scope:[point_init] from point_init::@10 point_init::@11
(word) rem16u#24 ← phi( point_init::@10/(word) rem16u#31 point_init::@11/(word) rem16u#7 )
(byte) point_init::point_idx1#1 ← phi( point_init::@10/(byte) point_init::point_idx1#3 point_init::@11/(byte) point_init::point_idx1#2 )
(byte) point_init::point_idx#2 ← phi( point_init::@10/(byte) point_init::point_idx#5 point_init::@11/(byte) point_init::point_idx#6 )
(word~) point_init::$10 ← *((word[4]) x_start#0 + (byte) point_init::point_idx#2) << (byte/signed byte/word/signed word/dword/signed dword) 4
*((word[4]) x_cur#0 + (byte) point_init::point_idx#2) ← (word~) point_init::$10
(word/signed dword/dword~) point_init::$10 ← *((word[4]) x_start#0 + (byte) point_init::point_idx#2) * (byte/signed byte/word/signed word/dword/signed dword) $10
*((word[4]) x_cur#0 + (byte) point_init::point_idx#2) ← (word/signed dword/dword~) point_init::$10
(word~) point_init::$11 ← ((word)) *((byte[4]) y_start#0 + (byte) point_init::point_idx1#1)
(word~) point_init::$12 ← (word~) point_init::$11 << (byte/signed byte/word/signed word/dword/signed dword) 4
*((word[4]) y_cur#0 + (byte) point_init::point_idx#2) ← (word~) point_init::$12
(word/signed dword/dword~) point_init::$12 ← (word~) point_init::$11 * (byte/signed byte/word/signed word/dword/signed dword) $10
*((word[4]) y_cur#0 + (byte) point_init::point_idx#2) ← (word/signed dword/dword~) point_init::$12
*((byte[4]) delay#0 + (byte) point_init::point_idx1#1) ← (byte) DELAY#0
to:point_init::@return
point_init::@7: scope:[point_init] from point_init::@1
@ -659,8 +659,8 @@ point_init::@11: scope:[point_init] from point_init::@8
(signed word) rem16s#6 ← (signed word) rem16s#12
(signed word) point_init::x_stepf#0 ← (signed word~) point_init::$15
(byte~) point_init::$16 ← > (signed word) point_init::x_stepf#0
(byte~) point_init::$17 ← (byte~) point_init::$16 >> (byte/signed byte/word/signed word/dword/signed dword) 4
(signed byte~) point_init::$18 ← ((signed byte)) (byte~) point_init::$17
(byte/signed word/word/dword/signed dword~) point_init::$17 ← (byte~) point_init::$16 / (byte/signed byte/word/signed word/dword/signed dword) $10
(signed byte~) point_init::$18 ← ((signed byte)) (byte/signed word/word/dword/signed dword~) point_init::$17
*((signed byte[4]) y_add#0 + (byte) point_init::point_idx1#2) ← (signed byte~) point_init::$18
to:point_init::@2
point_init::@return: scope:[point_init] from point_init::@2
@ -1281,7 +1281,7 @@ SYMBOL TABLE SSA
(bool~) main::$12
(byte/word/dword~) main::$2
(byte~) main::$4
(byte~) main::$9
(byte/signed word/word/dword/signed dword~) main::$9
(label) main::@1
(label) main::@15
(label) main::@16
@ -1359,16 +1359,16 @@ SYMBOL TABLE SSA
(byte) main::vicSelectGfxBank1_toDd001_return#2
(byte) main::vicSelectGfxBank1_toDd001_return#3
(void()) point_init((byte) point_init::point_idx)
(byte~) point_init::$0
(byte/signed word/word/dword/signed dword~) point_init::$0
(signed word~) point_init::$1
(word~) point_init::$10
(word/signed dword/dword~) point_init::$10
(word~) point_init::$11
(word~) point_init::$12
(word/signed dword/dword~) point_init::$12
(bool~) point_init::$13
(signed byte/signed word/signed dword~) point_init::$14
(signed word~) point_init::$15
(byte~) point_init::$16
(byte~) point_init::$17
(byte/signed word/word/dword/signed dword~) point_init::$17
(signed byte~) point_init::$18
(signed word~) point_init::$2
(signed word~) point_init::$3
@ -1741,7 +1741,7 @@ Alias (word) rem16u#16 = (word) rem16u#45 (word) rem16u#22 (word) rem16u#6
Alias (signed word) rem16s#11 = (signed word) rem16s#33 (signed word) rem16s#16 (signed word) rem16s#5
Alias (word) rem16u#30 = (word) rem16u#46 (word) rem16u#37
Alias (signed word) rem16s#22 = (signed word) rem16s#34 (signed word) rem16s#28
Alias (byte) point_init::point_idx1#0 = (byte~) point_init::$0 (byte) point_init::point_idx1#16 (byte) point_init::point_idx1#14 (byte) point_init::point_idx1#15
Alias (byte) point_init::point_idx1#0 = (byte/signed word/word/dword/signed dword~) point_init::$0 (byte) point_init::point_idx1#16 (byte) point_init::point_idx1#14 (byte) point_init::point_idx1#15
Alias (signed word) point_init::abs16s1_w#0 = (signed word) point_init::x_diff#0 (signed word~) point_init::$3 (signed word) point_init::abs16s1_w#1 (signed word) point_init::x_diff#14 (signed word) point_init::abs16s1_w#2 (signed word) point_init::x_diff#12 (signed word) point_init::abs16s1_w#3 (signed word) point_init::x_diff#13
Alias (signed word) point_init::y_diff#0 = (signed word~) point_init::$6 (signed word) point_init::y_diff#9 (signed word) point_init::y_diff#6 (signed word) point_init::y_diff#7
Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#17 (byte) point_init::point_idx#15 (byte) point_init::point_idx#16
@ -2050,7 +2050,7 @@ Eliminating Noop Cast (word) point_init::abs16s1_return#0 ← ((word)) (signed w
Eliminating Noop Cast (word) point_init::abs16s1_return#1 ← ((word)) (signed word) point_init::x_diff#1
Eliminating Noop Cast (word) point_init::abs16s2_return#0 ← ((word)) (signed word) point_init::abs16s2_$2#0
Eliminating Noop Cast (word) point_init::abs16s2_return#1 ← ((word)) (signed word) point_init::y_diff#0
Eliminating Noop Cast (signed byte~) point_init::$18 ← ((signed byte)) (byte~) point_init::$17
Eliminating Noop Cast (signed byte~) point_init::$18 ← ((signed byte)) (byte/signed word/word/dword/signed dword~) point_init::$17
Eliminating Noop Cast (byte*) bitmap_clear::bitmap#0 ← ((byte*)) (word~) bitmap_clear::$3
Eliminating Noop Cast (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$3
Successful SSA optimization Pass2NopCastElimination
@ -2070,6 +2070,12 @@ Resolved ranged next value bitmap_clear::x#1 ← ++ bitmap_clear::x#2 to ++
Resolved ranged comparison value if(bitmap_clear::x#1!=rangelast(0,$c7)) goto bitmap_clear::@2 to (byte/word/signed word/dword/signed dword) $c8
Resolved ranged next value bitmap_clear::y#1 ← ++ bitmap_clear::y#4 to ++
Resolved ranged comparison value if(bitmap_clear::y#1!=rangelast(0,$27)) goto bitmap_clear::@1 to (byte/signed byte/word/signed word/dword/signed dword) $28
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) main::$9 ← (byte) main::i#2 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting division to use shift (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 / (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (word/signed dword/dword~) point_init::$10 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting multiplication to use shift (word/signed dword/dword~) point_init::$12 ← (word~) point_init::$11 * (byte/signed byte/word/signed word/dword/signed dword) $10
Rewriting division to use shift (byte/signed word/word/dword/signed dword~) point_init::$17 ← (byte~) point_init::$16 / (byte/signed byte/word/signed word/dword/signed dword) $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @6
Culled Empty Block (label) @9
@ -2097,6 +2103,10 @@ Redundant Phi (byte) screen_fill::ch#2 (const byte) screen_fill::ch#0
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) divr16s::$1 [135] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Inferred type updated to byte in [47] (byte/signed word/word/dword/signed dword~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to word in [69] (word/signed dword/dword~) point_init::$10 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to word in [72] (word/signed dword/dword~) point_init::$12 ← (word~) point_init::$11 << (byte/signed byte/word/signed word/dword/signed dword) 4
Inferred type updated to byte in [83] (byte/signed word/word/dword/signed dword~) point_init::$17 ← (byte~) point_init::$16 >> (byte/signed byte/word/signed word/dword/signed dword) 4
Culled Empty Block (label) main::@3
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const word) divr16u::quotient#0

View File

@ -218,8 +218,8 @@ plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
(byte) plex_free_next#23 ← phi( plex_irq::@3/(byte) plex_free_next#27 )
(byte) plex_show_idx#13 ← phi( plex_irq::@3/(byte) plex_show_idx#27 )
(byte) plex_sprite_idx#13 ← phi( plex_irq::@3/(byte) plex_sprite_idx#25 )
(byte~) plexShowSprite::$0 ← (byte) plex_sprite_idx#13 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) plexShowSprite::plex_sprite_idx2#0 ← (byte~) plexShowSprite::$0
(byte/signed word/word/dword/signed dword~) plexShowSprite::$0 ← (byte) plex_sprite_idx#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) plexShowSprite::plex_sprite_idx2#0 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$0
(byte) plexShowSprite::ypos#0 ← *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#13))
*((byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::ypos#0
(byte) plexShowSprite::plexFreeAdd1_ypos#0 ← (byte) plexShowSprite::ypos#0
@ -246,8 +246,8 @@ plexShowSprite::@7: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
(byte*) PLEX_SCREEN_PTR#9 ← phi( plexShowSprite::plexFreeAdd1/(byte*) PLEX_SCREEN_PTR#16 )
(byte) plex_show_idx#14 ← phi( plexShowSprite::plexFreeAdd1/(byte) plex_show_idx#28 )
*((byte*) PLEX_SCREEN_PTR#9 + (byte) plex_sprite_idx#14) ← *((byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#14))
(byte~) plexShowSprite::$2 ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#14) << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) plexShowSprite::xpos_idx#0 ← (byte~) plexShowSprite::$2
(byte/signed word/word/dword/signed dword~) plexShowSprite::$2 ← *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#14) * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) plexShowSprite::xpos_idx#0 ← (byte/signed word/word/dword/signed dword~) plexShowSprite::$2
(byte~) plexShowSprite::$3 ← < *((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0)
*((byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#1) ← (byte~) plexShowSprite::$3
(byte~) plexShowSprite::$4 ← > *((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte) plexShowSprite::xpos_idx#0)
@ -405,8 +405,8 @@ init::@1: scope:[init] from init::@1 init::@5
(byte*~) init::$5 ← (byte*) SPRITE#0 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte~) init::$6 ← ((byte)) (byte*~) init::$5
*((byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte~) init::$6
(byte~) init::$7 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$7) ← (word) init::xp#2
(byte/signed word/word/dword/signed dword~) init::$7 ← (byte) init::sx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte/signed word/word/dword/signed dword~) init::$7) ← (word) init::xp#2
(word) init::xp#1 ← (word) init::xp#2 + (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) init::sx#1 ← (byte) init::sx#2 + rangenext(0,init::$4)
(bool~) init::$8 ← (byte) init::sx#1 != rangelast(0,init::$4)
@ -954,7 +954,7 @@ SYMBOL TABLE SSA
(byte/signed word/word/dword/signed dword~) init::$4
(byte*~) init::$5
(byte~) init::$6
(byte~) init::$7
(byte/signed word/word/dword/signed dword~) init::$7
(bool~) init::$8
(bool~) init::$9
(label) init::@1
@ -1031,9 +1031,9 @@ SYMBOL TABLE SSA
(byte*) plexInit::screen#0
(byte*) plexInit::screen#1
(void()) plexShowSprite()
(byte~) plexShowSprite::$0
(byte/signed word/word/dword/signed dword~) plexShowSprite::$0
(byte/word/dword~) plexShowSprite::$10
(byte~) plexShowSprite::$2
(byte/signed word/word/dword/signed dword~) plexShowSprite::$2
(byte~) plexShowSprite::$3
(byte~) plexShowSprite::$4
(bool~) plexShowSprite::$5
@ -1384,14 +1384,14 @@ Alias (byte) plex_show_idx#12 = (byte) plex_show_idx#26 (byte) plex_show_idx#39
Alias (byte) plex_sprite_idx#12 = (byte) plex_sprite_idx#24 (byte) plex_sprite_idx#36 (byte) plex_sprite_idx#2
Alias (byte) plex_sprite_msb#13 = (byte) plex_sprite_msb#25 (byte) plex_sprite_msb#34 (byte) plex_sprite_msb#2
Alias (byte) plex_free_next#0 = (byte) plex_free_next#12 (byte) plex_free_next#1
Alias (byte) plexShowSprite::plex_sprite_idx2#0 = (byte~) plexShowSprite::$0 (byte) plexShowSprite::plex_sprite_idx2#2 (byte) plexShowSprite::plex_sprite_idx2#1
Alias (byte) plexShowSprite::plex_sprite_idx2#0 = (byte/signed word/word/dword/signed dword~) plexShowSprite::$0 (byte) plexShowSprite::plex_sprite_idx2#2 (byte) plexShowSprite::plex_sprite_idx2#1
Alias (byte) plexShowSprite::plexFreeAdd1_ypos#0 = (byte) plexShowSprite::ypos#0 (byte) plexShowSprite::plexFreeAdd1_ypos#1
Alias (byte) plex_free_next#13 = (byte) plex_free_next#23
Alias (byte) plex_show_idx#13 = (byte) plex_show_idx#28 (byte) plex_show_idx#14 (byte) plex_show_idx#29 (byte) plex_show_idx#30
Alias (byte*) PLEX_SCREEN_PTR#16 = (byte*) PLEX_SCREEN_PTR#23 (byte*) PLEX_SCREEN_PTR#9
Alias (byte) plex_sprite_idx#13 = (byte) plex_sprite_idx#26 (byte) plex_sprite_idx#14 (byte) plex_sprite_idx#27 (byte) plex_sprite_idx#28
Alias (byte) plex_sprite_msb#14 = (byte) plex_sprite_msb#35 (byte) plex_sprite_msb#45 (byte) plex_sprite_msb#26 (byte) plex_sprite_msb#15
Alias (byte) plexShowSprite::xpos_idx#0 = (byte~) plexShowSprite::$2
Alias (byte) plexShowSprite::xpos_idx#0 = (byte/signed word/word/dword/signed dword~) plexShowSprite::$2
Alias (byte) plex_free_next#24 = (byte) plex_free_next#32 (byte) plex_free_next#25
Alias (byte) plex_show_idx#3 = (byte) plex_show_idx#31 (byte) plex_show_idx#32
Alias (byte) plex_sprite_msb#27 = (byte) plex_sprite_msb#3
@ -1728,6 +1728,10 @@ Resolved ranged next value init::ss#1 ← ++ init::ss#2 to ++
Resolved ranged comparison value if(init::ss#1!=rangelast(0,7)) goto init::@3 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value loop::sy#1 ← ++ loop::sy#2 to ++
Resolved ranged comparison value if(loop::sy#1!=rangelast(0,loop::$1)) goto loop::@10 to (const byte/signed word/word/dword/signed dword) loop::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Rewriting multiplication to use shift (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#25 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27) * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) init::$7 ← (byte) init::sx#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) plexInit::@3
Culled Empty Block (label) plexSort::@5
Culled Empty Block (label) plexShowSprite::@3
@ -1751,6 +1755,7 @@ Simple Condition (bool~) plex_irq::$3 [95] if((byte) plex_show_idx#16<(const byt
Simple Condition (bool~) plexSort::$7 [119] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3
Simple Condition (bool~) plex_irq::$5 [120] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte/signed word/word/dword/signed dword~) plex_irq::$4) goto plex_irq::@3
Successful SSA optimization Pass2ConditionalJumpSimplification
Inferred type updated to byte in [66] (byte/signed word/word/dword/signed dword~) init::$7 ← (byte) init::sx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Alias candidate removed (volatile)(byte) plex_free_next#2 = (byte/word/dword) plexShowSprite::plexFreeAdd1_$2#0
Alias candidate removed (volatile)(byte) plex_sprite_idx#3 = (byte/word/dword~) plexShowSprite::$7
Inlining constant with var siblings (const byte) plexInit::i#0

View File

@ -73,10 +73,10 @@ gen_char3::@3: scope:[gen_char3] from gen_char3::@2 gen_char3::@4
(byte) gen_char3::c#2 ← phi( gen_char3::@2/(byte) gen_char3::c#3 gen_char3::@4/(byte) gen_char3::c#4 )
(word) gen_char3::spec#3 ← phi( gen_char3::@2/(word) gen_char3::spec#2 gen_char3::@4/(word) gen_char3::spec#5 )
(byte) gen_char3::b#3 ← phi( gen_char3::@2/(byte) gen_char3::b#6 gen_char3::@4/(byte) gen_char3::b#2 )
(byte~) gen_char3::$5 ← (byte) gen_char3::b#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) gen_char3::b#1 ← (byte~) gen_char3::$5
(word~) gen_char3::$6 ← (word) gen_char3::spec#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(word) gen_char3::spec#1 ← (word~) gen_char3::$6
(byte/signed word/word/dword/signed dword~) gen_char3::$5 ← (byte) gen_char3::b#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) gen_char3::b#1 ← (byte/signed word/word/dword/signed dword~) gen_char3::$5
(word/signed dword/dword~) gen_char3::$6 ← (word) gen_char3::spec#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(word) gen_char3::spec#1 ← (word/signed dword/dword~) gen_char3::$6
(byte) gen_char3::c#1 ← (byte) gen_char3::c#2 + rangenext(0,2)
(bool~) gen_char3::$7 ← (byte) gen_char3::c#1 != rangelast(0,2)
if((bool~) gen_char3::$7) goto gen_char3::@2
@ -129,8 +129,8 @@ SYMBOL TABLE SSA
(bool~) gen_char3::$2
(bool~) gen_char3::$3
(byte/word/dword~) gen_char3::$4
(byte~) gen_char3::$5
(word~) gen_char3::$6
(byte/signed word/word/dword/signed dword~) gen_char3::$5
(word/signed dword/dword~) gen_char3::$6
(bool~) gen_char3::$7
(bool~) gen_char3::$8
(label) gen_char3::@1
@ -213,8 +213,8 @@ Alias (byte*) main::charset#2 = (byte*) main::charset#3
Alias (byte) main::c#2 = (byte) main::c#3
Alias (byte*) main::charset#1 = (byte*~) main::$8
Alias (byte) main::c#1 = (byte/signed word/word/dword/signed dword~) main::$9
Alias (byte) gen_char3::b#1 = (byte~) gen_char3::$5 (byte) gen_char3::b#5
Alias (word) gen_char3::spec#1 = (word~) gen_char3::$6 (word) gen_char3::spec#7
Alias (byte) gen_char3::b#1 = (byte/signed word/word/dword/signed dword~) gen_char3::$5 (byte) gen_char3::b#5
Alias (word) gen_char3::spec#1 = (word/signed dword/dword~) gen_char3::$6 (word) gen_char3::spec#7
Alias (byte) gen_char3::b#4 = (byte) gen_char3::b#6
Alias (word) gen_char3::spec#2 = (word) gen_char3::spec#5
Alias (byte) gen_char3::c#3 = (byte) gen_char3::c#4
@ -266,6 +266,9 @@ Resolved ranged next value gen_char3::c#1 ← ++ gen_char3::c#2 to ++
Resolved ranged comparison value if(gen_char3::c#1!=rangelast(0,2)) goto gen_char3::@2 to (byte/signed byte/word/signed word/dword/signed dword) 3
Resolved ranged next value gen_char3::r#1 ← ++ gen_char3::r#6 to ++
Resolved ranged comparison value if(gen_char3::r#1!=rangelast(0,4)) goto gen_char3::@1 to (byte/signed byte/word/signed word/dword/signed dword) 5
Rewriting multiplication to use shift (byte) gen_char3::b#1 ← (byte) gen_char3::b#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (word) gen_char3::spec#1 ← (word) gen_char3::spec#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Self Phi Eliminated (byte*) gen_char3::dst#5
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) gen_char3::dst#5 (byte*) gen_char3::dst#0

View File

@ -109,11 +109,11 @@ position_sprite: scope:[position_sprite] from main::@1
(word) position_sprite::x#1 ← phi( main::@1/(word) position_sprite::x#0 )
(byte) position_sprite::y#1 ← phi( main::@1/(byte) position_sprite::y#0 )
(byte) position_sprite::spriteno#1 ← phi( main::@1/(byte) position_sprite::spriteno#0 )
(byte~) position_sprite::$0 ← (byte) position_sprite::spriteno#1 << (byte/signed byte/word/signed word/dword/signed dword) 1
*((byte*) SPRITES_YPOS#0 + (byte~) position_sprite::$0) ← (byte) position_sprite::y#1
(byte~) position_sprite::$1 ← (byte) position_sprite::spriteno#1 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed word/word/dword/signed dword~) position_sprite::$0 ← (byte) position_sprite::spriteno#1 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*) SPRITES_YPOS#0 + (byte/signed word/word/dword/signed dword~) position_sprite::$0) ← (byte) position_sprite::y#1
(byte/signed word/word/dword/signed dword~) position_sprite::$1 ← (byte) position_sprite::spriteno#1 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte~) position_sprite::$2 ← < (word) position_sprite::x#1
*((byte*) SPRITES_XPOS#0 + (byte~) position_sprite::$1) ← (byte~) position_sprite::$2
*((byte*) SPRITES_XPOS#0 + (byte/signed word/word/dword/signed dword~) position_sprite::$1) ← (byte~) position_sprite::$2
(bool~) position_sprite::$3 ← (word) position_sprite::x#1 > (byte/word/signed word/dword/signed dword) $ff
if((bool~) position_sprite::$3) goto position_sprite::@1
to:position_sprite::@3
@ -317,8 +317,8 @@ SYMBOL TABLE SSA
(word) main::xpos#2
(word) main::xpos#3
(void()) position_sprite((byte) position_sprite::spriteno , (word) position_sprite::x , (byte) position_sprite::y)
(byte~) position_sprite::$0
(byte~) position_sprite::$1
(byte/signed word/word/dword/signed dword~) position_sprite::$0
(byte/signed word/word/dword/signed dword~) position_sprite::$1
(byte~) position_sprite::$2
(bool~) position_sprite::$3
(byte/signed byte/word/signed word/dword/signed dword~) position_sprite::$4
@ -438,6 +438,11 @@ Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Resolved ranged next value main::s#1 ← ++ main::s#2 to ++
Resolved ranged comparison value if(main::s#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inferred type updated to byte in [8] (byte/signed word/word/dword/signed dword~) position_sprite::$0 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [10] (byte/signed word/word/dword/signed dword~) position_sprite::$1 ← (byte) position_sprite::spriteno#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const word) main::xpos#0
Inlining constant with var siblings (const byte) main::s#0
Constant inlined main::xpos#0 = (byte/word/signed word/dword/signed dword) $c8

View File

@ -175,8 +175,8 @@ main::@1: scope:[main] from main main::@7
(byte*) print_line_cursor#27 ← phi( main/(byte*) print_line_cursor#28 main::@7/(byte*) print_line_cursor#21 )
(byte*) print_screen#8 ← phi( main/(byte*) print_screen#9 main::@7/(byte*) print_screen#5 )
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@7/(byte) main::i#1 )
(byte~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::idx#0 ← (byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::idx#0 ← (byte/signed word/word/dword/signed dword~) main::$1
(byte) sub::idx#0 ← (byte) main::idx#0
(byte) sub::s#0 ← (byte/word/signed word/dword/signed dword) $80
call sub
@ -227,8 +227,8 @@ main::@3: scope:[main] from main::@10 main::@8
(byte*) print_line_cursor#22 ← phi( main::@10/(byte*) print_line_cursor#6 main::@8/(byte*) print_line_cursor#5 )
(byte*) print_char_cursor#46 ← phi( main::@10/(byte*) print_char_cursor#18 main::@8/(byte*) print_char_cursor#16 )
(byte) main::j#2 ← phi( main::@10/(byte) main::j#1 main::@8/(byte) main::j#0 )
(byte~) main::$6 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) print_sword::w#1 ← *((signed word[]) words#0 + (byte~) main::$6)
(byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) print_sword::w#1 ← *((signed word[]) words#0 + (byte/signed word/word/dword/signed dword~) main::$6)
call print_sword
to:main::@9
main::@9: scope:[main] from main::@3
@ -290,9 +290,9 @@ SYMBOL TABLE SSA
(label) @begin
(label) @end
(void()) main()
(byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$1
(bool~) main::$5
(byte~) main::$6
(byte/signed word/word/dword/signed dword~) main::$6
(bool~) main::$9
(label) main::@1
(label) main::@10
@ -520,7 +520,7 @@ Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#9
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#30 (byte*) print_char_cursor#31 (byte*) print_char_cursor#11
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#33 (byte*) print_char_cursor#13
Alias (byte*) print_line_cursor#12 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_line_cursor#3 (byte*) print_char_cursor#14 (byte*) print_char_cursor#34 (byte*) print_line_cursor#4 (byte*) print_char_cursor#15
Alias (byte) main::idx#0 = (byte~) main::$1 (byte) main::idx#1 (byte) main::idx#2
Alias (byte) main::idx#0 = (byte/signed word/word/dword/signed dword~) main::$1 (byte) main::idx#1 (byte) main::idx#2
Alias (byte) main::i#2 = (byte) main::i#5 (byte) main::i#4 (byte) main::i#3
Alias (byte*) print_screen#4 = (byte*) print_screen#7 (byte*) print_screen#8 (byte*) print_screen#6 (byte*) print_screen#5
Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#26 (byte*) print_line_cursor#27 (byte*) print_line_cursor#25 (byte*) print_line_cursor#21
@ -599,6 +599,9 @@ Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,8)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 9
Resolved ranged next value main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value if(main::j#1!=rangelast(0,8)) goto main::@3 to (byte/signed byte/word/signed word/dword/signed dword) 9
Rewriting multiplication to use shift (byte) main::idx#0 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_sword::@3
Culled Empty Block (label) print_word::@2
@ -609,6 +612,7 @@ Culled Empty Block (label) @19
Culled Empty Block (label) main::@8
Culled Empty Block (label) @22
Successful SSA optimization Pass2CullEmptyBlocks
Inferred type updated to byte in [44] (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const byte) print_char::ch#0
Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte) main::i#0

View File

@ -467,8 +467,8 @@ sin16sb::@4: scope:[sin16sb] from sin16sb
sin16sb::@2: scope:[sin16sb] from sin16sb::@1 sin16sb::@5
(byte) sin16sb::isUpper#7 ← phi( sin16sb::@1/(byte) sin16sb::isUpper#8 sin16sb::@5/(byte) sin16sb::isUpper#9 )
(word) sin16sb::x#6 ← phi( sin16sb::@1/(word) sin16sb::x#4 sin16sb::@5/(word) sin16sb::x#2 )
(word~) sin16sb::$4 ← (word) sin16sb::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
(word) sin16sb::x1#0 ← (word~) sin16sb::$4
(word/signed dword/dword~) sin16sb::$4 ← (word) sin16sb::x#6 * (byte/signed byte/word/signed word/dword/signed dword) 8
(word) sin16sb::x1#0 ← (word/signed dword/dword~) sin16sb::$4
(word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0
(word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0
(byte) mulu16_sel::select#5 ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -534,8 +534,8 @@ sin16sb::@12: scope:[sin16sb] from sin16sb::@11
(word) mulu16_sel::return#22 ← phi( sin16sb::@11/(word) mulu16_sel::return#11 )
(word~) sin16sb::$11 ← (word) mulu16_sel::return#22
(word) sin16sb::x5#0 ← (word~) sin16sb::$11
(word~) sin16sb::$12 ← (word) sin16sb::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
(word) sin16sb::x5_128#0 ← (word~) sin16sb::$12
(word/signed dword/dword~) sin16sb::$12 ← (word) sin16sb::x5#0 / (byte/signed byte/word/signed word/dword/signed dword) $10
(word) sin16sb::x5_128#0 ← (word/signed dword/dword~) sin16sb::$12
(word~) sin16sb::$13 ← (word) sin16sb::usinx#2 + (word) sin16sb::x5_128#0
(word) sin16sb::usinx#1 ← (word~) sin16sb::$13
(signed word~) sin16sb::$14 ← ((signed word)) (word) sin16sb::usinx#1
@ -1546,7 +1546,7 @@ SYMBOL TABLE SSA
(bool~) sin16sb::$1
(word~) sin16sb::$10
(word~) sin16sb::$11
(word~) sin16sb::$12
(word/signed dword/dword~) sin16sb::$12
(word~) sin16sb::$13
(signed word~) sin16sb::$14
(bool~) sin16sb::$15
@ -1557,7 +1557,7 @@ SYMBOL TABLE SSA
(bool~) sin16sb::$2
(signed word~) sin16sb::$20
(bool~) sin16sb::$3
(word~) sin16sb::$4
(word/signed dword/dword~) sin16sb::$4
(word~) sin16sb::$5
(word~) sin16sb::$6
(word/signed word/dword/signed dword~) sin16sb::$7
@ -1734,7 +1734,7 @@ Alias (signed word*) sin16s_genb::sintab#0 = (signed word*~) sin16s_genb::$3
Alias (dword) sin16s_genb::x#1 = (dword~) sin16s_genb::$4
Alias (word) sin16sb::x#3 = (word) sin16sb::x#5
Alias (word) sin16sb::x#1 = (word~) sin16sb::$17
Alias (word) sin16sb::x1#0 = (word~) sin16sb::$4 (word) sin16sb::x1#1 (word) sin16sb::x1#4 (word) sin16sb::x1#2 (word) sin16sb::x1#3
Alias (word) sin16sb::x1#0 = (word/signed dword/dword~) sin16sb::$4 (word) sin16sb::x1#1 (word) sin16sb::x1#4 (word) sin16sb::x1#2 (word) sin16sb::x1#3
Alias (word) mulu16_sel::return#18 = (word) mulu16_sel::return#7
Alias (byte) sin16sb::isUpper#2 = (byte) sin16sb::isUpper#6 (byte) sin16sb::isUpper#7 (byte) sin16sb::isUpper#5 (byte) sin16sb::isUpper#4 (byte) sin16sb::isUpper#3
Alias (word) sin16sb::x2#0 = (word~) sin16sb::$5
@ -1748,7 +1748,7 @@ Alias (word) mulu16_sel::return#10 = (word) mulu16_sel::return#21
Alias (word) sin16sb::x4#0 = (word~) sin16sb::$10
Alias (word) mulu16_sel::return#11 = (word) mulu16_sel::return#22
Alias (word) sin16sb::x5#0 = (word~) sin16sb::$11
Alias (word) sin16sb::x5_128#0 = (word~) sin16sb::$12
Alias (word) sin16sb::x5_128#0 = (word/signed dword/dword~) sin16sb::$12
Alias (word) sin16sb::usinx#1 = (word~) sin16sb::$13 (word) sin16sb::usinx#3
Alias (signed word) sin16sb::sinx#0 = (signed word~) sin16sb::$14
Alias (word) sin16sb::x#4 = (word) sin16sb::x#7
@ -1971,6 +1971,9 @@ Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++
Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) $10
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,$77)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) $78
Rewriting multiplication to use shift (word) sin16sb::x1#0 ← (word) sin16sb::x#6 * (byte/signed byte/word/signed word/dword/signed dword) 8
Rewriting division to use shift (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 / (byte/signed byte/word/signed word/dword/signed dword) $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @2
Culled Empty Block (label) @5
Culled Empty Block (label) @6

View File

@ -855,8 +855,8 @@ main::@1: scope:[main] from main::@7 main::@9
(byte) main::i#2 ← phi( main::@7/(byte) main::i#0 main::@9/(byte) main::i#1 )
(signed byte) main::sb#0 ← *((signed byte[$c0]) main::sintabb#0 + (byte) main::i#2)
(word~) main::$3 ← ((word)) (byte) main::i#2
(word~) main::$4 ← (word~) main::$3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word*~) main::$5 ← (signed word[$c0]) main::sintabw#0 + (word~) main::$4
(word/signed dword/dword~) main::$4 ← (word~) main::$3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word*~) main::$5 ← (signed word[$c0]) main::sintabw#0 + (word/signed dword/dword~) main::$4
(signed word) main::sw#0 ← *((signed word*~) main::$5)
(byte~) main::$6 ← > (signed word) main::sw#0
(signed byte~) main::$7 ← ((signed byte)) (byte~) main::$6
@ -1093,7 +1093,7 @@ SYMBOL TABLE SSA
(bool~) main::$10
(bool~) main::$14
(word~) main::$3
(word~) main::$4
(word/signed dword/dword~) main::$4
(signed word*~) main::$5
(byte~) main::$6
(signed byte~) main::$7
@ -2145,6 +2145,8 @@ Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++
Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) $10
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,$bf)) goto main::@1 to (byte/word/signed word/dword/signed dword) $c0
Rewriting multiplication to use shift (word/signed dword/dword~) main::$4 ← (word~) main::$3 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @2
Culled Empty Block (label) @5
Culled Empty Block (label) @6
@ -2163,6 +2165,7 @@ Culled Empty Block (label) @41
Successful SSA optimization Pass2CullEmptyBlocks
Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4
Successful SSA optimization Pass2AliasElimination
Inferred type updated to word in [214] (word/signed dword/dword~) main::$4 ← (word~) main::$3 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const word) divr16u::quotient#0
Inlining constant with var siblings (const byte) divr16u::i#0
Inlining constant with var siblings (const word) divr16u::rem#3

View File

@ -28,7 +28,7 @@ sin8u_table: {
.const max = $ff
.label amplitude = max-min
.const sum = min+max
.const mid = (sum>>1)+1
.const mid = sum/2+1
.label step = $12
.label sinx = $11
.label sinx_sc = $f

View File

@ -642,8 +642,8 @@ sin8u_table: scope:[sin8u_table] from main::@1
(word~) sin8u_table::$1 ← ((word)) (byte) sin8u_table::min#1
(word~) sin8u_table::$2 ← (word~) sin8u_table::$1 + (byte) sin8u_table::max#1
(word) sin8u_table::sum#0 ← (word~) sin8u_table::$2
(word~) sin8u_table::$3 ← (word) sin8u_table::sum#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(word/signed dword/dword~) sin8u_table::$4 ← (word~) sin8u_table::$3 + (byte/signed byte/word/signed word/dword/signed dword) 1
(word/signed dword/dword~) sin8u_table::$3 ← (word) sin8u_table::sum#0 / (byte/signed byte/word/signed word/dword/signed dword) 2
(word/signed dword/dword~) sin8u_table::$4 ← (word/signed dword/dword~) sin8u_table::$3 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) sin8u_table::$5 ← ((byte)) (word/signed dword/dword~) sin8u_table::$4
(byte) sin8u_table::mid#0 ← (byte~) sin8u_table::$5
(word) div16u::dividend#0 ← (word) PI2_u4f12#0
@ -1755,7 +1755,7 @@ SYMBOL TABLE SSA
(signed word~) sin8u_table::$20
(byte~) sin8u_table::$21
(byte~) sin8u_table::$22
(word~) sin8u_table::$3
(word/signed dword/dword~) sin8u_table::$3
(word~) sin8u_table::$32
(bool~) sin8u_table::$33
(word/signed dword/dword~) sin8u_table::$4
@ -2335,7 +2335,7 @@ Successful SSA optimization Pass2ConstantIdentification
Constant (const word) divr16u::divisor#0 = div16u::divisor#0
Constant (const byte) mul8u::b#0 = ((byte))mul8su::b#0
Constant (const byte) mul8su::$8 = ((byte))mul8su::b#0
Constant (const word) sin8u_table::$3 = sin8u_table::sum#0>>1
Constant (const word/signed dword/dword) sin8u_table::$3 = sin8u_table::sum#0/2
Successful SSA optimization Pass2ConstantIdentification
Constant (const word/signed dword/dword) sin8u_table::$4 = sin8u_table::$3+1
Successful SSA optimization Pass2ConstantIdentification
@ -2414,11 +2414,11 @@ Constant inlined sin8u_table::sintab#0 = (const byte[$14]) main::sintab#0
Constant inlined $0 = (const byte[]) print_hextab#0
Constant inlined sin8s::isUpper#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined sin8s::isUpper#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin8u_table::$4 = (const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined sin8u_table::$4 = (const word) sin8u_table::sum#0/(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin8u_table::$1 = ((word))(const byte) sin8u_table::min#0
Constant inlined div16u::divisor#0 = (const word) main::tabsize#0
Constant inlined sin8u_table::$3 = (const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined sin8u_table::$3 = (const word) sin8u_table::sum#0/(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined mulu8_sel::select#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul8su::$8 = ((byte))(const byte) mul8su::b#0
Constant inlined div16u::dividend#0 = (const word) PI2_u4f12#0
@ -3581,7 +3581,7 @@ sin8u_table: {
.const max = $ff
.label amplitude = max-min
.const sum = min+max
.const mid = (sum>>1)+1
.const mid = sum/2+1
.label _21 = $39
.label step = $30
.label sinx = $33
@ -5350,7 +5350,7 @@ sin8u_table: {
.const max = $ff
.label amplitude = max-min
.const sum = min+max
.const mid = (sum>>1)+1
.const mid = sum/2+1
.label step = $12
.label sinx = $11
.label sinx_sc = $f
@ -7184,7 +7184,7 @@ FINAL SYMBOL TABLE
(byte) sin8u_table::max
(const byte) sin8u_table::max#0 max = (byte/word/signed word/dword/signed dword) $ff
(byte) sin8u_table::mid
(const byte) sin8u_table::mid#0 mid = ((byte))(const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1
(const byte) sin8u_table::mid#0 mid = ((byte))(const word) sin8u_table::sum#0/(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) sin8u_table::min
(const byte) sin8u_table::min#0 min = (byte/signed byte/word/signed word/dword/signed dword) $a
(byte*) sin8u_table::sintab
@ -7312,7 +7312,7 @@ sin8u_table: {
.const max = $ff
.label amplitude = max-min
.const sum = min+max
.const mid = (sum>>1)+1
.const mid = sum/2+1
.label step = $12
.label sinx = $11
.label sinx_sc = $f

View File

@ -296,7 +296,7 @@
(byte) sin8u_table::max
(const byte) sin8u_table::max#0 max = (byte/word/signed word/dword/signed dword) $ff
(byte) sin8u_table::mid
(const byte) sin8u_table::mid#0 mid = ((byte))(const word) sin8u_table::sum#0>>(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1
(const byte) sin8u_table::mid#0 mid = ((byte))(const word) sin8u_table::sum#0/(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) sin8u_table::min
(const byte) sin8u_table::min#0 min = (byte/signed byte/word/signed word/dword/signed dword) $a
(byte*) sin8u_table::sintab

View File

@ -284,8 +284,8 @@ main::@1: scope:[main] from main::@15 main::@7
(byte) main::s#7 ← phi( main::@15/(byte) main::s#0 main::@7/(byte) main::s#10 )
(byte*) print_char_cursor#81 ← phi( main::@15/(byte*) print_char_cursor#18 main::@7/(byte*) print_char_cursor#78 )
(byte) main::i#2 ← phi( main::@15/(byte) main::i#0 main::@7/(byte) main::i#1 )
(byte~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) main::w1#0 ← *((signed word[]) swords#0 + (byte~) main::$1)
(byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) main::w1#0 ← *((signed word[]) swords#0 + (byte/signed word/word/dword/signed dword~) main::$1)
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@6
@ -295,8 +295,8 @@ main::@2: scope:[main] from main::@1 main::@6
(byte*) print_char_cursor#75 ← phi( main::@1/(byte*) print_char_cursor#81 main::@6/(byte*) print_char_cursor#82 )
(signed word) main::w1#2 ← phi( main::@1/(signed word) main::w1#0 main::@6/(signed word) main::w1#4 )
(byte) main::j#2 ← phi( main::@1/(byte) main::j#0 main::@6/(byte) main::j#1 )
(byte~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(signed word) main::w2#0 ← *((signed word[]) swords#0 + (byte~) main::$2)
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word) main::w2#0 ← *((signed word[]) swords#0 + (byte/signed word/word/dword/signed dword~) main::$2)
(byte) main::op#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@3
main::@3: scope:[main] from main::@2 main::@4
@ -1099,8 +1099,8 @@ SYMBOL TABLE SSA
(signed word) compare::w2#8
(signed word) compare::w2#9
(void()) main()
(byte~) main::$1
(byte~) main::$2
(byte/signed word/word/dword/signed dword~) main::$1
(byte/signed word/word/dword/signed dword~) main::$2
(bool~) main::$4
(bool~) main::$5
(bool~) main::$7
@ -1711,6 +1711,9 @@ Resolved ranged next value main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value if(main::j#1!=rangelast(0,2)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 3
Resolved ranged next value main::i#1 ← ++ main::i#10 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,2)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 3
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_sword::@3
@ -1735,6 +1738,8 @@ Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (signed word) main::w1#2 (signed word) main::w1#0
Redundant Phi (byte) main::i#10 (byte) main::i#2
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [41] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [44] (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const byte) print_char::ch#0
Inlining constant with var siblings (const byte) print_char::ch#3
Inlining constant with var siblings (const byte) print_char::ch#5

View File

@ -247,8 +247,8 @@ main::@1: scope:[main] from main::@15 main::@7
(byte) main::s#7 ← phi( main::@15/(byte) main::s#0 main::@7/(byte) main::s#10 )
(byte*) print_char_cursor#73 ← phi( main::@15/(byte*) print_char_cursor#15 main::@7/(byte*) print_char_cursor#64 )
(byte) main::i#2 ← phi( main::@15/(byte) main::i#0 main::@7/(byte) main::i#1 )
(byte~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(word) main::w1#0 ← *((word[]) words#0 + (byte~) main::$1)
(byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(word) main::w1#0 ← *((word[]) words#0 + (byte/signed word/word/dword/signed dword~) main::$1)
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@6
@ -258,8 +258,8 @@ main::@2: scope:[main] from main::@1 main::@6
(byte*) print_char_cursor#61 ← phi( main::@1/(byte*) print_char_cursor#73 main::@6/(byte*) print_char_cursor#74 )
(word) main::w1#2 ← phi( main::@1/(word) main::w1#0 main::@6/(word) main::w1#4 )
(byte) main::j#2 ← phi( main::@1/(byte) main::j#0 main::@6/(byte) main::j#1 )
(byte~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
(word) main::w2#0 ← *((word[]) words#0 + (byte~) main::$2)
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(word) main::w2#0 ← *((word[]) words#0 + (byte/signed word/word/dword/signed dword~) main::$2)
(byte) main::op#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@3
main::@3: scope:[main] from main::@2 main::@4
@ -992,8 +992,8 @@ SYMBOL TABLE SSA
(word) compare::w2#8
(word) compare::w2#9
(void()) main()
(byte~) main::$1
(byte~) main::$2
(byte/signed word/word/dword/signed dword~) main::$1
(byte/signed word/word/dword/signed dword~) main::$2
(bool~) main::$4
(bool~) main::$5
(bool~) main::$7
@ -1537,6 +1537,9 @@ Resolved ranged next value main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value if(main::j#1!=rangelast(0,2)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 3
Resolved ranged next value main::i#1 ← ++ main::i#10 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,2)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 3
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_word::@2
@ -1558,6 +1561,8 @@ Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (word) main::w1#2 (word) main::w1#0
Redundant Phi (byte) main::i#10 (byte) main::i#2
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [35] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [38] (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inlining constant with var siblings (const byte) print_char::ch#3
Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte) main::s#0

View File

@ -285,8 +285,8 @@ main::@11: scope:[main] from main::@10 main::@12
(byte*) main::screen#10 ← phi( main::@10/(byte*) main::screen#3 main::@12/(byte*) main::screen#4 )
(byte) main::col#4 ← phi( main::@10/(byte) main::col#2 main::@12/(byte) main::col#3 )
(byte) main::row_pressed_bits#3 ← phi( main::@10/(byte) main::row_pressed_bits#4 main::@12/(byte) main::row_pressed_bits#5 )
(byte~) main::$7 ← (byte) main::row_pressed_bits#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::row_pressed_bits#1 ← (byte~) main::$7
(byte/signed word/word/dword/signed dword~) main::$7 ← (byte) main::row_pressed_bits#3 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::row_pressed_bits#1 ← (byte/signed word/word/dword/signed dword~) main::$7
(byte) main::col#1 ← (byte) main::col#4 + rangenext(0,7)
(bool~) main::$8 ← (byte) main::col#1 != rangelast(0,7)
if((bool~) main::$8) goto main::@9
@ -769,7 +769,7 @@ SYMBOL TABLE SSA
(byte~) main::$4
(byte~) main::$5
(bool~) main::$6
(byte~) main::$7
(byte/signed word/word/dword/signed dword~) main::$7
(bool~) main::$8
(byte*~) main::$9
(label) main::@1
@ -892,7 +892,7 @@ Alias (byte*) main::screen#3 = (byte*) main::screen#9 (byte*) main::screen#4
Alias (byte) main::col#2 = (byte) main::col#5 (byte) main::col#3
Alias (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#4 (byte) main::row_pressed_bits#5
Alias (byte) main::row#5 = (byte) main::row#7 (byte) main::row#6
Alias (byte) main::row_pressed_bits#1 = (byte~) main::$7
Alias (byte) main::row_pressed_bits#1 = (byte/signed word/word/dword/signed dword~) main::$7
Alias (byte*) main::screen#10 = (byte*) main::screen#5
Alias (byte) main::row#3 = (byte) main::row#4
Alias (byte*) main::screen#1 = (byte*~) main::$9 (byte*) main::screen#6
@ -1109,6 +1109,8 @@ Resolved ranged next value main::row#1 ← ++ main::row#2 to ++
Resolved ranged comparison value if(main::row#1!=rangelast(0,7)) goto main::@8 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value main::ch#1 ← ++ main::ch#2 to ++
Resolved ranged comparison value if(main::ch#1!=rangelast(0,$3f)) goto main::@16 to (byte/signed byte/word/signed word/dword/signed dword) $40
Rewriting multiplication to use shift (byte) main::row_pressed_bits#1 ← (byte) main::row_pressed_bits#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @4
Culled Empty Block (label) @8
Culled Empty Block (label) main::@3

View File

@ -12,7 +12,7 @@ main: {
b1:
lda #col
sta COLS,x
lda #(2>>1)+1+1
lda #2/2+1+1
sta SCREEN,x
inx
cpx #$65

View File

@ -14,7 +14,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
[6] (byte) main::i#2 ← phi( main::@1/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2
[9] (byte) main::i#1 ← ++ (byte) main::i#2
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $65) goto main::@1
to:main::@return

View File

@ -6,7 +6,7 @@ Identified constant variable (byte*) main::COLS
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
(byte/signed byte/word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed byte/word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) b#0 ← (byte/signed byte/word/signed word/dword/signed dword~) $0
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) $d021
(byte[]) msg#0 ← (const string) $1
@ -178,7 +178,7 @@ Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$8 [36] if((byte) main::i#1!=rangelast(0,$64)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = ((byte*))$400
Constant (const byte) b#0 = 2>>1
Constant (const byte) b#0 = 2/2
Constant (const byte*) BGCOL#0 = ((byte*))$d021
Constant (const byte[]) msg#0 = $1
Constant (const byte[]) arr#0 = { 7, 8, 9 }
@ -219,10 +219,10 @@ Inlining constant with var siblings (const byte) main::i#0
Inlining constant with different constant siblings (const byte) b#0
Inlining constant with different constant siblings (const byte) b#11
Inlining constant with different constant siblings (const byte) b#2
Constant inlined b#2 = ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined b#2 = ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined b#11 = ++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined b#0 = (byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined b#11 = ++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined b#0 = (byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@4(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
@ -262,7 +262,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
[6] (byte) main::i#2 ← phi( main::@1/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1
[8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2
[9] (byte) main::i#1 ← ++ (byte) main::i#2
[10] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $65) goto main::@1
to:main::@return
@ -357,8 +357,8 @@ main: {
lda #col
ldy i
sta COLS,y
//SEG19 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuc1_derefidx_vbuz1=vbuc2
lda #(2>>1)+1+1
//SEG19 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2 -- pbuc1_derefidx_vbuz1=vbuc2
lda #2/2+1+1
ldy i
sta SCREEN,y
//SEG20 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
@ -385,9 +385,9 @@ s: {
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
@ -447,8 +447,8 @@ main: {
//SEG18 [7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #col
sta COLS,x
//SEG19 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuc1_derefidx_vbuxx=vbuc2
lda #(2>>1)+1+1
//SEG19 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2 -- pbuc1_derefidx_vbuxx=vbuc2
lda #2/2+1+1
sta SCREEN,x
//SEG20 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
inx
@ -569,8 +569,8 @@ main: {
//SEG18 [7] *((const byte*) main::COLS#0 + (byte) main::i#2) ← (const byte) main::col#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #col
sta COLS,x
//SEG19 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 -- pbuc1_derefidx_vbuxx=vbuc2
lda #(2>>1)+1+1
//SEG19 [8] *((const byte*) SCREEN#0 + (byte) main::i#2) ← ++++(byte/signed byte/word/signed word/dword/signed dword) 2/(byte/signed byte/word/signed word/dword/signed dword) 2 -- pbuc1_derefidx_vbuxx=vbuc2
lda #2/2+1+1
sta SCREEN,x
//SEG20 [9] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx
inx