// Test that the multiplication of a idx*sizeof(element) is reused inside loops // Commodore 64 PRG executable file .file [name="index-sizeof-reuse.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) .const OFFSET_STRUCT_ENTITY_X_VEL = 1 .const OFFSET_STRUCT_ENTITY_SYMBOL = 2 .label VICII_RASTER = $d012 .label VICII_BG_COLOR = $d020 .label SCREEN = $400 .segment Code main: { // Initialize velocities .label v = 2 // Move the entities .label line = 4 .label i1 = 3 // asm sei lda #-1 sta.z v ldx #0 __b1: // for(char i=0;iSCREEN sta.z line+1 lda #0 sta.z i1 __b5: // for(char i=0;i39) lda entities,x cmp #0 bmi __b9 lda entities,x sec sbc #$27+1 bvc !+ eor #$80 !: bmi __b8 __b9: // -entities[i].x_vel lda entities+OFFSET_STRUCT_ENTITY_X_VEL,x eor #$ff clc adc #1 // entities[i].x_vel = -entities[i].x_vel sta entities+OFFSET_STRUCT_ENTITY_X_VEL,x // entities[i].x_pos += entities[i].x_vel clc lda entities,x adc entities+OFFSET_STRUCT_ENTITY_X_VEL,x sta entities,x __b8: // line[entities[i].x_pos] = entities[i].symbol // Draw symbol lda entities+OFFSET_STRUCT_ENTITY_SYMBOL,x ldy entities,x sta (line),y // line +=40 // Next line lda #$28 clc adc.z line sta.z line bcc !+ inc.z line+1 !: // for(char i=0;i