From b34ff2bdec05da58f1b7fa38ccb7f9d2dc34fd2d Mon Sep 17 00:00:00 2001 From: David Given Date: Sun, 10 Feb 2019 18:44:47 +0100 Subject: [PATCH] Teach the i80 code generator how to do left shifts by using dad hl; prevents it from calling out to .sli2 for simple shifts. Shrinks Star Trek from 40055 bytes to 39976. --- mach/i80/ncg/table | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/mach/i80/ncg/table b/mach/i80/ncg/table index 046c99963..b0fcf3a6a 100644 --- a/mach/i80/ncg/table +++ b/mach/i80/ncg/table @@ -702,14 +702,33 @@ pat ngi $1==4 kills ALL gen Call {label,".ngi4"} -pat loc sli ($1 == 8) && ($2 == 2) -with hl_or_de -gen move %1.2, %1.1 - mvi %1.2, {const1,0} yields %1 +pat loc sli ($1==1) && ($2==2) + with hlreg + gen + dad hl + yields hl + +pat loc sli ($1>=2) && ($1<=7) && ($2==2) + with hlreg + gen + dad hl + yields hl + leaving + loc $1-1 + sli 2 + +pat loc sli ($1==8) && ($2==2) + with hl_or_de + gen + mov %1.1, %1.2 + mvi %1.2, {const1, 0} + yields %1 pat sli $1==2 -kills ALL -gen Call {label,".sli2"} yields de + kills ALL + gen + Call {label,".sli2"} + yields de pat sli $1==4 kills ALL @@ -761,7 +780,14 @@ kills ALL gen mvi a,{const1,0} Call {label,".dvi4"} -pat slu leaving sli $1 +pat loc slu ($2==2) + leaving + loc $1 + sli $2 + +pat slu + leaving + sli $1 pat loc sru ($1 == 8) && ($2 == 2) with hl_or_de