changeset 435:d3e6359f8501

loprtc LLSHIFT....
author kono
date Thu, 11 Nov 2004 00:39:37 +0900
parents 6927ec51c1d7
children d92786033042
files Changes mc-code-ia32.c mc-code-powerpc.c mc-codegen.c mc.h test/code-gen.c
diffstat 6 files changed, 473 insertions(+), 249 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Wed Nov 03 18:50:51 2004 +0900
+++ b/Changes	Thu Nov 11 00:39:37 2004 +0900
@@ -6413,5 +6413,146 @@
 のと、コードがでかくなってしまう。
 
 並列代入も、もう少し考えるべきだな。
-
-(MIPSが、このコードだとうまく動かないみたいだね...)
+   code f(int a,struct b) {
+       goto g(b,a);
+   }
+みたいな場合だね。
+
+分解してから、もう一度、memcpy にまとめるという手もあるけど...
+代入ベースではなくて、swap base の置換にする?
+   for(i) swap(a[i],b[i]);
+みたいな感じ?
+   code f(struct a,struct b) {
+       goto g(b,a);
+   }
+みたいな場合は、そんなのが望ましいが...
+
+分解して巡回依存を解消して、address でsort すれば... memcpy
+は検出できるはずだけど...
+
+あ、そうか、巡回依存は、基本的にswapで解決できるはず。
+    copy(a,b)
+    swap(a,b)
+の組合せで、最適な結果が得られるはず。そうすれば、saveとか
+をしなくてすむ。
+     (a,b,c) <= (b,c,a)
+は、
+     swap(a,b); swap(c,a);
+となる? あれ?
+
+case triple
+       a     b       c
+     |---||-----||---------| 
+        b       c        a
+     |-----||---------||---|
+
+うーん、
+
+     circular_dependency =>   smallest dependent element
+                              singleton or not
+
+     swith(circula_depent(&small)) {
+     case CIRCULAR_DEPEND:  save(small); remove(small); break;
+     case DEPEND_SINGLETON:  memcpy(small); break;
+     default: continue; // try another
+     }
+
+これだと、a がsave, b がsaveで、c がsignleton ということになる。
+いや、b もsingleton になるかな? b&c を一つのmemcpyにまとめる
+のは、それほど意味はないが...
+
+これでも、
+case eq
+         a          b
+     |---------|---------| 
+         b          a
+     |---------|---------| 
+は、save code が出てしまう。また、上の場合でも、a がでかい場合
+があるよね。本来、
+     one integeter save
+で全部できるはず。(お手玉swap) で、分解すればお手玉swap codeは出る。
+
+memcpy するためには、その先を全部saveしないとだめ。だから、memcpy
+とは両立しない。うん。だから、swap operation にするのが良い。が、
+case triple をswap operation で解決する方法が良くわからない。
+       a     b       c
+     |123||45678||9abcdefgh| 
+     |-23||45678||9abcdefgh| {1}
+     |423||-5678||9abcdefgh| {1}
+ってな感じかぁ。これは、space/operation trade off なの?
+       a     b       c
+     |123||45678||9abcdefgh| 
+     |-23||45678||9abcdefgh| {1}
+     |4-3||15678||9abcdefgh| {2}
+     |45-||12678||9abcdefgh| {3}
+     |456||-2378||9abcdefgh| {1}
+     |456||7-318||9abcdefgh| {2}
+     |45678||-12||9abcdefgh| {3}
+     |45678||9-2||3abcdefgh| {1}
+     |45678||9a-||31bcdefgh| {2}
+     |45678||9ab-||12cdefgh| {3}
+     |45678||9abc-||23defgh| {1}
+     |45678||9abcd-||31efgh| {2}
+     |45678||9abcde-||12fgh| {3}
+     |45678||9abcdef-||23gh| {1}
+     |45678||9abcdefg-||31h| {2}
+     |45678||9abcdefgh||-12| {3}
+     |45678||9abcdefgh||1-2| {3}
+     |45678||9abcdefgh||12-| {3}
+     |45678||9abcdefgh||123| {-}
+       b        c        a
+で、できるにはできるんだが....
+
+これと、memcpyとどっちが速いかはアーキテクチャとmemcpyによる。
+
+だから、
+    ある程度、小さい構造体は分解
+    大きなものは、singleton/smallest detection をまずやる
+    save が大きすぎるときには、circular dependent 内部でお手玉を出す
+ってな感じですかね。
+
+お手玉なんだけど、
+       a   b       c
+      |-||---||-------|
+      123456789abcdefgh 
+       a b1    c     b2    c_t + c_s をswap
+      |-||||-------||-|
+      123459abcdefgh678 
+      b2 b1    c     a     a_t + b2  をswap
+      |-||||-------||-|
+      678459abcdefgh123 
+        b     c      a     b2,b1 をswap
+      |---||-------||-|
+      456789abcdefgh123 
+ってな感じで大きなものからswapかな。こうすれば自動的に分割される
+ので、分解は必要なくなる?
+
+     circular_dependency =>   smallest dependent element
+                              singleton or not
+
+     swith(circula_depent(&small,&large_conflict)) {
+     case CIRCULAR_DEPEND:  
+	if (size(small) < SAVE_MAX) {
+	    save(small); remove(small); break;
+	} else {
+	    swap_divide(large_conflict);
+	    reposition(conflict);
+	    remove(large);
+	    break;
+	}
+     case DEPEND_SINGLETON:  memmove(small); break;
+     default: continue; // try another
+     }
+
+     swap:     ld  r0,(to);
+               ld  r1,(from);
+               st  r0,(from++);
+	       st  r1,(to++);
+               if (cnt-->0) goto swap
+
+って感じ? swap された最後が、どういうパターンになるかは、ちょっと
+面白い問題だけどね。
+
+Thu Nov  4 10:15:29 JST 2004
+
+あ、なんか long long の定数シフトで > 32 の場合を忘れているね。
--- a/mc-code-ia32.c	Wed Nov 03 18:50:51 2004 +0900
+++ b/mc-code-ia32.c	Thu Nov 11 00:39:37 2004 +0900
@@ -158,6 +158,9 @@
 #define REG_LCREG     8
 #define REG_L     9
 
+#define regv_l(r)    (virtual(r==REG_L?REG_ESI:REG_EAX))
+#define regv_h(r)    (virtual(r==REG_L?REG_EDI:REG_EDX))
+
 
 #define DATA_REG 0    
 #define POINTER_REG 3    
@@ -2836,7 +2839,7 @@
 	printf("\tmovl %%ecx,4(%%esp)\n");
 	printf("\tpopl %%ecx\n");
         printf("\tshrdl %%edx,%%eax\n");
-        printf("\tsarl %%cl,%%eax\n");
+        printf("\tsarl %%cl,%%edx\n");
         printf("\ttestb $32,%%cl\n");
 	printf("\tje\t_%d\n",(lb=fwdlabel()));
         printf("\tmovl %%edx,%%eax\n");
@@ -2849,7 +2852,7 @@
 	printf("\tmovl %%ecx,4(%%esp)\n");
 	printf("\tpopl %%ecx\n");
         printf("\tshrdl %%edx,%%eax\n");
-        printf("\tshrl %%cl,%%eax\n");
+        printf("\tshrl %%cl,%%edx\n");
         printf("\ttestb $32,%%cl\n");
 	printf("\tje\t_%d\n",(lb=fwdlabel()));
         printf("\tmovl %%edx,%%eax\n");
@@ -2919,7 +2922,7 @@
     case LULSHIFT:
     case LRSHIFT:
     case LURSHIFT:
-	return (0<=l&&l<=32);
+	return (0<=l&&l<=63);
     case LADD:
     case LSUB:
     case LBAND:
@@ -2933,7 +2936,7 @@
 
 void loprtc(int op,int reg,int e) {
     char *opl,*oph;
-    int vl;
+    int vl,il;
     int vh;
     long long l;
 
@@ -2943,6 +2946,7 @@
 
     vl = code_l1(l);
     vh = code_l2(l);
+    il = l;
 
     use_longlong(reg);
     opl = 0;
@@ -2950,16 +2954,49 @@
     switch(op) {
     case LLSHIFT:
     case LULSHIFT:
+	if (il==0) return;
+	else if (il==32) {
+	    code_register(regv_l(reg),regv_h(reg));
+	    code_const(0,regv_l(reg));
+	    return;
+	} else if (il>32) {
+	    code_register(regv_l(reg),regv_h(reg));
+	    printf("\tsall $%d,%s\n",(int)il-32,l_edx(reg));
+	    code_const(0,regv_l(reg));
+	    return;
+	}
         printf("\tshldl $%d,%s,%s\n",vl,l_eax(reg),l_edx(reg));
-        printf("\tsall $%d,%s\n",vl,l_eax(reg));
+        printf("\tsall $%d,%s\n",(int)il,l_eax(reg));
 	return;
     case LRSHIFT:
-        printf("\tshrdl $%d,%s,%s\n",vl,l_edx(reg),l_eax(reg));
-        printf("\tsarl $%d,%s\n",vl,l_edx(reg));
+	if (il==0) return;
+	else if (il==32) {
+	    code_register(regv_h(reg),regv_l(reg));
+	    code_i2ll(reg);
+	    return;
+	} else if (il>32) {
+	    code_register(regv_h(reg),regv_l(reg));
+	    printf("\tsarl $%d,%s\n",(int)il-32,l_eax(reg));
+	    code_i2ll(reg);
+	    return;
+	}
+        printf("\tshrdl $%d,%s,%s\n",(int)il,l_edx(reg),l_eax(reg));
+        printf("\tsarl $%d,%s\n",(int)il,l_edx(reg));
 	return;
     case LURSHIFT:
-        printf("\tshrdl $%d,%s,%s\n",vl,l_edx(reg),l_eax(reg));
-        printf("\tshrl $%d,%s\n",vl,l_edx(reg));
+	if (il==0) return;
+	else if (il==32) {
+	    code_register(regv_h(reg),regv_l(reg));
+	    code_const(0,regv_h(reg));
+	    return;
+	} else if (il>32) {
+	    code_register(regv_h(reg),regv_l(reg));
+	    printf("\tsarl $%d,%s\n",(int)il-32,l_eax(reg));
+	    code_const(0,regv_h(reg));
+	    return;
+	}
+        printf("\tshrdl $%d,%s,%s\n",(int)il,l_edx(reg),l_eax(reg));
+        printf("\tshrl $%d,%s\n",(int)il,l_edx(reg));
 	return;
     }
     switch(op) {
@@ -3548,11 +3585,10 @@
 	    printf("\t%s %d(%s),%s\n",cload(sign,size),4,register_name(adr,0),
 			register_name(adr,0));
 	    mask = make_mask(64-bitpos-bitsize,bitpos>=32?63-bitpos:31);
-	    make_mask_and_or(mask,virtual(value==REG_L?REG_EDI:REG_EDX),adr);
+	    make_mask_and_or(mask,regv_h(value),adr);
 	    printf("\tmovl 0(%%esp),%s\n",register_name(adr,0));
 	    printf("\t%s %s,4(%s)\n",move(0),
-		    register_name(virtual(value==REG_L?REG_EDI:REG_EDX),0),
-			register_name(adr,0));
+		    l_edx(value), register_name(adr,0));
 	}
 	if (bitpos<32) {
 	    if (!push) { printf("\tpushl %s\n",register_name(adr,0)); push=1;}
@@ -3560,11 +3596,10 @@
 	    printf("\t%s %d(%s),%s\n",cload(sign,size),0,register_name(adr,0),
 			register_name(adr,0));
 	    mask = make_mask(bitpos+bitsize>=32?0:32-bitpos-bitsize,31-bitpos);
-	    make_mask_and_or(mask,virtual(value==REG_L?REG_ESI:REG_EAX),adr);
+	    make_mask_and_or(mask,regv_l(value),adr);
 	    printf("\tpopl %s\n",register_name(adr,0)); push=0;
 	    printf("\t%s %s,(%s)\n",move(0),
-		    register_name(virtual(value==REG_L?REG_ESI:REG_EAX),0),
-			register_name(adr,0));
+		    l_eax(value), register_name(adr,0));
 	}
 	if (push) printf("\taddl %%sp,$4\n");
     } else {
--- a/mc-code-powerpc.c	Wed Nov 03 18:50:51 2004 +0900
+++ b/mc-code-powerpc.c	Thu Nov 11 00:39:37 2004 +0900
@@ -4532,7 +4532,7 @@
     case LULSHIFT:
     case LRSHIFT:
     case LURSHIFT:
-	return  (0<v&&v<31);
+	return  (0<=v&&v<=64);
     case LADD:
     case LSUB:
 	return 1;
@@ -4562,9 +4562,19 @@
     switch(op) {
     case LLSHIFT:
     case LULSHIFT:
+	if (v==0) return;
+	if (v==32) {
+	    code_register(regv_l(creg),regv_h(creg));
+	    code_const(0,regv_l(creg));
+	    return;
+	} else if (v>31) {
+	    printf("\tslwi %s,%s,%d\n",crn_h,crn_l,v-32);
+	    code_const(0,regv_l(creg));
+	    return;
+	}
 	greg = get_register();
+	grn = register_name(greg);
 	use_reg(greg);
-	grn = register_name(greg);
 	printf("\tsrwi %s,%s,%d\n",grn,crn_l,32-v);
 	printf("\tslwi %s,%s,%d\n",crn_h,crn_h,v);
 	printf("\tor %s,%s,%s\n",crn_h,grn,crn_h);
@@ -4572,6 +4582,16 @@
 	free_register(greg);
 	return;
     case LRSHIFT:
+	if (v==0) return;
+	if (v==32) {
+	    code_register(regv_h(creg),regv_l(creg));
+	    printf("\tsrawi %s,%s,31\n",crn_h,crn_l);
+	    return;
+	} else if (v>31) {
+	    printf("\tsrawi %s,%s,%d\n",crn_l,crn_h,v-32);
+	    printf("\tsrawi %s,%s,31\n",crn_h,crn_l);
+	    return;
+	}
 	greg = get_register();
 	use_reg(greg);
 	grn = register_name(greg);
@@ -4582,6 +4602,16 @@
 	free_register(greg);
 	return;
     case LURSHIFT:
+	if (v==0) return;
+	if (v==32) {
+	    code_register(regv_h(creg),regv_l(creg));
+	    code_const(0,regv_h(creg));
+	    return;
+	} else if (v>31) {
+	    printf("\tsrwi %s,%s,%d\n",crn_l,crn_h,v-32);
+	    code_const(0,regv_h(creg));
+	    return;
+	}
 	greg = get_register();
 	use_reg(greg);
 	grn = register_name(greg);
--- a/mc-codegen.c	Wed Nov 03 18:50:51 2004 +0900
+++ b/mc-codegen.c	Thu Nov 11 00:39:37 2004 +0900
@@ -3298,6 +3298,13 @@
     if((op==MUL||op==DIV)&&car(e2)==LCONST&&lcadr(e2)==1) return e1;
     if(op==BOR||op==EOR||op==BAND||op==ADD||op==SUB||op==EQ||op==NEQ) 
 	return(list3(op+LOP,e1,e2));
+    if(op==LSHIFT && car(e2)==LCONST) {
+	if (lcadr(e2)==0) return e1;
+	else if (lcadr(e2)>63) return llist2(LCONST,0);
+    }
+    if(op==RSHIFT && car(e2)==LCONST) {
+	if (lcadr(e2)==0) return e1;
+    }
     if(op==LSHIFT||op==RSHIFT) return(list3(op+LOP+(t1==ULONGLONG),e1,e2));
     return(list3(op+LOP+us,e1,e2));
 }
--- a/mc.h	Wed Nov 03 18:50:51 2004 +0900
+++ b/mc.h	Thu Nov 11 00:39:37 2004 +0900
@@ -102,7 +102,6 @@
 #define DOP     600
 #define FOP     800
 #define LOP     1000
-#define BOP     1200    // bit field
 
 /* tree node tags start */
 
@@ -132,10 +131,6 @@
 #define LURGVAR (LOP+URGVAR)
 #define LRLVAR  (LOP+RLVAR)
 #define LURLVAR (LOP+URLVAR)
-#define BRGVAR  (BOP+RGVAR)
-#define BURGVAR (BOP+URGVAR)
-#define BRLVAR  (BOP+RLVAR)
-#define BURLVAR (BOP+URLVAR)
 
 #define CONST  	7
 #define DCONST  (DOP+CONST)
--- a/test/code-gen.c	Wed Nov 03 18:50:51 2004 +0900
+++ b/test/code-gen.c	Thu Nov 11 00:39:37 2004 +0900
@@ -1941,29 +1941,37 @@
     printf("#1940:loprtc 8 %lld\n",i);
     i = i1 >> 5;
     printf("#1942:loprtc 9 %lld\n",i);
+    i = i1 << 38;
+    printf("#1944:loprtc 8 %lld\n",i);
+    i = i1 >> 38;
+    printf("#1946:loprtc 9 %lld\n",i);
     i = i1 % 5;
-    printf("#1944:loprtc 10 %lld\n",i);
+    printf("#1948:loprtc 10 %lld\n",i);
 
     u = u1 + 3;
-    printf("#1947:loprtc 1 u %llu\n",u);
+    printf("#1951:loprtc 1 u %llu\n",u);
     u = u1 - 3;
-    printf("#1949:loprtc 2 u %llu\n",u);
+    printf("#1953:loprtc 2 u %llu\n",u);
     u = u1 / 32342342344234LL;
-    printf("#1951:loprtc 3 u %llu\n",u);
+    printf("#1955:loprtc 3 u %llu\n",u);
     u = u1 * 243234234232324LL;
-    printf("#1953:loprtc 4 u %llu\n",u);
+    printf("#1957:loprtc 4 u %llu\n",u);
     u = u1 | 234234234;
-    printf("#1955:loprtc 5 u %llu\n",u);
+    printf("#1959:loprtc 5 u %llu\n",u);
     u = u1 & 234234234;
-    printf("#1957:loprtc 6 u %llu\n",u);
+    printf("#1961:loprtc 6 u %llu\n",u);
     u = u1 ^ 234234234;
-    printf("#1959:loprtc 7 u %llu\n",u);
+    printf("#1963:loprtc 7 u %llu\n",u);
     u = u1 << 5;
-    printf("#1961:loprtc 8 u %llu\n",u);
+    printf("#1965:loprtc 8 u %llu\n",u);
     u = u1 >> 5;
-    printf("#1963:loprtc 9 u %llu\n",u);
+    printf("#1967:loprtc 9 u %llu\n",u);
+    u = u1 << 38;
+    printf("#1969:loprtc 8 u %llu\n",u);
+    u = u1 >> 38;
+    printf("#1971:loprtc 9 u %llu\n",u);
     u = u1 % 5;
-    printf("#1965:loprtc 10 u %llu\n",u);
+    printf("#1973:loprtc 10 u %llu\n",u);
 }
 
 
@@ -1982,92 +1990,92 @@
     u = 0;
 
     i = i1 + i2;
-    printf("#1984:ltosop r 1 %lld\n",i);
+    printf("#1992:ltosop r 1 %lld\n",i);
     i = i1 - i2;
-    printf("#1986:ltosop r 2 %lld\n",i);
+    printf("#1994:ltosop r 2 %lld\n",i);
     i = i1 / i2;
-    printf("#1988:ltosop r 3 %lld\n",i);
+    printf("#1996:ltosop r 3 %lld\n",i);
     i = i1 * i2;
-    printf("#1990:ltosop r 4 %lld\n",i);
+    printf("#1998:ltosop r 4 %lld\n",i);
     i = i1 | i2;
-    printf("#1992:ltosop r 5 %lld\n",i);
+    printf("#2000:ltosop r 5 %lld\n",i);
     i = i1 & i2;
-    printf("#1994:ltosop r 6 %lld\n",i);
+    printf("#2002:ltosop r 6 %lld\n",i);
     i = i1 ^ i2;
-    printf("#1996:ltosop r 7 %lld\n",i);
+    printf("#2004:ltosop r 7 %lld\n",i);
     i2 = 3;
     i = i1 << i2;
-    printf("#1999:ltosop r 8 %lld\n",i);
+    printf("#2007:ltosop r 8 %lld\n",i);
     i = i1 >> i2;
-    printf("#2001:ltosop r 9 %lld\n",i);
+    printf("#2009:ltosop r 9 %lld\n",i);
     i = i1 % i2;
-    printf("#2003:ltosop r 10 %lld\n",i);
+    printf("#2011:ltosop r 10 %lld\n",i);
 
     u = u1 + u2;
-    printf("#2006:ltosop r u 1 %llu\n",u);
+    printf("#2014:ltosop r u 1 %llu\n",u);
     u = u1 - u2;
-    printf("#2008:ltosop r u 2 %llu\n",u);
+    printf("#2016:ltosop r u 2 %llu\n",u);
     u = u1 / u2;
-    printf("#2010:ltosop r u 3 %llu\n",u);
+    printf("#2018:ltosop r u 3 %llu\n",u);
     u = u1 * u2;
-    printf("#2012:ltosop r u 4 %llu\n",u);
+    printf("#2020:ltosop r u 4 %llu\n",u);
     u = u1 | u2;
-    printf("#2014:ltosop r u 5 %llu\n",u);
+    printf("#2022:ltosop r u 5 %llu\n",u);
     u = u1 & u2;
-    printf("#2016:ltosop r u 6 %llu\n",u);
+    printf("#2024:ltosop r u 6 %llu\n",u);
     u = u1 ^ u2;
-    printf("#2018:ltosop r u 7 %llu\n",u);
+    printf("#2026:ltosop r u 7 %llu\n",u);
     u2 = 3;
     u = u1 << u2;
-    printf("#2021:ltosop r u 8 %llu\n",u);
+    printf("#2029:ltosop r u 8 %llu\n",u);
     u = u1 >> u2;
-    printf("#2023:ltosop r u 9 %llu\n",u);
+    printf("#2031:ltosop r u 9 %llu\n",u);
     u = u1 % u2;
-    printf("#2025:ltosop r u 10 %llu\n",u);
+    printf("#2033:ltosop r u 10 %llu\n",u);
 
     i = i1 + ii2;
-    printf("#2028:litosop r 1 %lld\n",i);
+    printf("#2036:litosop r 1 %lld\n",i);
     i = i1 - ii2;
-    printf("#2030:litosop r 2 %lld\n",i);
+    printf("#2038:litosop r 2 %lld\n",i);
     i = i1 / ii2;
-    printf("#2032:litosop r 3 %lld\n",i);
+    printf("#2040:litosop r 3 %lld\n",i);
     i = i1 * ii2;
-    printf("#2034:litosop r 4 %lld\n",i);
+    printf("#2042:litosop r 4 %lld\n",i);
     i = i1 | ii2;
-    printf("#2036:litosop r 5 %lld\n",i);
+    printf("#2044:litosop r 5 %lld\n",i);
     i = i1 & ii2;
-    printf("#2038:litosop r 6 %lld\n",i);
+    printf("#2046:litosop r 6 %lld\n",i);
     i = i1 ^ ii2;
-    printf("#2040:litosop r 7 %lld\n",i);
+    printf("#2048:litosop r 7 %lld\n",i);
     ii2 = 3;
     i = i1 << ii2;
-    printf("#2043:litosop r 8 %lld\n",i);
+    printf("#2051:litosop r 8 %lld\n",i);
     i = i1 >> ii2;
-    printf("#2045:litosop r 9 %lld\n",i);
+    printf("#2053:litosop r 9 %lld\n",i);
     i = i1 % ii2;
-    printf("#2047:litosop r 10 %lld\n",i);
+    printf("#2055:litosop r 10 %lld\n",i);
 
     u = u1 + uu2;
-    printf("#2050:litosop r u 1 %llu\n",u);
+    printf("#2058:litosop r u 1 %llu\n",u);
     u = u1 - uu2;
-    printf("#2052:litosop r u 2 %llu\n",u);
+    printf("#2060:litosop r u 2 %llu\n",u);
     u = u1 / uu2;
-    printf("#2054:litosop r u 3 %llu\n",u);
+    printf("#2062:litosop r u 3 %llu\n",u);
     u = u1 * uu2;
-    printf("#2056:litosop r u 4 %llu\n",u);
+    printf("#2064:litosop r u 4 %llu\n",u);
     u = u1 | uu2;
-    printf("#2058:litosop r u 5 %llu\n",u);
+    printf("#2066:litosop r u 5 %llu\n",u);
     u = u1 & uu2;
-    printf("#2060:litosop r u 6 %llu\n",u);
+    printf("#2068:litosop r u 6 %llu\n",u);
     u = u1 ^ uu2;
-    printf("#2062:litosop r u 7 %llu\n",u);
+    printf("#2070:litosop r u 7 %llu\n",u);
     uu2 = 3;
     u = u1 << uu2;
-    printf("#2065:litosop r u 8 %llu\n",u);
+    printf("#2073:litosop r u 8 %llu\n",u);
     u = u1 >> uu2;
-    printf("#2067:litosop r u 9 %llu\n",u);
+    printf("#2075:litosop r u 9 %llu\n",u);
     u = u1 % uu2;
-    printf("#2069:litosop r u 10 %llu\n",u);
+    printf("#2077:litosop r u 10 %llu\n",u);
 }
 
 // loprtc(int op,int v)
@@ -2080,46 +2088,54 @@
     u1 = 632423423; 
 
     i = i1 + 3;
-    printf("#2082:loprtc r 1 %lld\n",i);
+    printf("#2090:loprtc r 1 %lld\n",i);
     i = i1 - 3;
-    printf("#2084:loprtc r 2 %lld\n",i);
+    printf("#2092:loprtc r 2 %lld\n",i);
     i = i1 / 32323423423LL;
-    printf("#2086:loprtc r 3 %lld\n",i);
+    printf("#2094:loprtc r 3 %lld\n",i);
     i = i1 * 323423423423LL;
-    printf("#2088:loprtc r 4 %lld\n",i);
+    printf("#2096:loprtc r 4 %lld\n",i);
     i = i1 | 234234234;
-    printf("#2090:loprtc r 5 %lld\n",i);
+    printf("#2098:loprtc r 5 %lld\n",i);
     i = i1 & 23234234;
-    printf("#2092:loprtc r 6 %lld\n",i);
+    printf("#2100:loprtc r 6 %lld\n",i);
     i = i1 ^ 23234234;
-    printf("#2094:loprtc r 7 %lld\n",i);
+    printf("#2102:loprtc r 7 %lld\n",i);
     i = i1 << 5;
-    printf("#2096:loprtc r 8 %lld\n",i);
+    printf("#2104:loprtc r 8 %lld\n",i);
     i = i1 >> 5;
-    printf("#2098:loprtc r 9 %lld\n",i);
+    printf("#2106:loprtc r 9 %lld\n",i);
+    i = i1 << 38;
+    printf("#2108:loprtc r 8 %lld\n",i);
+    i = i1 >> 38;
+    printf("#2110:loprtc r 9 %lld\n",i);
     i = i1 % 5;
-    printf("#2100:loprtc r 10 %lld\n",i);
+    printf("#2112:loprtc r 10 %lld\n",i);
 
     u = u1 + 3;
-    printf("#2103:loprtc r 1 u %llu\n",u);
+    printf("#2115:loprtc r 1 u %llu\n",u);
     u = u1 - 3;
-    printf("#2105:loprtc r 2 u %llu\n",u);
+    printf("#2117:loprtc r 2 u %llu\n",u);
     u = u1 / 32342342344234LL;
-    printf("#2107:loprtc r 3 u %llu\n",u);
+    printf("#2119:loprtc r 3 u %llu\n",u);
     u = u1 * 243234234232324LL;
-    printf("#2109:loprtc r 4 u %llu\n",u);
+    printf("#2121:loprtc r 4 u %llu\n",u);
     u = u1 | 234234234;
-    printf("#2111:loprtc r 5 u %llu\n",u);
+    printf("#2123:loprtc r 5 u %llu\n",u);
     u = u1 & 234234234;
-    printf("#2113:loprtc r 6 u %llu\n",u);
+    printf("#2125:loprtc r 6 u %llu\n",u);
     u = u1 ^ 234234234;
-    printf("#2115:loprtc r 7 u %llu\n",u);
+    printf("#2127:loprtc r 7 u %llu\n",u);
     u = u1 << 5;
-    printf("#2117:loprtc r 8 u %llu\n",u);
+    printf("#2129:loprtc r 8 u %llu\n",u);
     u = u1 >> 5;
-    printf("#2119:loprtc r 9 u %llu\n",u);
+    printf("#2131:loprtc r 9 u %llu\n",u);
+    u = u1 << 38;
+    printf("#2133:loprtc r 8 u %llu\n",u);
+    u = u1 >> 38;
+    printf("#2135:loprtc r 9 u %llu\n",u);
     u = u1 % 5;
-    printf("#2121:loprtc r 10 u %llu\n",u);
+    printf("#2137:loprtc r 10 u %llu\n",u);
 }
 
 
@@ -2131,7 +2147,7 @@
     int i;
     i = 23442342;
     d = i;
-    printf("#2133:code_i2ll %lld\n",d);
+    printf("#2149:code_i2ll %lld\n",d);
 }
 // code_i2ull(int creg)
 void
@@ -2141,7 +2157,7 @@
     int i;
     i = 23442342;
     d = i;
-    printf("#2143:code_i2ull %lld\n",d);
+    printf("#2159:code_i2ull %lld\n",d);
 }
 // code_u2ll(int creg)
 void
@@ -2151,7 +2167,7 @@
     unsigned int i;
     i = 23442342;
     d = i;
-    printf("#2153:code_u2ll %lld\n",d);
+    printf("#2169:code_u2ll %lld\n",d);
 }
 // code_u2ull(int creg)
 void
@@ -2161,7 +2177,7 @@
     unsigned int i;
     i = 23342342;
     d = i;
-    printf("#2163:code_u2ull %llu\n",d);
+    printf("#2179:code_u2ull %llu\n",d);
 }
 // code_ll2i(int creg)
 void
@@ -2171,7 +2187,7 @@
     int i;
     d = 2342342342LL;
     i = d;
-    printf("#2173:code_ll2i %d\n",i);
+    printf("#2189:code_ll2i %d\n",i);
 }
 // code_ll2u(int creg)
 void
@@ -2181,7 +2197,7 @@
     unsigned int i;
     d = 2342342342LL;
     i = d;
-    printf("#2183:code_ll2i %ud\n",i);
+    printf("#2199:code_ll2i %ud\n",i);
 }
 // code_ull2i(int creg)
 void
@@ -2191,7 +2207,7 @@
     int i;
     d = 2342342342LL;
     i = d;
-    printf("#2193:code_ull2i %d\n",i);
+    printf("#2209:code_ull2i %d\n",i);
 }
 // code_ull2u(int creg)
 void
@@ -2201,7 +2217,7 @@
     unsigned int i;
     d = 2342342342LL;
     i = d;
-    printf("#2203:code_ll2i %ud\n",i);
+    printf("#2219:code_ll2i %ud\n",i);
 }
 #if FLOAT_CODE
 // code_d2ll(int creg)
@@ -2212,7 +2228,7 @@
     double i;
     i = 2342342342LL;
     d = i;
-    printf("#2214:code_d2ll %lld\n",d);
+    printf("#2230:code_d2ll %lld\n",d);
 }
 // code_d2ull(int creg)
 void
@@ -2222,7 +2238,7 @@
     double i;
     i = 2342342342LL;
     d = i;
-    printf("#2224:code_d2ll %llu\n",d);
+    printf("#2240:code_d2ll %llu\n",d);
 }
 // code_f2ll(int creg)
 void
@@ -2232,7 +2248,7 @@
     float i;
     i = 2342342342LL;
     d = i;
-    printf("#2234:code_f2ll %lld\n",d);
+    printf("#2250:code_f2ll %lld\n",d);
 }
 // code_f2ull(int creg)
 void
@@ -2242,7 +2258,7 @@
     float i;
     i = 2342342342LL;
     d = i;
-    printf("#2244:code_f2ull %llu\n",d);
+    printf("#2260:code_f2ull %llu\n",d);
 }
 // code_ll2d(int creg)
 void
@@ -2252,7 +2268,7 @@
     double i;
     d = 2342342342LL;
     i = d;
-    printf("#2254:code_ll2d %g\n",i);
+    printf("#2270:code_ll2d %g\n",i);
 }
 // code_ll2f(int creg)
 void
@@ -2262,7 +2278,7 @@
     float i;
     d = 2342342342LL;
     i = d;
-    printf("#2264:code_ll2f %g\n",i);
+    printf("#2280:code_ll2f %g\n",i);
 }
 // code_ull2d(int creg)
 void
@@ -2272,7 +2288,7 @@
     double i;
     d = 2342342342LL;
     i = d;
-    printf("#2274:code_ull2f %g\n",i);
+    printf("#2290:code_ull2f %g\n",i);
 }
 // code_ull2f(int creg)
 void
@@ -2282,7 +2298,7 @@
     float i;
     d = 2342342342LL;
     i = d;
-    printf("#2284:code_ull2f %g\n",i);
+    printf("#2300:code_ull2f %g\n",i);
 }
 #endif
 
@@ -2292,8 +2308,8 @@
 {
     long long i,j;
     i = 123123123;j = 0;
-    printf("#2294:code_preinc l %lld %lld",++i,--j);
-    printf("#2295: %lld %lld\n",i,j);
+    printf("#2310:code_preinc l %lld %lld",++i,--j);
+    printf("#2311: %lld %lld\n",i,j);
 }
 
 // code_lpostinc(int e1,int e2,int reg)
@@ -2302,8 +2318,8 @@
 {
     long long i,j;
     i = 123123123;j = 0;
-    printf("#2304:code_postinc l %lld %lld",i++,j--);
-    printf("#2305: %lld %lld\n",i,j);
+    printf("#2320:code_postinc l %lld %lld",i++,j--);
+    printf("#2321: %lld %lld\n",i,j);
 }
 
 // code_lpreinc(int e1,int e2,int reg)
@@ -2312,8 +2328,8 @@
 {
     register unsigned long long i,j;
     i = 123123123;j = 0;
-    printf("#2314:code_preinc l %llu %llu",++i,--j);
-    printf("#2315: %lld %lld\n",i,j);
+    printf("#2330:code_preinc l %llu %llu",++i,--j);
+    printf("#2331: %lld %lld\n",i,j);
 }
 
 // code_lpostinc(int e1,int e2,int reg)
@@ -2322,8 +2338,8 @@
 {
     register unsigned long long i,j;
     i = 123123123;j = 0;
-    printf("#2324:code_postinc lu %llu %llu",i++,j--);
-    printf("#2325: %lld %lld\n",i,j);
+    printf("#2340:code_postinc lu %llu %llu",i++,j--);
+    printf("#2341: %lld %lld\n",i,j);
 }
 
 // code_lpreinc(int e1,int e2,int reg)
@@ -2332,8 +2348,8 @@
 {
     register long long i,j;
     i = 123123123;j = 0;
-    printf("#2334:code_preinc l r %lld %lld",++i,--j);
-    printf("#2335: %lld %lld\n",i,j);
+    printf("#2350:code_preinc l r %lld %lld",++i,--j);
+    printf("#2351: %lld %lld\n",i,j);
 }
 
 // code_lpostinc(int e1,int e2,int reg)
@@ -2342,8 +2358,8 @@
 {
     register long long i,j;
     i = 123123123;j = 0;
-    printf("#2344:code_postinc l r %lld %lld",i++,j--);
-    printf("#2345: %lld %lld\n",i,j);
+    printf("#2360:code_postinc l r %lld %lld",i++,j--);
+    printf("#2361: %lld %lld\n",i,j);
 }
 
 // code_lpreinc(int e1,int e2,int reg)
@@ -2352,8 +2368,8 @@
 {
     register unsigned long long i,j;
     i = 123123123;j = 0;
-    printf("#2354:code_preinc l r %llu %llu",++i,--j);
-    printf("#2355: %lld %lld\n",i,j);
+    printf("#2370:code_preinc l r %llu %llu",++i,--j);
+    printf("#2371: %lld %lld\n",i,j);
 }
 
 // code_lpostinc(int e1,int e2,int reg)
@@ -2362,8 +2378,8 @@
 {
     register unsigned long long i,j;
     i = 123123123;j = 0;
-    printf("#2364:code_postinc lu r %llu %llu",i++,j--);
-    printf("#2365: %lld %lld\n",i,j);
+    printf("#2380:code_postinc lu r %llu %llu",i++,j--);
+    printf("#2381: %lld %lld\n",i,j);
 }
 
 // code_lassop(int op)
@@ -2379,42 +2395,42 @@
     ui1 = 632423423;
 
     i1 += a;
-    printf("#2381:code_register_lassop 1 %lld\n",i1);
+    printf("#2397:code_register_lassop 1 %lld\n",i1);
     i1 -= a;
-    printf("#2383:code_register_lassop 2 %lld\n",i1);
+    printf("#2399:code_register_lassop 2 %lld\n",i1);
     i1 /= a;
-    printf("#2385:code_register_lassop 3 %lld\n",i1);
+    printf("#2401:code_register_lassop 3 %lld\n",i1);
     i1 *= a;
-    printf("#2387:code_register_lassop 4 %lld\n",i1);
+    printf("#2403:code_register_lassop 4 %lld\n",i1);
     i1 |= a;
-    printf("#2389:code_register_lassop 5 %lld\n",i1);
+    printf("#2405:code_register_lassop 5 %lld\n",i1);
     i1 &= a;
-    printf("#2391:code_register_lassop 6 %lld\n",i1);
+    printf("#2407:code_register_lassop 6 %lld\n",i1);
     i1 ^= a;
-    printf("#2393:code_register_lassop 7 %lld\n",i1);
+    printf("#2409:code_register_lassop 7 %lld\n",i1);
     i1 <<= a;
-    printf("#2395:code_register_lassop 8 %lld\n",i1);
+    printf("#2411:code_register_lassop 8 %lld\n",i1);
     i1 >>= a;
-    printf("#2397:code_register_lassop 9 %lld\n",i1);
+    printf("#2413:code_register_lassop 9 %lld\n",i1);
 
     ui1 += a;
-    printf("#2400:code_register_lassop 1 %llu\n",ui1);
+    printf("#2416:code_register_lassop 1 %llu\n",ui1);
     ui1 -= a;
-    printf("#2402:code_register_lassop 2 %llu\n",ui1);
+    printf("#2418:code_register_lassop 2 %llu\n",ui1);
     ui1 /= a;
-    printf("#2404:code_register_lassop 3 %llu\n",ui1);
+    printf("#2420:code_register_lassop 3 %llu\n",ui1);
     ui1 *= a;
-    printf("#2406:code_register_lassop 4 %llu\n",ui1);
+    printf("#2422:code_register_lassop 4 %llu\n",ui1);
     ui1 |= a;
-    printf("#2408:code_register_lassop 5 %llu\n",ui1);
+    printf("#2424:code_register_lassop 5 %llu\n",ui1);
     ui1 &= a;
-    printf("#2410:code_register_lassop 6 %llu\n",ui1);
+    printf("#2426:code_register_lassop 6 %llu\n",ui1);
     ui1 ^= a;
-    printf("#2412:code_register_lassop 7 %llu\n",ui1);
+    printf("#2428:code_register_lassop 7 %llu\n",ui1);
     ui1 <<= a;
-    printf("#2414:code_register_lassop 8 %llu\n",ui1);
+    printf("#2430:code_register_lassop 8 %llu\n",ui1);
     ui1 >>= a;
-    printf("#2416:code_register_lassop 9 %llu\n",ui1);
+    printf("#2432:code_register_lassop 9 %llu\n",ui1);
 }
 
 // code_lassop(int op,int byte,int sign) 
@@ -2428,42 +2444,42 @@
     ui1 = 632423423; ui2= 32394234;
 
     i1 += a;
-    printf("#2430:code_lassop 1 %lld\n",i1);
+    printf("#2446:code_lassop 1 %lld\n",i1);
     i1 -= a;
-    printf("#2432:code_lassop 2 %lld\n",i1);
+    printf("#2448:code_lassop 2 %lld\n",i1);
     i1 /= a;
-    printf("#2434:code_lassop 3 %lld\n",i1);
+    printf("#2450:code_lassop 3 %lld\n",i1);
     i1 *= a;
-    printf("#2436:code_lassop 4 %lld\n",i1);
+    printf("#2452:code_lassop 4 %lld\n",i1);
     i1 |= a;
-    printf("#2438:code_lassop 5 %lld\n",i1);
+    printf("#2454:code_lassop 5 %lld\n",i1);
     i1 &= a;
-    printf("#2440:code_lassop 6 %lld\n",i1);
+    printf("#2456:code_lassop 6 %lld\n",i1);
     i1 ^= a;
-    printf("#2442:code_lassop 7 %lld\n",i1);
+    printf("#2458:code_lassop 7 %lld\n",i1);
     i1 <<= a;
-    printf("#2444:code_lassop 8 %lld\n",i1);
+    printf("#2460:code_lassop 8 %lld\n",i1);
     i1 >>= a;
-    printf("#2446:code_lassop 9 %lld\n",i1);
+    printf("#2462:code_lassop 9 %lld\n",i1);
 
     ui1 += a;
-    printf("#2449:code_lassop 1 %llu\n",ui1);
+    printf("#2465:code_lassop 1 %llu\n",ui1);
     ui1 -= a;
-    printf("#2451:code_lassop 2 %llu\n",ui1);
+    printf("#2467:code_lassop 2 %llu\n",ui1);
     ui1 /= a;
-    printf("#2453:code_lassop 3 %llu\n",ui1);
+    printf("#2469:code_lassop 3 %llu\n",ui1);
     ui1 *= a;
-    printf("#2455:code_lassop 4 %llu\n",ui1);
+    printf("#2471:code_lassop 4 %llu\n",ui1);
     ui1 |= a;
-    printf("#2457:code_lassop 5 %llu\n",ui1);
+    printf("#2473:code_lassop 5 %llu\n",ui1);
     ui1 &= a;
-    printf("#2459:code_lassop 6 %llu\n",ui1);
+    printf("#2475:code_lassop 6 %llu\n",ui1);
     ui1 ^= a;
-    printf("#2461:code_lassop 7 %llu\n",ui1);
+    printf("#2477:code_lassop 7 %llu\n",ui1);
     ui1 <<= a;
-    printf("#2463:code_lassop 8 %llu\n",ui1);
+    printf("#2479:code_lassop 8 %llu\n",ui1);
     ui1 >>= a;
-    printf("#2465:code_lassop 9 %llu\n",ui1);
+    printf("#2481:code_lassop 9 %llu\n",ui1);
 }
 
 // code_register_assop(int e2,int op,int byte) 
@@ -2476,42 +2492,42 @@
     ui1 = 632423423;
 
     i1 += 3;
-    printf("#2478:code_register_lassop c 1 %lld\n",i1);
+    printf("#2494:code_register_lassop c 1 %lld\n",i1);
     i1 -= 3;
-    printf("#2480:code_register_lassop c 2 %lld\n",i1);
+    printf("#2496:code_register_lassop c 2 %lld\n",i1);
     i1 /= 3;
-    printf("#2482:code_register_lassop c 3 %lld\n",i1);
+    printf("#2498:code_register_lassop c 3 %lld\n",i1);
     i1 *= 3;
-    printf("#2484:code_register_lassop c 4 %lld\n",i1);
+    printf("#2500:code_register_lassop c 4 %lld\n",i1);
     i1 |= 234;
-    printf("#2486:code_register_lassop c 5 %lld\n",i1);
+    printf("#2502:code_register_lassop c 5 %lld\n",i1);
     i1 &= 2324234234234234LL;
-    printf("#2488:code_register_lassop c 6 %lld\n",i1);
+    printf("#2504:code_register_lassop c 6 %lld\n",i1);
     i1 ^= 5523234234234234LL;
-    printf("#2490:code_register_lassop c 7 %lld\n",i1);
+    printf("#2506:code_register_lassop c 7 %lld\n",i1);
     i1 <<= 3;
-    printf("#2492:code_register_lassop c 8 %lld\n",i1);
+    printf("#2508:code_register_lassop c 8 %lld\n",i1);
     i1 >>= 3;
-    printf("#2494:code_register_lassop c 9 %lld\n",i1);
+    printf("#2510:code_register_lassop c 9 %lld\n",i1);
 
     ui1 += 3;
-    printf("#2497:code_register_lassop c 1 %llu\n",ui1);
+    printf("#2513:code_register_lassop c 1 %llu\n",ui1);
     ui1 -= 3;
-    printf("#2499:code_register_lassop c 2 %llu\n",ui1);
+    printf("#2515:code_register_lassop c 2 %llu\n",ui1);
     ui1 /= 3;
-    printf("#2501:code_register_lassop c 3 %llu\n",ui1);
+    printf("#2517:code_register_lassop c 3 %llu\n",ui1);
     ui1 *= 3;
-    printf("#2503:code_register_lassop c 4 %llu\n",ui1);
+    printf("#2519:code_register_lassop c 4 %llu\n",ui1);
     ui1 |= 234;
-    printf("#2505:code_register_lassop c 5 %llu\n",ui1);
+    printf("#2521:code_register_lassop c 5 %llu\n",ui1);
     ui1 &= 2324234234234234LL;
-    printf("#2507:code_register_lassop c 6 %llu\n",ui1);
+    printf("#2523:code_register_lassop c 6 %llu\n",ui1);
     ui1 ^= 5523234234234234LL;
-    printf("#2509:code_register_lassop c 7 %llu\n",ui1);
+    printf("#2525:code_register_lassop c 7 %llu\n",ui1);
     ui1 <<= 3;
-    printf("#2511:code_register_lassop c 8 %llu\n",ui1);
+    printf("#2527:code_register_lassop c 8 %llu\n",ui1);
     ui1 >>= 3;
-    printf("#2513:code_register_lassop c 9 %llu\n",ui1);
+    printf("#2529:code_register_lassop c 9 %llu\n",ui1);
 }
 
 // code_lassop(int op,int byte,int sign) 
@@ -2524,42 +2540,42 @@
     ui1 = 632423423; ui2= 32394234;
 
     i1 += 3;
-    printf("#2526:code_lassop c 1 %lld\n",i1);
+    printf("#2542:code_lassop c 1 %lld\n",i1);
     i1 -= 3;
-    printf("#2528:code_lassop c 2 %lld\n",i1);
+    printf("#2544:code_lassop c 2 %lld\n",i1);
     i1 /= 3;
-    printf("#2530:code_lassop c 3 %lld\n",i1);
+    printf("#2546:code_lassop c 3 %lld\n",i1);
     i1 *= 3;
-    printf("#2532:code_lassop c 4 %lld\n",i1);
+    printf("#2548:code_lassop c 4 %lld\n",i1);
     i1 |= 234;
-    printf("#2534:code_lassop c 5 %lld\n",i1);
+    printf("#2550:code_lassop c 5 %lld\n",i1);
     i1 &= 2324234234234234LL;
-    printf("#2536:code_lassop c 6 %lld\n",i1);
+    printf("#2552:code_lassop c 6 %lld\n",i1);
     i1 ^= 5523234234234234LL;
-    printf("#2538:code_lassop c 7 %lld\n",i1);
+    printf("#2554:code_lassop c 7 %lld\n",i1);
     i1 <<= 3;
-    printf("#2540:code_lassop c 8 %lld\n",i1);
+    printf("#2556:code_lassop c 8 %lld\n",i1);
     i1 >>= 3;
-    printf("#2542:code_lassop c 9 %lld\n",i1);
+    printf("#2558:code_lassop c 9 %lld\n",i1);
 
     ui1 += 3;
-    printf("#2545:code_lassop c 1 %llu\n",ui1);
+    printf("#2561:code_lassop c 1 %llu\n",ui1);
     ui1 -= 3;
-    printf("#2547:code_lassop c 2 %llu\n",ui1);
+    printf("#2563:code_lassop c 2 %llu\n",ui1);
     ui1 /= 3;
-    printf("#2549:code_lassop c 3 %llu\n",ui1);
+    printf("#2565:code_lassop c 3 %llu\n",ui1);
     ui1 *= 3;
-    printf("#2551:code_lassop c 4 %llu\n",ui1);
+    printf("#2567:code_lassop c 4 %llu\n",ui1);
     ui1 |= 234;
-    printf("#2553:code_lassop c 5 %llu\n",ui1);
+    printf("#2569:code_lassop c 5 %llu\n",ui1);
     ui1 &= 2324234234234234LL;
-    printf("#2555:code_lassop c 6 %llu\n",ui1);
+    printf("#2571:code_lassop c 6 %llu\n",ui1);
     ui1 ^= 5523234234234234LL;
-    printf("#2557:code_lassop c 7 %llu\n",ui1);
+    printf("#2573:code_lassop c 7 %llu\n",ui1);
     ui1 <<= 3;
-    printf("#2559:code_lassop c 8 %llu\n",ui1);
+    printf("#2575:code_lassop c 8 %llu\n",ui1);
     ui1 >>= 3;
-    printf("#2561:code_lassop c 9 %llu\n",ui1);
+    printf("#2577:code_lassop c 9 %llu\n",ui1);
 }
 
 // code_lgt(int cond) 
@@ -2569,16 +2585,16 @@
 {
     long long reg;
     if (l0>l1)
-	printf("#2571:code_lgt 1\n");
+	printf("#2587:code_lgt 1\n");
     else
-	printf("#2573:code_lgt 0\n");
+	printf("#2589:code_lgt 0\n");
     for (reg=-3;reg<7;reg++) {
         if (0<reg && reg<3)
-	   printf("#2576:reg=%lld code_lgt  0<reg && reg <3\n",reg);
+	   printf("#2592:reg=%lld code_lgt  0<reg && reg <3\n",reg);
     }
     for (reg=-3;reg<7;reg++) {
         if (-2<reg && reg<0)
-	   printf("#2580:reg=%lld code_lgt -2<reg && reg <0\n",reg);
+	   printf("#2596:reg=%lld code_lgt -2<reg && reg <0\n",reg);
     }
 }
 
@@ -2588,16 +2604,16 @@
 {
     unsigned long long reg;
     if (ul0>ul1)
-	printf("#2590:code_lugt 1\n");
+	printf("#2606:code_lugt 1\n");
     else
-	printf("#2592:code_lugt 0\n");
+	printf("#2608:code_lugt 0\n");
     for (reg=0;reg<7;reg++) {
         if (2<reg && reg<4)
-	   printf("#2595:reg=%llu code_lugt  2<reg && reg <4\n",reg);
+	   printf("#2611:reg=%llu code_lugt  2<reg && reg <4\n",reg);
     }
     for (reg=0;reg<7;reg++) {
         if (2<reg && reg<4)
-	   printf("#2599:reg=%llu code_lugt  2<reg && reg <4\n",reg);
+	   printf("#2615:reg=%llu code_lugt  2<reg && reg <4\n",reg);
     }
 }
 
@@ -2607,16 +2623,16 @@
 {
     long long reg;
     if (l0>=l1)
-	printf("#2609:code_lge 1\n");
+	printf("#2625:code_lge 1\n");
     else
-	printf("#2611:code_lge 0\n");
+	printf("#2627:code_lge 0\n");
     for (reg=-3;reg<7;reg++) {
         if (0<=reg && reg<=3)
-	   printf("#2614:reg=%lld code_lge  0<=reg && reg <=3\n",reg);
+	   printf("#2630:reg=%lld code_lge  0<=reg && reg <=3\n",reg);
     }
     for (reg=-3;reg<7;reg++) {
         if (-2<=reg && reg<=0)
-	   printf("#2618:reg=%lld code_lge -2<=reg && reg <=0\n",reg);
+	   printf("#2634:reg=%lld code_lge -2<=reg && reg <=0\n",reg);
     }
 }
 
@@ -2626,16 +2642,16 @@
 {
     unsigned long long reg;
     if (ul0>=ul1)
-	printf("#2628:code_luge 1\n");
+	printf("#2644:code_luge 1\n");
     else
-	printf("#2630:code_luge 0\n");
+	printf("#2646:code_luge 0\n");
     for (reg=0;reg<7;reg++) {
         if (2<reg && reg<4)
-	   printf("#2633:reg=%llu code_luge  2<reg && reg <4\n",reg);
+	   printf("#2649:reg=%llu code_luge  2<reg && reg <4\n",reg);
     }
     for (reg=0;reg<7;reg++) {
         if (2<reg && reg<4)
-	   printf("#2637:reg=%llu code_luge  2<reg && reg <4\n",reg);
+	   printf("#2653:reg=%llu code_luge  2<reg && reg <4\n",reg);
     }
 }
 
@@ -2644,13 +2660,13 @@
 code_leq()
 {
     if (ul0==ul1)
-	printf("#2646:code_leq 1\n");
+	printf("#2662:code_leq 1\n");
     else
-	printf("#2648:code_leq 0\n");
+	printf("#2664:code_leq 0\n");
     if (l0!=l1)
-	printf("#2650:code_lneq 1\n");
+	printf("#2666:code_lneq 1\n");
     else
-	printf("#2652:code_lneq 0\n");
+	printf("#2668:code_lneq 0\n");
 }
 
 #if 0
@@ -2660,11 +2676,11 @@
     long long i;
     for(i=0;i<6;i++) {
 	switch(i) {
-	case 1: printf("#2662:code_lswitch 1 %d\n",i); break;
-	case 2: printf("#2663:code_lswitch 2 %d\n",i); break;
-	case 3: printf("#2664:code_lswitch 3 %d\n",i);
-	case 4: printf("#2665:code_lswitch 4 %d\n",i); break;
-	default: printf("#2666:code_lswitch d %d\n",i);
+	case 1: printf("#2678:code_lswitch 1 %d\n",i); break;
+	case 2: printf("#2679:code_lswitch 2 %d\n",i); break;
+	case 3: printf("#2680:code_lswitch 3 %d\n",i);
+	case 4: printf("#2681:code_lswitch 4 %d\n",i); break;
+	default: printf("#2682:code_lswitch d %d\n",i);
 	}
     }
 }
@@ -2679,48 +2695,48 @@
     int i;
     for(i=0;i<10;i++) {
 	switch(i) {
-	case 1: printf("#2681:code_switch 1 %d\n",i); break;
-	case 2: printf("#2682:code_switch 2 %d\n",i); break;
-	case 3: printf("#2683:code_switch 3 %d\n",i);
-	case 4: printf("#2684:code_switch 4 %d\n",i); break;
+	case 1: printf("#2697:code_switch 1 %d\n",i); break;
+	case 2: printf("#2698:code_switch 2 %d\n",i); break;
+	case 3: printf("#2699:code_switch 3 %d\n",i);
+	case 4: printf("#2700:code_switch 4 %d\n",i); break;
         case 7:
-	case 5: printf("#2686:code_switch 5 %d\n",i); break;
-	case 6: printf("#2687:code_switch 6 %d\n",i); break;
-	default: printf("#2688:code_switch d %d\n",i);
+	case 5: printf("#2702:code_switch 5 %d\n",i); break;
+	case 6: printf("#2703:code_switch 6 %d\n",i); break;
+	default: printf("#2704:code_switch d %d\n",i);
 	}
     }
     for(i=0;i<10;i++) {
 	switch(i) {
-	case 1: printf("#2693:code_switch 1 %d\n",i); break;
+	case 1: printf("#2709:code_switch 1 %d\n",i); break;
 	case 2: 
 	    i = i* 100;
 	    switch(i) {
-	    case 100: printf("#2697:code_switch n 1 %d\n",i); break;
+	    case 100: printf("#2713:code_switch n 1 %d\n",i); break;
 	    case 200: 
     for(i=-100;i<10;i++) {
 	switch(i) {
-	case 1234: printf("#2701:code_switch 1 nn %d\n",i); break;
-	case 2233: printf("#2702:code_switch 2 nn %d\n",i); break;
-	case 3333: printf("#2703:code_switch 3 nn %d\n",i);
-	case -4: printf("#2704:code_switch 4 nn %d\n",i); break;
+	case 1234: printf("#2717:code_switch 1 nn %d\n",i); break;
+	case 2233: printf("#2718:code_switch 2 nn %d\n",i); break;
+	case 3333: printf("#2719:code_switch 3 nn %d\n",i);
+	case -4: printf("#2720:code_switch 4 nn %d\n",i); break;
         case 733:
-	case -5: printf("#2706:code_switch 5 nn %d\n",i); break;
-	case -326: printf("#2707:code_switch 6 nn %d\n",i); 
+	case -5: printf("#2722:code_switch 5 nn %d\n",i); break;
+	case -326: printf("#2723:code_switch 6 nn %d\n",i); 
 	}
     }
-	    case 300: printf("#2710:code_switch n 3 %d\n",i);
-	    case 400: printf("#2711:code_switch n 4 %d\n",i); break;
+	    case 300: printf("#2726:code_switch n 3 %d\n",i);
+	    case 400: printf("#2727:code_switch n 4 %d\n",i); break;
 	    case 700:
-	    case 500: printf("#2713:code_switch n 5 %d\n",i); break;
-	    case 600: printf("#2714:code_switch n 6 %d\n",i); break;
-	    default: printf("#2715:code_switch n d %d\n",i);
+	    case 500: printf("#2729:code_switch n 5 %d\n",i); break;
+	    case 600: printf("#2730:code_switch n 6 %d\n",i); break;
+	    default: printf("#2731:code_switch n d %d\n",i);
 	    }
-	case 3: printf("#2717:code_switch 3 %d\n",i);
-	case 4: printf("#2718:code_switch 4 %d\n",i); break;
+	case 3: printf("#2733:code_switch 3 %d\n",i);
+	case 4: printf("#2734:code_switch 4 %d\n",i); break;
         case 7:
-	case 5: printf("#2720:code_switch 5 %d\n",i); break;
-	case 6: printf("#2721:code_switch 6 %d\n",i); break;
-	default: printf("#2722:code_switch d %d\n",i);
+	case 5: printf("#2736:code_switch 5 %d\n",i); break;
+	case 6: printf("#2737:code_switch 6 %d\n",i); break;
+	default: printf("#2738:code_switch d %d\n",i);
 	}
     }
 }