#include "gc.h"

/*
* code sequences for multiply by constant
* all sequences start with leading '0'.
* if sequence starts with 'i', then the
*      leading '0' is suppressed.
* '0'  mov r0,r1
* '1'  sub r0,r1
* '2'  sub r1,r0
* '3'  add r0,r1
* '4'  add r1,r0
* '5'  add r0,r0
* '6'  add r1,r1
* 'b'  lsh $2,r0
* 'c'  lsh $3,r0
* 'd'-'h' ...
* 'j'  lsh $2,r1
* 'k'-'p' ...
*/
Multab multab[] =
{
       2, "i5",
       3, "64",
       4, "i55",
       5, "664",
       6, "645",
       7, "c2",
       9, "k4",
       10, "6645",
       11, "66364",
       12, "6455",
       13, "66464",
       14, "6d2",
       15, "d2",
       17, "l4",
       18, "6d4",
       19, "64k4",
       20, "66455",
       21, "664664",
       22, "64c2",
       23, "44c2",
       24, "64c",
       25, "63k4",
       26, "64c4",
       27, "663e2",
       28, "66e2",
       29, "63e2",
       30, "6e2",
       31, "e2",
       33, "m4",
       34, "6e4",
       35, "64l4",
       36, "66e4",
       37, "664k4",
       38, "64k45",
       39, "454c2",
       40, "664c",
       41, "663k4",
       42, "644c4",
       43, "643k4",
       44, "664c4",
       45, "640d2",
       46, "64d2",
       47, "44d2",
       48, "64d",
       49, "63l4",
       50, "64d4",
       51, "640l4",
       52, "646d4",
       53, "643d4",
       54, "6636f2",
       55, "k3f2",
       56, "kf2",
       57, "k2k4",
       58, "636f2",
       59, "663f2",
       60, "66f2",
       61, "63f2",
       62, "6f2",
       63, "f2",
       65, "n4",
       66, "6f4",
       67, "64m4",
       68, "66f4",
       69, "664l4",
       70, "64l45",
       71, "k1f4",
       72, "k4c",
       73, "k4k4",
       74, "664k45",
       75, "6640d2",
       76, "664d2",
       77, "434d2",
       78, "644d2",
       79, "454d2",
       80, "664d",
       81, "663l4",
       82, "644d4",
       83, "643l4",
       84, "664d4",
       85, "6640l4",
       86, "6634l4",
       87, "6443d4",
       88, "6646d4",
       89, "6643d4",
       90, "6406e2",
       91, "643e2",
       92, "646e2",
       93, "640e2",
       94, "64e2",
       95, "44e2",
       96, "64e",
       97, "63m4",
       98, "64e4",
       99, "640m4",
       100, "646e4",
       200, "66f364",
       300, "j40jf2",
       400, "64kg4",
       500, "66h212",
       600, "64m4c4",
       700, "j4c4d2",
       800, "64lh4",
       900, "6464g4",
       1000, "63g2c",
       1100, "j4d2p4",
       1200, "64k4f2",
       1300, "j4n4b4",
       1400, "64j4g2",
       1600, "64d4e",
       1800, "p4c2",
       2000, "63g2d",
       2100, "l4b2o4",
       2200, "k4d4p4",
       2300, "6644h2",
       2400, "j4k4f4",
       2500, "j4e2d4",
       2600, "j40n4c",
       3100, "jd12p2",
       3200, "64d4f",
       3600, "6d1p2",
       3800, "e3k3g2",
       3900, "jf20n4",
       4000, "o4e2",
       4100, "66p455",
       4200, "l4c3e2",
       4300, "l4b1f4",
       4400, "64o4d4",
       4600, "k45h2",
       4700, "k3j4g2",
       4800, "j40d2f",
       5000, "l4c3m4",
       5100, "j40h2b",
       5200, "j40n4d",
       6000, "d1o3h2",
       6100, "o1l4b2",
       6200, "ke12p2",
       6400, "64d4g",
       7200, "66e1p2",
       7400, "m3m4c2",
       7600, "l4f3c2",
       7800, "kg20n4",
       8000, "63g2f",
       8100, "m2b4p4",
       8200, "66p4c",
       8700, "66f4g2",
       8900, "l3j4g4",
       9200, "k45h25",
       9600, "j40d2g",
       9800, "k4f3d4",
};

int     multabsize = sizeof(multab) / sizeof(multab[0]);