13e12c5d1SDavid du Colombier #include "gc.h" 23e12c5d1SDavid du Colombier 33e12c5d1SDavid du Colombier void 43e12c5d1SDavid du Colombier noretval(int n) 53e12c5d1SDavid du Colombier { 63e12c5d1SDavid du Colombier 73e12c5d1SDavid du Colombier if(n & 1) { 83e12c5d1SDavid du Colombier gins(ANOP, Z, Z); 93e12c5d1SDavid du Colombier p->to.type = REGRET; 103e12c5d1SDavid du Colombier } 113e12c5d1SDavid du Colombier if(n & 2) { 123e12c5d1SDavid du Colombier gins(ANOP, Z, Z); 133e12c5d1SDavid du Colombier p->to.type = FREGRET; 143e12c5d1SDavid du Colombier } 15*4ac975e2SDavid du Colombier if((n&3) == 3) 16*4ac975e2SDavid du Colombier if(thisfn && thisfn->link && typefd[thisfn->link->etype]) 17*4ac975e2SDavid du Colombier gins(AFLDZ, Z, Z); 183e12c5d1SDavid du Colombier } 193e12c5d1SDavid du Colombier 20375daca8SDavid du Colombier /* welcome to commute */ 21375daca8SDavid du Colombier static void 22375daca8SDavid du Colombier commute(Node *n) 23375daca8SDavid du Colombier { 24375daca8SDavid du Colombier Node *l, *r; 25375daca8SDavid du Colombier 26375daca8SDavid du Colombier l = n->left; 27375daca8SDavid du Colombier r = n->right; 28375daca8SDavid du Colombier if(r->complex > l->complex) { 29375daca8SDavid du Colombier n->left = r; 30375daca8SDavid du Colombier n->right = l; 31375daca8SDavid du Colombier } 32375daca8SDavid du Colombier } 33375daca8SDavid du Colombier 34375daca8SDavid du Colombier void 35375daca8SDavid du Colombier indexshift(Node *n) 36375daca8SDavid du Colombier { 37375daca8SDavid du Colombier int g; 38375daca8SDavid du Colombier 39375daca8SDavid du Colombier if(!typechlp[n->type->etype]) 40375daca8SDavid du Colombier return; 41375daca8SDavid du Colombier simplifyshift(n); 42375daca8SDavid du Colombier if(n->op == OASHL && n->right->op == OCONST){ 43375daca8SDavid du Colombier g = vconst(n->right); 44375daca8SDavid du Colombier if(g >= 0 && g < 4) 45375daca8SDavid du Colombier n->addable = 7; 46375daca8SDavid du Colombier } 47375daca8SDavid du Colombier } 48375daca8SDavid du Colombier 493e12c5d1SDavid du Colombier /* 503e12c5d1SDavid du Colombier * calculate addressability as follows 513e12c5d1SDavid du Colombier * NAME ==> 10/11 name+value(SB/SP) 523e12c5d1SDavid du Colombier * REGISTER ==> 12 register 533e12c5d1SDavid du Colombier * CONST ==> 20 $value 543e12c5d1SDavid du Colombier * *(20) ==> 21 value 553e12c5d1SDavid du Colombier * &(10) ==> 13 $name+value(SB) 563e12c5d1SDavid du Colombier * &(11) ==> 1 $name+value(SP) 573e12c5d1SDavid du Colombier * (13) + (20) ==> 13 fold constants 583e12c5d1SDavid du Colombier * (1) + (20) ==> 1 fold constants 593e12c5d1SDavid du Colombier * *(13) ==> 10 back to name 603e12c5d1SDavid du Colombier * *(1) ==> 11 back to name 613e12c5d1SDavid du Colombier * 623e12c5d1SDavid du Colombier * (20) * (X) ==> 7 multiplier in indexing 633e12c5d1SDavid du Colombier * (X,7) + (13,1) ==> 8 adder in indexing (addresses) 643e12c5d1SDavid du Colombier * (8) ==> &9(OINDEX) index, almost addressable 653e12c5d1SDavid du Colombier * 663e12c5d1SDavid du Colombier * calculate complexity (number of registers) 673e12c5d1SDavid du Colombier */ 683e12c5d1SDavid du Colombier void 693e12c5d1SDavid du Colombier xcom(Node *n) 703e12c5d1SDavid du Colombier { 713e12c5d1SDavid du Colombier Node *l, *r; 723e12c5d1SDavid du Colombier int g; 733e12c5d1SDavid du Colombier 743e12c5d1SDavid du Colombier if(n == Z) 753e12c5d1SDavid du Colombier return; 763e12c5d1SDavid du Colombier l = n->left; 773e12c5d1SDavid du Colombier r = n->right; 783e12c5d1SDavid du Colombier n->complex = 0; 793e12c5d1SDavid du Colombier n->addable = 0; 803e12c5d1SDavid du Colombier switch(n->op) { 813e12c5d1SDavid du Colombier case OCONST: 823e12c5d1SDavid du Colombier n->addable = 20; 833e12c5d1SDavid du Colombier break; 843e12c5d1SDavid du Colombier 853e12c5d1SDavid du Colombier case ONAME: 863e12c5d1SDavid du Colombier n->addable = 10; 873e12c5d1SDavid du Colombier if(n->class == CPARAM || n->class == CAUTO) 883e12c5d1SDavid du Colombier n->addable = 11; 893e12c5d1SDavid du Colombier break; 903e12c5d1SDavid du Colombier 913e12c5d1SDavid du Colombier case OREGISTER: 923e12c5d1SDavid du Colombier n->addable = 12; 933e12c5d1SDavid du Colombier break; 943e12c5d1SDavid du Colombier 953e12c5d1SDavid du Colombier case OINDREG: 963e12c5d1SDavid du Colombier n->addable = 12; 973e12c5d1SDavid du Colombier break; 983e12c5d1SDavid du Colombier 993e12c5d1SDavid du Colombier case OADDR: 1003e12c5d1SDavid du Colombier xcom(l); 1013e12c5d1SDavid du Colombier if(l->addable == 10) 1023e12c5d1SDavid du Colombier n->addable = 13; 1033e12c5d1SDavid du Colombier else 1043e12c5d1SDavid du Colombier if(l->addable == 11) 1053e12c5d1SDavid du Colombier n->addable = 1; 1063e12c5d1SDavid du Colombier break; 1073e12c5d1SDavid du Colombier 1083e12c5d1SDavid du Colombier case OADD: 1093e12c5d1SDavid du Colombier xcom(l); 1103e12c5d1SDavid du Colombier xcom(r); 1113e12c5d1SDavid du Colombier if(n->type->etype != TIND) 1123e12c5d1SDavid du Colombier break; 1133e12c5d1SDavid du Colombier 1143e12c5d1SDavid du Colombier switch(r->addable) { 11580ee5cbfSDavid du Colombier case 20: 1163e12c5d1SDavid du Colombier switch(l->addable) { 1173e12c5d1SDavid du Colombier case 1: 11880ee5cbfSDavid du Colombier case 13: 11980ee5cbfSDavid du Colombier commadd: 12080ee5cbfSDavid du Colombier l->type = n->type; 12180ee5cbfSDavid du Colombier *n = *l; 12280ee5cbfSDavid du Colombier l = new(0, Z, Z); 12380ee5cbfSDavid du Colombier *l = *(n->left); 12480ee5cbfSDavid du Colombier l->xoffset += r->vconst; 12580ee5cbfSDavid du Colombier n->left = l; 12680ee5cbfSDavid du Colombier r = n->right; 1273e12c5d1SDavid du Colombier goto brk; 1283e12c5d1SDavid du Colombier } 12980ee5cbfSDavid du Colombier break; 1303e12c5d1SDavid du Colombier 13180ee5cbfSDavid du Colombier case 1: 13280ee5cbfSDavid du Colombier case 13: 13380ee5cbfSDavid du Colombier case 10: 13480ee5cbfSDavid du Colombier case 11: 135375daca8SDavid du Colombier /* l is the base, r is the index */ 13680ee5cbfSDavid du Colombier if(l->addable != 20) 13780ee5cbfSDavid du Colombier n->addable = 8; 13880ee5cbfSDavid du Colombier break; 13980ee5cbfSDavid du Colombier } 14080ee5cbfSDavid du Colombier switch(l->addable) { 14180ee5cbfSDavid du Colombier case 20: 1423e12c5d1SDavid du Colombier switch(r->addable) { 1433e12c5d1SDavid du Colombier case 13: 1443e12c5d1SDavid du Colombier case 1: 14580ee5cbfSDavid du Colombier r = n->left; 14680ee5cbfSDavid du Colombier l = n->right; 14780ee5cbfSDavid du Colombier n->left = l; 14880ee5cbfSDavid du Colombier n->right = r; 14980ee5cbfSDavid du Colombier goto commadd; 1503e12c5d1SDavid du Colombier } 15180ee5cbfSDavid du Colombier break; 15280ee5cbfSDavid du Colombier 1533e12c5d1SDavid du Colombier case 13: 1543e12c5d1SDavid du Colombier case 1: 15580ee5cbfSDavid du Colombier case 10: 15680ee5cbfSDavid du Colombier case 11: 157375daca8SDavid du Colombier /* r is the base, l is the index */ 15880ee5cbfSDavid du Colombier if(r->addable != 20) 1593e12c5d1SDavid du Colombier n->addable = 8; 16080ee5cbfSDavid du Colombier break; 1613e12c5d1SDavid du Colombier } 16280ee5cbfSDavid du Colombier if(n->addable == 8 && !side(n)) { 1633e12c5d1SDavid du Colombier indx(n); 1643e12c5d1SDavid du Colombier l = new1(OINDEX, idx.basetree, idx.regtree); 1653e12c5d1SDavid du Colombier l->scale = idx.scale; 1663e12c5d1SDavid du Colombier l->addable = 9; 1673e12c5d1SDavid du Colombier l->complex = l->right->complex; 1683e12c5d1SDavid du Colombier l->type = l->left->type; 1693e12c5d1SDavid du Colombier n->op = OADDR; 1703e12c5d1SDavid du Colombier n->left = l; 1713e12c5d1SDavid du Colombier n->right = Z; 17280ee5cbfSDavid du Colombier n->addable = 8; 1733e12c5d1SDavid du Colombier break; 1743e12c5d1SDavid du Colombier } 1753e12c5d1SDavid du Colombier break; 1763e12c5d1SDavid du Colombier 177bd389b36SDavid du Colombier case OINDEX: 178bd389b36SDavid du Colombier xcom(l); 179bd389b36SDavid du Colombier xcom(r); 180bd389b36SDavid du Colombier n->addable = 9; 181bd389b36SDavid du Colombier break; 182bd389b36SDavid du Colombier 1833e12c5d1SDavid du Colombier case OIND: 1843e12c5d1SDavid du Colombier xcom(l); 1853e12c5d1SDavid du Colombier if(l->op == OADDR) { 1863e12c5d1SDavid du Colombier l = l->left; 1873e12c5d1SDavid du Colombier l->type = n->type; 1883e12c5d1SDavid du Colombier *n = *l; 1893e12c5d1SDavid du Colombier return; 1903e12c5d1SDavid du Colombier } 1913e12c5d1SDavid du Colombier switch(l->addable) { 1923e12c5d1SDavid du Colombier case 20: 1933e12c5d1SDavid du Colombier n->addable = 21; 1943e12c5d1SDavid du Colombier break; 1953e12c5d1SDavid du Colombier case 1: 1963e12c5d1SDavid du Colombier n->addable = 11; 1973e12c5d1SDavid du Colombier break; 1983e12c5d1SDavid du Colombier case 13: 1993e12c5d1SDavid du Colombier n->addable = 10; 2003e12c5d1SDavid du Colombier break; 2013e12c5d1SDavid du Colombier } 2023e12c5d1SDavid du Colombier break; 2033e12c5d1SDavid du Colombier 2043e12c5d1SDavid du Colombier case OASHL: 2053e12c5d1SDavid du Colombier xcom(l); 2063e12c5d1SDavid du Colombier xcom(r); 207375daca8SDavid du Colombier indexshift(n); 20880ee5cbfSDavid du Colombier break; 2093e12c5d1SDavid du Colombier 2103e12c5d1SDavid du Colombier case OMUL: 2113e12c5d1SDavid du Colombier case OLMUL: 2123e12c5d1SDavid du Colombier xcom(l); 2133e12c5d1SDavid du Colombier xcom(r); 21480ee5cbfSDavid du Colombier g = vlog(l); 21580ee5cbfSDavid du Colombier if(g >= 0) { 21680ee5cbfSDavid du Colombier n->left = r; 21780ee5cbfSDavid du Colombier n->right = l; 21880ee5cbfSDavid du Colombier l = r; 21980ee5cbfSDavid du Colombier r = n->right; 22080ee5cbfSDavid du Colombier } 2213e12c5d1SDavid du Colombier g = vlog(r); 2223e12c5d1SDavid du Colombier if(g >= 0) { 2233e12c5d1SDavid du Colombier n->op = OASHL; 224219b2ee8SDavid du Colombier r->vconst = g; 2257dd7cddfSDavid du Colombier r->type = types[TINT]; 226375daca8SDavid du Colombier indexshift(n); 22780ee5cbfSDavid du Colombier break; 2283e12c5d1SDavid du Colombier } 229375daca8SDavid du Colombier commute(n); 2303e12c5d1SDavid du Colombier break; 2313e12c5d1SDavid du Colombier 2327dd7cddfSDavid du Colombier case OASLDIV: 2337dd7cddfSDavid du Colombier xcom(l); 2347dd7cddfSDavid du Colombier xcom(r); 2357dd7cddfSDavid du Colombier g = vlog(r); 2367dd7cddfSDavid du Colombier if(g >= 0) { 2377dd7cddfSDavid du Colombier n->op = OASLSHR; 2387dd7cddfSDavid du Colombier r->vconst = g; 2397dd7cddfSDavid du Colombier r->type = types[TINT]; 2407dd7cddfSDavid du Colombier } 2417dd7cddfSDavid du Colombier break; 2427dd7cddfSDavid du Colombier 2433e12c5d1SDavid du Colombier case OLDIV: 2443e12c5d1SDavid du Colombier xcom(l); 2453e12c5d1SDavid du Colombier xcom(r); 2463e12c5d1SDavid du Colombier g = vlog(r); 2473e12c5d1SDavid du Colombier if(g >= 0) { 2483e12c5d1SDavid du Colombier n->op = OLSHR; 249219b2ee8SDavid du Colombier r->vconst = g; 2507dd7cddfSDavid du Colombier r->type = types[TINT]; 251375daca8SDavid du Colombier indexshift(n); 25280ee5cbfSDavid du Colombier break; 2537dd7cddfSDavid du Colombier } 2547dd7cddfSDavid du Colombier break; 2557dd7cddfSDavid du Colombier 2567dd7cddfSDavid du Colombier case OASLMOD: 2577dd7cddfSDavid du Colombier xcom(l); 2587dd7cddfSDavid du Colombier xcom(r); 2597dd7cddfSDavid du Colombier g = vlog(r); 2607dd7cddfSDavid du Colombier if(g >= 0) { 2617dd7cddfSDavid du Colombier n->op = OASAND; 2627dd7cddfSDavid du Colombier r->vconst--; 2637dd7cddfSDavid du Colombier } 2647dd7cddfSDavid du Colombier break; 2657dd7cddfSDavid du Colombier 2667dd7cddfSDavid du Colombier case OLMOD: 2677dd7cddfSDavid du Colombier xcom(l); 2687dd7cddfSDavid du Colombier xcom(r); 2697dd7cddfSDavid du Colombier g = vlog(r); 2707dd7cddfSDavid du Colombier if(g >= 0) { 2717dd7cddfSDavid du Colombier n->op = OAND; 2727dd7cddfSDavid du Colombier r->vconst--; 2733e12c5d1SDavid du Colombier } 2743e12c5d1SDavid du Colombier break; 2753e12c5d1SDavid du Colombier 2763e12c5d1SDavid du Colombier case OASMUL: 2773e12c5d1SDavid du Colombier case OASLMUL: 2783e12c5d1SDavid du Colombier xcom(l); 2793e12c5d1SDavid du Colombier xcom(r); 2803e12c5d1SDavid du Colombier g = vlog(r); 2813e12c5d1SDavid du Colombier if(g >= 0) { 2823e12c5d1SDavid du Colombier n->op = OASASHL; 283219b2ee8SDavid du Colombier r->vconst = g; 2843e12c5d1SDavid du Colombier } 2853e12c5d1SDavid du Colombier break; 2863e12c5d1SDavid du Colombier 2877dd7cddfSDavid du Colombier case OLSHR: 2887dd7cddfSDavid du Colombier case OASHR: 2893e12c5d1SDavid du Colombier xcom(l); 2903e12c5d1SDavid du Colombier xcom(r); 291375daca8SDavid du Colombier indexshift(n); 2923e12c5d1SDavid du Colombier break; 2933e12c5d1SDavid du Colombier 2943e12c5d1SDavid du Colombier default: 2953e12c5d1SDavid du Colombier if(l != Z) 2963e12c5d1SDavid du Colombier xcom(l); 2973e12c5d1SDavid du Colombier if(r != Z) 2983e12c5d1SDavid du Colombier xcom(r); 2993e12c5d1SDavid du Colombier break; 3003e12c5d1SDavid du Colombier } 3013e12c5d1SDavid du Colombier brk: 3023e12c5d1SDavid du Colombier if(n->addable >= 10) 3033e12c5d1SDavid du Colombier return; 3043e12c5d1SDavid du Colombier if(l != Z) 3053e12c5d1SDavid du Colombier n->complex = l->complex; 3063e12c5d1SDavid du Colombier if(r != Z) { 3073e12c5d1SDavid du Colombier if(r->complex == n->complex) 3083e12c5d1SDavid du Colombier n->complex = r->complex+1; 3093e12c5d1SDavid du Colombier else 3103e12c5d1SDavid du Colombier if(r->complex > n->complex) 3113e12c5d1SDavid du Colombier n->complex = r->complex; 3123e12c5d1SDavid du Colombier } 3133e12c5d1SDavid du Colombier if(n->complex == 0) 3143e12c5d1SDavid du Colombier n->complex++; 315219b2ee8SDavid du Colombier 316219b2ee8SDavid du Colombier if(com64(n)) 317219b2ee8SDavid du Colombier return; 318219b2ee8SDavid du Colombier 3193e12c5d1SDavid du Colombier switch(n->op) { 3203e12c5d1SDavid du Colombier 3213e12c5d1SDavid du Colombier case OFUNC: 3223e12c5d1SDavid du Colombier n->complex = FNX; 3233e12c5d1SDavid du Colombier break; 3243e12c5d1SDavid du Colombier 3253e12c5d1SDavid du Colombier case OLMOD: 3263e12c5d1SDavid du Colombier case OMOD: 3273e12c5d1SDavid du Colombier case OLMUL: 3283e12c5d1SDavid du Colombier case OLDIV: 3293e12c5d1SDavid du Colombier case OMUL: 3303e12c5d1SDavid du Colombier case ODIV: 3313e12c5d1SDavid du Colombier case OASLMUL: 3323e12c5d1SDavid du Colombier case OASLDIV: 3333e12c5d1SDavid du Colombier case OASLMOD: 3343e12c5d1SDavid du Colombier case OASMUL: 3353e12c5d1SDavid du Colombier case OASDIV: 3363e12c5d1SDavid du Colombier case OASMOD: 3373e12c5d1SDavid du Colombier if(r->complex >= l->complex) { 3383e12c5d1SDavid du Colombier n->complex = l->complex + 3; 3393e12c5d1SDavid du Colombier if(r->complex > n->complex) 3403e12c5d1SDavid du Colombier n->complex = r->complex; 3413e12c5d1SDavid du Colombier } else { 3423e12c5d1SDavid du Colombier n->complex = r->complex + 3; 3433e12c5d1SDavid du Colombier if(l->complex > n->complex) 3443e12c5d1SDavid du Colombier n->complex = l->complex; 3453e12c5d1SDavid du Colombier } 3463e12c5d1SDavid du Colombier break; 3473e12c5d1SDavid du Colombier 3483e12c5d1SDavid du Colombier case OLSHR: 3493e12c5d1SDavid du Colombier case OASHL: 3503e12c5d1SDavid du Colombier case OASHR: 3513e12c5d1SDavid du Colombier case OASLSHR: 3523e12c5d1SDavid du Colombier case OASASHL: 3533e12c5d1SDavid du Colombier case OASASHR: 3543e12c5d1SDavid du Colombier if(r->complex >= l->complex) { 3553e12c5d1SDavid du Colombier n->complex = l->complex + 2; 3563e12c5d1SDavid du Colombier if(r->complex > n->complex) 3573e12c5d1SDavid du Colombier n->complex = r->complex; 3583e12c5d1SDavid du Colombier } else { 3593e12c5d1SDavid du Colombier n->complex = r->complex + 2; 3603e12c5d1SDavid du Colombier if(l->complex > n->complex) 3613e12c5d1SDavid du Colombier n->complex = l->complex; 3623e12c5d1SDavid du Colombier } 3633e12c5d1SDavid du Colombier break; 3643e12c5d1SDavid du Colombier 3653e12c5d1SDavid du Colombier case OADD: 3663e12c5d1SDavid du Colombier case OXOR: 3673e12c5d1SDavid du Colombier case OAND: 3683e12c5d1SDavid du Colombier case OOR: 3693e12c5d1SDavid du Colombier /* 3703e12c5d1SDavid du Colombier * immediate operators, make const on right 3713e12c5d1SDavid du Colombier */ 3723e12c5d1SDavid du Colombier if(l->op == OCONST) { 3733e12c5d1SDavid du Colombier n->left = r; 3743e12c5d1SDavid du Colombier n->right = l; 3753e12c5d1SDavid du Colombier } 3763e12c5d1SDavid du Colombier break; 3773e12c5d1SDavid du Colombier 3783e12c5d1SDavid du Colombier case OEQ: 3793e12c5d1SDavid du Colombier case ONE: 3803e12c5d1SDavid du Colombier case OLE: 3813e12c5d1SDavid du Colombier case OLT: 3823e12c5d1SDavid du Colombier case OGE: 3833e12c5d1SDavid du Colombier case OGT: 3843e12c5d1SDavid du Colombier case OHI: 3853e12c5d1SDavid du Colombier case OHS: 3863e12c5d1SDavid du Colombier case OLO: 3873e12c5d1SDavid du Colombier case OLS: 3883e12c5d1SDavid du Colombier /* 3893e12c5d1SDavid du Colombier * compare operators, make const on left 3903e12c5d1SDavid du Colombier */ 3913e12c5d1SDavid du Colombier if(r->op == OCONST) { 3923e12c5d1SDavid du Colombier n->left = r; 3933e12c5d1SDavid du Colombier n->right = l; 3943e12c5d1SDavid du Colombier n->op = invrel[relindex(n->op)]; 3953e12c5d1SDavid du Colombier } 3963e12c5d1SDavid du Colombier break; 3973e12c5d1SDavid du Colombier } 3983e12c5d1SDavid du Colombier } 3993e12c5d1SDavid du Colombier 4003e12c5d1SDavid du Colombier void 4013e12c5d1SDavid du Colombier indx(Node *n) 4023e12c5d1SDavid du Colombier { 4033e12c5d1SDavid du Colombier Node *l, *r; 4043e12c5d1SDavid du Colombier 4053e12c5d1SDavid du Colombier if(debug['x']) 4063e12c5d1SDavid du Colombier prtree(n, "indx"); 4073e12c5d1SDavid du Colombier 4083e12c5d1SDavid du Colombier l = n->left; 4093e12c5d1SDavid du Colombier r = n->right; 41080ee5cbfSDavid du Colombier if(l->addable == 1 || l->addable == 13 || r->complex > l->complex) { 4113e12c5d1SDavid du Colombier n->right = l; 4123e12c5d1SDavid du Colombier n->left = r; 4133e12c5d1SDavid du Colombier l = r; 4143e12c5d1SDavid du Colombier r = n->right; 4153e12c5d1SDavid du Colombier } 4163e12c5d1SDavid du Colombier if(l->addable != 7) { 4173e12c5d1SDavid du Colombier idx.regtree = l; 4183e12c5d1SDavid du Colombier idx.scale = 1; 4193e12c5d1SDavid du Colombier } else 4203e12c5d1SDavid du Colombier if(l->right->addable == 20) { 4213e12c5d1SDavid du Colombier idx.regtree = l->left; 422219b2ee8SDavid du Colombier idx.scale = 1 << l->right->vconst; 4233e12c5d1SDavid du Colombier } else 4243e12c5d1SDavid du Colombier if(l->left->addable == 20) { 4253e12c5d1SDavid du Colombier idx.regtree = l->right; 426219b2ee8SDavid du Colombier idx.scale = 1 << l->left->vconst; 4273e12c5d1SDavid du Colombier } else 4283e12c5d1SDavid du Colombier diag(n, "bad index"); 4293e12c5d1SDavid du Colombier 4303e12c5d1SDavid du Colombier idx.basetree = r; 4313e12c5d1SDavid du Colombier if(debug['x']) { 4323e12c5d1SDavid du Colombier print("scale = %d\n", idx.scale); 4333e12c5d1SDavid du Colombier prtree(idx.regtree, "index"); 4343e12c5d1SDavid du Colombier prtree(idx.basetree, "base"); 4353e12c5d1SDavid du Colombier } 4363e12c5d1SDavid du Colombier } 437