diff --git a/compiler/res/prog8lib/prog8lib.p8 b/compiler/res/prog8lib/prog8lib.p8 index 4f1949ae1..7739f6631 100644 --- a/compiler/res/prog8lib/prog8lib.p8 +++ b/compiler/res/prog8lib/prog8lib.p8 @@ -1266,6 +1266,25 @@ mul_byte_3 .proc sta c64.ESTACK_LO+1,x rts .pend + +mul_word_3 .proc + ; W + W*2 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + clc + lda c64.ESTACK_LO+1,x + adc c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.ESTACK_HI+1,x + adc c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_5 .proc ; X + X*4 @@ -1277,6 +1296,27 @@ mul_byte_5 .proc sta c64.ESTACK_LO+1,x rts .pend + +mul_word_5 .proc + ; W + W*4 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + clc + lda c64.ESTACK_LO+1,x + adc c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.ESTACK_HI+1,x + adc c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_6 .proc ; X*2 + X*4 @@ -1289,7 +1329,31 @@ mul_byte_6 .proc sta c64.ESTACK_LO+1,x rts .pend - + +mul_word_6 .proc + ; W*2 + W*4 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + lda c64.SCRATCH_ZPWORD1 + sta c64.SCRATCH_ZPWORD2 + lda c64.SCRATCH_ZPWORD1+1 + sta c64.SCRATCH_ZPWORD2+1 + asl c64.SCRATCH_ZPWORD2 + rol c64.SCRATCH_ZPWORD2+1 + clc + lda c64.SCRATCH_ZPWORD1 + adc c64.SCRATCH_ZPWORD2 + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + adc c64.SCRATCH_ZPWORD2+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_7 .proc ; X*8 - X lda c64.ESTACK_LO+1,x @@ -1302,6 +1366,29 @@ mul_byte_7 .proc rts .pend +mul_word_7 .proc + ; W*8 - W + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + lda c64.SCRATCH_ZPWORD1 + sec + lda c64.SCRATCH_ZPWORD1 + sbc c64.ESTACK_LO+1,x + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + sbc c64.ESTACK_HI+1,x + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_9 .proc ; X + X*8 lda c64.ESTACK_LO+1,x @@ -1314,6 +1401,28 @@ mul_byte_9 .proc rts .pend +mul_word_9 .proc + ; W + W*8 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + clc + lda c64.ESTACK_LO+1,x + adc c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.ESTACK_HI+1,x + adc c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_10 .proc ; X + X + X*8 lda c64.ESTACK_LO+1,x @@ -1322,11 +1431,38 @@ mul_byte_10 .proc asl a clc adc c64.ESTACK_LO+1,x + clc adc c64.ESTACK_LO+1,x sta c64.ESTACK_LO+1,x rts .pend +mul_word_10 .proc + ; W*2 + W*8 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + lda c64.SCRATCH_ZPWORD1 + sta c64.SCRATCH_ZPWORD2 + lda c64.SCRATCH_ZPWORD1+1 + sta c64.SCRATCH_ZPWORD2+1 + asl c64.SCRATCH_ZPWORD2 + rol c64.SCRATCH_ZPWORD2+1 + asl c64.SCRATCH_ZPWORD2 + rol c64.SCRATCH_ZPWORD2+1 + clc + lda c64.SCRATCH_ZPWORD1 + adc c64.SCRATCH_ZPWORD2 + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + adc c64.SCRATCH_ZPWORD2+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_11 .proc ; X + X + X + X*8 lda c64.ESTACK_LO+1,x @@ -1336,12 +1472,16 @@ mul_byte_11 .proc asl a clc adc c64.SCRATCH_ZPREG + clc adc c64.SCRATCH_ZPREG + clc adc c64.SCRATCH_ZPREG sta c64.ESTACK_LO+1,x rts .pend +; mul_word_11 is skipped (too much code) + mul_byte_12 .proc ; X*4 + X*8 lda c64.ESTACK_LO+1,x @@ -1354,7 +1494,33 @@ mul_byte_12 .proc sta c64.ESTACK_LO+1,x rts .pend - + +mul_word_12 .proc + ; W*4 + W*8 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + lda c64.SCRATCH_ZPWORD1 + sta c64.SCRATCH_ZPWORD2 + lda c64.SCRATCH_ZPWORD1+1 + sta c64.SCRATCH_ZPWORD2+1 + asl c64.SCRATCH_ZPWORD2 + rol c64.SCRATCH_ZPWORD2+1 + clc + lda c64.SCRATCH_ZPWORD1 + adc c64.SCRATCH_ZPWORD2 + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + adc c64.SCRATCH_ZPWORD2+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_13 .proc ; X*16 - X -X -X lda c64.ESTACK_LO+1,x @@ -1365,12 +1531,16 @@ mul_byte_13 .proc asl a sec sbc c64.SCRATCH_ZPREG + sec sbc c64.SCRATCH_ZPREG + sec sbc c64.SCRATCH_ZPREG sta c64.ESTACK_LO+1,x rts .pend +; mul_word_13 is skipped (too much code) + mul_byte_14 .proc ; X*16 - X -X lda c64.ESTACK_LO+1,x @@ -1380,11 +1550,14 @@ mul_byte_14 .proc asl a sec sbc c64.ESTACK_LO+1,x + sec sbc c64.ESTACK_LO+1,x sta c64.ESTACK_LO+1,x rts .pend +; mul_word_14 is skipped (too much code) + mul_byte_15 .proc ; X*16 - X lda c64.ESTACK_LO+1,x @@ -1399,6 +1572,30 @@ mul_byte_15 .proc rts .pend +mul_word_15 .proc + ; W*16 - W + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + sec + lda c64.SCRATCH_ZPWORD1 + sbc c64.ESTACK_LO+1,x + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + sbc c64.ESTACK_HI+1,x + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_20 .proc ; X*4 + X*16 lda c64.ESTACK_LO+1,x @@ -1412,7 +1609,35 @@ mul_byte_20 .proc sta c64.ESTACK_LO+1,x rts .pend - + +mul_word_20 .proc + ; W*4 + W*16 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + lda c64.SCRATCH_ZPWORD1 + sta c64.SCRATCH_ZPWORD2 + lda c64.SCRATCH_ZPWORD1+1 + sta c64.SCRATCH_ZPWORD2+1 + asl c64.SCRATCH_ZPWORD2 + rol c64.SCRATCH_ZPWORD2+1 + asl c64.SCRATCH_ZPWORD2 + rol c64.SCRATCH_ZPWORD2+1 + clc + lda c64.SCRATCH_ZPWORD1 + adc c64.SCRATCH_ZPWORD2 + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + adc c64.SCRATCH_ZPWORD2+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_25 .proc ; X + X*8 + X*16 lda c64.ESTACK_LO+1,x @@ -1423,11 +1648,43 @@ mul_byte_25 .proc asl a clc adc c64.SCRATCH_ZPREG + clc adc c64.ESTACK_LO+1,x sta c64.ESTACK_LO+1,x rts .pend +mul_word_25 .proc + ; W + W*8 + W*16 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + clc + lda c64.ESTACK_LO+1,x + adc c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.ESTACK_HI+1,x + adc c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + clc + lda c64.ESTACK_LO+1,x + adc c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.ESTACK_HI+1,x + adc c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + rts + .pend + mul_byte_40 .proc ; X*8 + X*32 lda c64.ESTACK_LO+1,x @@ -1442,6 +1699,37 @@ mul_byte_40 .proc sta c64.ESTACK_LO+1,x rts .pend + +mul_word_40 .proc + ; W*8 + W*32 + lda c64.ESTACK_LO+1,x + sta c64.SCRATCH_ZPWORD1 + lda c64.ESTACK_HI+1,x + sta c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + lda c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + asl c64.SCRATCH_ZPWORD1 + rol c64.SCRATCH_ZPWORD1+1 + clc + lda c64.ESTACK_LO+1,x + adc c64.SCRATCH_ZPWORD1 + sta c64.ESTACK_LO+1,x + lda c64.ESTACK_HI+1,x + adc c64.SCRATCH_ZPWORD1+1 + sta c64.ESTACK_HI+1,x + rts + .pend + }} diff --git a/compiler/src/prog8/compiler/target/c64/AsmGen.kt b/compiler/src/prog8/compiler/target/c64/AsmGen.kt index d1caa0fcb..7c4fa3f66 100644 --- a/compiler/src/prog8/compiler/target/c64/AsmGen.kt +++ b/compiler/src/prog8/compiler/target/c64/AsmGen.kt @@ -924,32 +924,28 @@ class AsmGen(val options: CompilationOptions, val program: IntermediateProgram, private fun optimizedIntMultiplicationsOnStack(mulIns: Instruction, amount: Int): String? { if(mulIns.opcode == Opcode.MUL_B || mulIns.opcode==Opcode.MUL_UB) { - when(amount) { - 0,1,2,4,8,16,32,64,128,256 -> throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already") - 3,5,6,7,9,10,11,12,13,14,15,20,25,40 -> return " jsr math.mul_byte_$amount" - else -> {} - } + if(amount in setOf(0,1,2,4,8,16,32,64,128,256)) + throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already") - if(mulIns.opcode == Opcode.MUL_B) { - when(amount) { - -3,-5,-6,-7,-9,-10,-11,-12,-13,-14,-15,-20,-25,-40 -> return " jsr prog8_lib.neg_b | jsr math.mul_byte_${-amount}" - else -> {} - } - } + if(amount in setOf(3,5,6,7,9,10,11,12,13,14,15,20,25,40)) + return " jsr math.mul_byte_$amount" + + if(mulIns.opcode == Opcode.MUL_B && amount in setOf(-3,-5,-6,-7,-9,-10,-11,-12,-13,-14,-15,-20,-25,-40)) + return " jsr prog8_lib.neg_b | jsr math.mul_byte_${-amount}" } - else if(mulIns.opcode == Opcode.MUL_W || mulIns.opcode==Opcode.MUL_UW) { - when(amount) { - 0,1,2,4,8,16,32,64,128,256 -> throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already") - 3,5,6,7,9,10,11,12,13,14,15,20,25,40 -> return " jsr math.mul_word_$amount" - else -> {} - } - - if(mulIns.opcode == Opcode.MUL_W) { - when(amount) { - -3,-5,-6,-7,-9,-10,-11,-12,-13,-14,-15,-20,-25,-40 -> return " jsr prog8_lib.neg_w | jsr math.mul_word_${-amount}" - else -> {} - } - } + else if(mulIns.opcode == Opcode.MUL_UW) { + if(amount in setOf(0,1,2,4,8,16,32,64,128,256)) + throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already") + if(amount in setOf(3,5,6,7,9,10,12,15,20,25,40)) + return " jsr math.mul_word_$amount" + } + else if(mulIns.opcode == Opcode.MUL_W) { + if(amount in setOf(0,1,2,4,8,16,32,64,128,256)) + throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already") + if(amount in setOf(3,5,6,7,9,10,12,15,20,25,40)) + return " jsr math.mul_word_$amount" + if(amount in setOf(-3,-5,-6,-7,-9,-10,-12,-15,-20,-25,-40)) + return " jsr prog8_lib.neg_w | jsr math.mul_word_${-amount}" } return null diff --git a/examples/cube3d.p8 b/examples/cube3d.p8 index da178850e..cd07ed314 100644 --- a/examples/cube3d.p8 +++ b/examples/cube3d.p8 @@ -66,7 +66,7 @@ for ubyte i in 0 to len(xcoor)-1 { rotatedx[i] = (Axx*xcoor[i] + Axy*ycoor[i] + Axz*zcoor[i]) / 128 - rotatedy[i] =(Ayx*xcoor[i] + Ayy*ycoor[i] + Ayz*zcoor[i]) / 128 + rotatedy[i] = (Ayx*xcoor[i] + Ayy*ycoor[i] + Ayz*zcoor[i]) / 128 rotatedz[i] = (Azx*xcoor[i] + Azy*ycoor[i] + Azz*zcoor[i]) / 128 } } diff --git a/examples/test.p8 b/examples/test.p8 index ec9b58f97..3e6b7ccdb 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -1,5 +1,4 @@ %import c64utils -%import c64flt ~ main { @@ -13,23 +12,520 @@ uword uw2 word w = 1000 word w2 - float f1 = 1.1 - float f2 = 2.2 - b2 = j + (-1) - b2 = (-1) + j - b2 = j - (-1) - b2 = (-1) -j ; should not be reordered - b2 = j+1 - b2 = 1+j - b2 = 1-j ; should not be reordered +; i=10 +; ub2=i*1 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*2 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*3 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*4 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*5 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*6 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*7 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*8 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*9 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*10 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*11 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*12 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*13 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*14 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*15 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*16 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*17 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*18 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*19 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*20 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*21 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*22 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*23 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*24 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; ub2=i*25 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; +; i=5 +; ub2=i*40 +; c64scr.print_ub(ub2) +; c64.CHROUT('\n') +; +; c64.CHROUT('\n') +; +; +; j=5 +; b2=j*1 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*2 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*3 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*4 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*5 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*6 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*7 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*8 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*9 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*10 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*11 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*12 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*13 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*14 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*15 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*16 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*17 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*18 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*19 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*20 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*21 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*22 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*23 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*24 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*25 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; +; j=3 +; b2=j*40 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; +; c64.CHROUT('\n') +; +; +; ; multiplication by negative values +; j=5 +; b2=j*-1 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-2 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-3 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-4 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-5 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-6 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-7 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-8 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-9 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-10 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-11 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-12 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-13 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-14 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-15 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-16 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-17 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-18 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-19 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-20 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-21 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-22 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-23 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-24 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; b2=j*-25 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; +; j=3 +; b2=j*-40 +; c64scr.print_b(b2) +; c64.CHROUT('\n') +; +; c64.CHROUT('\n') + + + ;@todo the same, for uword and word + + uw=1000 + uw2=uw*1 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*2 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*3 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*4 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*5 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*6 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*7 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*8 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*9 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*10 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*11 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*12 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*13 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*14 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*15 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*16 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*17 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*18 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*19 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*20 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*21 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*22 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*23 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*24 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + uw2=uw*25 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + + uw=500 + uw2=uw*40 + c64scr.print_uw(uw2) + c64.CHROUT('\n') + + c64.CHROUT('\n') + + + w=500 + w2=w*1 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*2 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*3 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*4 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*5 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*6 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*7 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*8 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*9 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*10 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*11 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*12 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*13 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*14 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*15 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*16 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*17 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*18 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*19 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*20 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*21 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*22 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*23 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*24 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*25 + c64scr.print_w(w2) + c64.CHROUT('\n') + + w=500 + w2=w*40 + c64scr.print_w(w2) + c64.CHROUT('\n') + + c64.CHROUT('\n') + + + ; multuwpluwcatuwon by negatuwve values + w=500 + w2=w*-1 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-2 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-3 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-4 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-5 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-6 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-7 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-8 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-9 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-10 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-11 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-12 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-13 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-14 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-15 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-16 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-17 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-18 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-19 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-20 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-21 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-22 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-23 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-24 + c64scr.print_w(w2) + c64.CHROUT('\n') + w2=w*-25 + c64scr.print_w(w2) + c64.CHROUT('\n') + + w=500 + w2=w*-40 + c64scr.print_w(w2) + c64.CHROUT('\n') + + c64.CHROUT('\n') + - j = j + (-1) - j = (-1) + j - j = j - (-1) - j = (-1) -j ; should not be reordered - j = j+1 - j = 1+j - j = 1-j ; should not be reordered } }