changeset 397:33a09aa401ba

arm const pass
author kono
date Fri, 15 Oct 2004 02:08:06 +0900
parents bfeefa7f09f5
children bf583e04936f
files .gdbinit Changes mc-code-arm.c mc-codegen.c mc-codegen.h test/const.c
diffstat 6 files changed, 366 insertions(+), 91 deletions(-) [+]
line wrap: on
line diff
--- a/.gdbinit	Wed Oct 13 16:10:44 2004 +0900
+++ b/.gdbinit	Fri Oct 15 02:08:06 2004 +0900
@@ -5,7 +5,7 @@
 # run  -s nkf203/nkf.c
 # run  -s -ob01.s mc-switch.c
 # run  -s l.c
-run  -s test/bitfield.c
+run  -s test/const.c
 # run  -s test/basic.c
 # run -s test/code-gen-all.c
 define regs 
--- a/Changes	Wed Oct 13 16:10:44 2004 +0900
+++ b/Changes	Fri Oct 15 02:08:06 2004 +0900
@@ -6001,3 +6001,25 @@
 そうか、C++ のmaglegationをいれれば、C++ とは接続可能。
 だけど。
 
+
+Wed Oct 13 21:06:31 JST 2004
+
+mvn は1's complement で、sub は2's complement なみたいね。
+なので、8bit const の時におかしくなる。
+
+32bit word のalignmentは4でなくてはならないらしい。
+
+0x20005cc <code_lvar_address+216>:      str     r0, [r11, -#22]
+(gdb) p $r0
+$13 = -1073742791
+0x20005d0 <code_lvar_address+220>:      ldr     r0, [r11, -#22]
+(gdb) si
+(gdb) p $r0
+$15 = -63324161
+(gdb) p (char*) -1073742791
+$16 = 0xbffffc39 " \004@L
+(gdb) p (char*)-63324161
+$17 = 0xfc39bfff <Address 0xfc39bfff out of bounds>
+(gdb) quit
+
+うーむ。
--- a/mc-code-arm.c	Wed Oct 13 16:10:44 2004 +0900
+++ b/mc-code-arm.c	Fri Oct 15 02:08:06 2004 +0900
@@ -79,9 +79,9 @@
 static int  lreg_sp;  /* longlong  REGister Stack-Pointer */
 static int lreg_stack[MAX_MAX]; /* 実際のレジスタの領域 */
 
-#define REG_ip   12
-#define REG_fp   13
-#define REG_sp   14
+#define REG_ip   13
+#define REG_fp   14
+#define REG_sp   15
 #define REG_VAR_BASE 11
 #define REG_VAR_MIN  9
 #define MIN_TMP_REG 2          /* only one tmp register? */
@@ -322,8 +322,8 @@
                       prev $sp=$fp                                   $sp=$fp
  */
 
-#define arg_offset 8
-#define arg_offset1 0
+#define arg_offset 0
+#define arg_offset1 (-16)
 int disp_offset = 0;
 #define disp_offset  0
 
@@ -355,9 +355,11 @@
 // printf("        @ args = %d, pretend = %d, frame = %d\n",
 // 	max_func_args,0,round16(-disp));
 // printf("        @ frame_needed = 1, current_function_anonymous_args = 0\n");
-printf("\t.set .L%d, %d\n",lvar_offset_label,lvar_offsetv);
+// printf("\t.set .L%d, %d\n",lvar_offset_label,lvar_offsetv);
+printf("\t.set .L%d, %d\n",lvar_offset_label,-16);
 printf("\t.set .L%d, %d\n",r1_offset_label,r1_offsetv);
 
+
 #if 0
 printf("# vars= %d, regs= %d/%d, args= %d, extra= %d\n",
 	round16(-disp),
@@ -518,6 +520,7 @@
     size_of_double = SIZE_OF_DOUBLE;
     size_of_longlong = SIZE_OF_LONGLONG;
     endian = ENDIAN;
+    disp_align = 4;
     init_src = init_src0;
 
     reg=RET_LREGISTER;
@@ -1330,6 +1333,16 @@
 
 #define mask8(d,bit)   (d & (255 << bit))
 
+/*
+     mode   CONST or other (CMP is Ok only in stage 1 result)
+     *p1    stage 1 const
+     *p2    stage 2 const
+     *p3    stage 3 const
+     return 0 ... require 4 stage
+            1 ... positive result
+           -1 ... negative result
+
+ */
 static int
 make_const(int c,int *p1,int *p2,int *p3,int mode)
 {
@@ -1338,24 +1351,49 @@
     int msign,mim,mjm,mkm;
     int id,jd,kd;
     int i,j,k;
+    int d;
+    if (c == (d = mask8(c,0))) {
+	min_stage=1; min_stage=1; msign = 1;
+	    mim = d;mjm = 0;mkm = 0;
+    } else if (mode!=CONST) {
+	if (-c == (d = mask8(-c,0))) {
+	    min_stage=1; min_stage=1; msign = -1;
+		mim = d;mjm = 0;mkm = 0;
+	}
+    } else {
+	if (~c== (d = mask8(~c,0))) {
+	    min_stage=1; min_stage=1; msign = -1;
+		mim = d;mjm = 0;mkm = 0;
+	}
+    }
     for(sign=1;sign>=-1;sign-=2) {
-	int d;
-        if (sign==1) { d = c; } else { d = mode==CMP?-c:~c; }
-	if (mask8(d,0)==d||d==0) {
-	    min_stage=1; min_stage=1; msign = sign;
-		mim = d;mjm = 0;mkm = 0;
-	    break;
-	}
 	if (min_stage==1) break;
         for(i=24;i>=0;i-=2) {
 	    jm = km = 0;
-            if (!(im=mask8(d,i))) continue;
-            id = d - im;
-            if (id==0) { 
-		min_stage=1; msign = sign;
-		mim = im;mjm = jm;mkm = km;
-		break;
+	    if (sign>0) {
+		if (c == (d = mask8(c,i))) {
+		    min_stage=1; min_stage=1; msign = 1;
+			mim = d;mjm = 0;mkm = 0;
+		    break;
+		}
+		id = c - d;
+	    } else if (mode!=CONST) {
+		if (-c == (d = mask8(-c,i))) {
+		    min_stage=1; min_stage=1; msign = -1;
+			mim = d;mjm = 0;mkm = 0;
+		    break;
+		}
+		id = -c - d;
+	    } else {
+		if (~c== (d = mask8(~c,i))) {
+		    min_stage=1; min_stage=1; msign = -1;
+			mim = d;mjm = 0;mkm = 0;
+		    break;
+		}
+		id = ~c - d;
 	    }
+	    if (d==0) continue;
+	    im = d;
 	    if (min_stage<=2) continue;
             for(j=i-8;j>=0;j-=2) {
 		km = 0;
@@ -1390,7 +1428,7 @@
 {
     int sign,p1,p2,p3;
     sign = make_const(c,&p1,&p2,&p3,mode);
-    return (p1==0||(p1&&!p2&&!p3))?sign:0;
+    return (c==0||(p1&&!p2&&!p3))?sign:0;
 }
 
 
@@ -1404,7 +1442,7 @@
     use_int(reg);
     crn = register_name(reg);
     inc_inst(3);
-    if ((s=make_const(e2,&p1,&p2,&p3,0))) {
+    if ((s=make_const(e2,&p1,&p2,&p3,CONST))) {
 	add = s>0?"add":"sub";
 	mov = s>0?"mov":"mvn";
 	printf("\t%s\t%s, #%d\n",mov,crn,p1);
@@ -1426,6 +1464,8 @@
 {
     char *crn = register_name(reg);
     char *rrn = register_name(r);
+    char *drn;
+    int dreg;
     int s,p1,p2,p3;
     char *add;
     int label,disp;
@@ -1441,8 +1481,10 @@
 	if (p3) printf("\t%s\t%s, %s, #%d\n",add,crn,rrn,p3);
     } else {
 	disp = search_const(CONST,offset,&label);
-	printf("\tldr\t%s, .L%d+%d\n",crn,label,disp);
-	printf("\tadd\t%s, %s, %s\n",crn,crn,rrn);
+	drn = register_name(dreg = get_register());
+	printf("\tldr\t%s, .L%d+%d\n",drn,label,disp);
+	printf("\tadd\t%s, %s, %s\n",crn,drn,rrn);
+	free_register(dreg);
     }
 }
 
--- a/mc-codegen.c	Wed Oct 13 16:10:44 2004 +0900
+++ b/mc-codegen.c	Fri Oct 15 02:08:06 2004 +0900
@@ -16,6 +16,7 @@
 int size_of_longlong;
 int bit_of_byte;
 int endian;
+int disp_align;
 
 static void assign(int e1);
 static void gen_asm(int asm0,int in,int out,int opt,int e);
@@ -3608,7 +3609,14 @@
 extern int
 new_lvar0(int sz)
 {
-    return disp-=sz;
+    switch (disp_align) {
+    default:
+    case 0: return disp-=sz;
+    case 4:
+	disp-=sz;
+	if (sz==4) disp &= -4;
+	return disp;
+    }
 }
 
 extern int
--- a/mc-codegen.h	Wed Oct 13 16:10:44 2004 +0900
+++ b/mc-codegen.h	Fri Oct 15 02:08:06 2004 +0900
@@ -9,6 +9,7 @@
 extern int size_of_longlong;
 extern int bit_of_byte;
 extern int endian;
+extern int disp_align;
 
 #define USE_CREG (-1)
 #define ASM_INPUT	1
--- a/test/const.c	Wed Oct 13 16:10:44 2004 +0900
+++ b/test/const.c	Fri Oct 15 02:08:06 2004 +0900
@@ -2,74 +2,276 @@
 {
     int i;
     i = 0x0f0f0ff;
-    printf("%x\n",i);
+    printf("0:\t%x\n",i);
     i = 0x0f0f0ff<<1;
-    printf("%x\n",i);
+    printf("1:\t%x\n",i);
+
+i = 1; printf("2:\t%x\n",i);
+i = -1; printf("3:\t%x\n",i);
+   if (i==1) printf("i==1\n",i);
+   if (i==-1) printf("i==-1\n",i);
+
+i = 0x555<<0; printf("4:\t%x\n",i);
+i = 0x555<<1; printf("5:\t%x\n",i);
+i = 0x555<<2; printf("6:\t%x\n",i);
+i = 0x555<<3; printf("7:\t%x\n",i);
+i = 0x555<<4; printf("8:\t%x\n",i);
+i = 0x555<<5; printf("9:\t%x\n",i);
+i = 0x555<<6; printf("10:\t%x\n",i);
+i = 0x555<<7; printf("11:\t%x\n",i);
+i = 0x555<<8; printf("12:\t%x\n",i);
+i = 0x555<<9; printf("13:\t%x\n",i);
+i = 0x555<<10; printf("14:\t%x\n",i);
+i = 0x555<<11; printf("15:\t%x\n",i);
+i = 0x555<<12; printf("16:\t%x\n",i);
+i = 0x555<<13; printf("17:\t%x\n",i);
+i = 0x555<<14; printf("18:\t%x\n",i);
+i = 0x555<<15; printf("19:\t%x\n",i);
+i = 0x555<<16; printf("20:\t%x\n",i);
+i = 0x555<<17; printf("21:\t%x\n",i);
+i = 0x555<<18; printf("22:\t%x\n",i);
+i = 0x555<<19; printf("23:\t%x\n",i);
+i = 0x555<<20; printf("24:\t%x\n",i);
+i = 0x555<<21; printf("25:\t%x\n",i);
+i = 0x555<<22; printf("26:\t%x\n",i);
+i = 0x555<<23; printf("27:\t%x\n",i);
+i = 0x555<<24; printf("28:\t%x\n",i);
+i = 0x555<<25; printf("29:\t%x\n",i);
+i = 0x555<<26; printf("30:\t%x\n",i);
+i = 0x555<<27; printf("31:\t%x\n",i);
+i = 0x555<<28; printf("32:\t%x\n",i);
+i = 0x555<<29; printf("33:\t%x\n",i);
+i = 0x555<<30; printf("34:\t%x\n",i);
+i = 0x555<<31; printf("35:\t%x\n",i);
+
+i = 1; printf("36:\t%x\n",i);
+i = 3; printf("37:\t%x\n",i);
+i = 7; printf("38:\t%x\n",i);
+i = 15; printf("39:\t%x\n",i);
+i = 31; printf("40:\t%x\n",i);
+i = 63; printf("41:\t%x\n",i);
+i = 127; printf("42:\t%x\n",i);
+i = 255; printf("43:\t%x\n",i);
+i = 511; printf("44:\t%x\n",i);
+i = 1023; printf("45:\t%x\n",i);
+i = 2047; printf("46:\t%x\n",i);
+i = 4095; printf("47:\t%x\n",i);
+i = 8191; printf("48:\t%x\n",i);
+i = 16383; printf("49:\t%x\n",i);
+i = 32767; printf("50:\t%x\n",i);
+i = 65535; printf("51:\t%x\n",i);
+i = 131071; printf("52:\t%x\n",i);
+i = 262143; printf("53:\t%x\n",i);
+i = 524287; printf("54:\t%x\n",i);
+i = 1048575; printf("55:\t%x\n",i);
+i = 2097151; printf("56:\t%x\n",i);
+i = 4194303; printf("57:\t%x\n",i);
+i = 8388607; printf("58:\t%x\n",i);
+i = 16777215; printf("59:\t%x\n",i);
+i = 33554431; printf("60:\t%x\n",i);
+i = 67108863; printf("61:\t%x\n",i);
+i = 134217727; printf("62:\t%x\n",i);
+i = 268435455; printf("63:\t%x\n",i);
+i = 536870911; printf("64:\t%x\n",i);
+i = 1073741823; printf("65:\t%x\n",i);
+i = 2147483647; printf("66:\t%x\n",i);
+i = 4294967295; printf("67:\t%x\n",i);
+
+i = -( 0x555<<0 ); printf("68:\t%x\n",i);
+i = -( 0x555<<1 ); printf("69:\t%x\n",i);
+i = -( 0x555<<2 ); printf("70:\t%x\n",i);
+i = -( 0x555<<3 ); printf("71:\t%x\n",i);
+i = -( 0x555<<4 ); printf("72:\t%x\n",i);
+i = -( 0x555<<5 ); printf("73:\t%x\n",i);
+i = -( 0x555<<6 ); printf("74:\t%x\n",i);
+i = -( 0x555<<7 ); printf("75:\t%x\n",i);
+i = -( 0x555<<8 ); printf("76:\t%x\n",i);
+i = -( 0x555<<9 ); printf("77:\t%x\n",i);
+i = -( 0x555<<10 ); printf("78:\t%x\n",i);
+i = -( 0x555<<11 ); printf("79:\t%x\n",i);
+i = -( 0x555<<12 ); printf("80:\t%x\n",i);
+i = -( 0x555<<13 ); printf("81:\t%x\n",i);
+i = -( 0x555<<14 ); printf("82:\t%x\n",i);
+i = -( 0x555<<15 ); printf("83:\t%x\n",i);
+i = -( 0x555<<16 ); printf("84:\t%x\n",i);
+i = -( 0x555<<17 ); printf("85:\t%x\n",i);
+i = -( 0x555<<18 ); printf("86:\t%x\n",i);
+i = -( 0x555<<19 ); printf("87:\t%x\n",i);
+i = -( 0x555<<20 ); printf("88:\t%x\n",i);
+i = -( 0x555<<21 ); printf("89:\t%x\n",i);
+i = -( 0x555<<22 ); printf("90:\t%x\n",i);
+i = -( 0x555<<23 ); printf("91:\t%x\n",i);
+i = -( 0x555<<24 ); printf("92:\t%x\n",i);
+i = -( 0x555<<25 ); printf("93:\t%x\n",i);
+i = -( 0x555<<26 ); printf("94:\t%x\n",i);
+i = -( 0x555<<27 ); printf("95:\t%x\n",i);
+i = -( 0x555<<28 ); printf("96:\t%x\n",i);
+i = -( 0x555<<29 ); printf("97:\t%x\n",i);
+i = -( 0x555<<30 ); printf("98:\t%x\n",i);
+i = -( 0x555<<31 ); printf("99:\t%x\n",i);
 
-i = 0x555<<0; printf("%x\n",i);
-i = 0x555<<1; printf("%x\n",i);
-i = 0x555<<2; printf("%x\n",i);
-i = 0x555<<3; printf("%x\n",i);
-i = 0x555<<4; printf("%x\n",i);
-i = 0x555<<5; printf("%x\n",i);
-i = 0x555<<6; printf("%x\n",i);
-i = 0x555<<7; printf("%x\n",i);
-i = 0x555<<8; printf("%x\n",i);
-i = 0x555<<9; printf("%x\n",i);
-i = 0x555<<10; printf("%x\n",i);
-i = 0x555<<11; printf("%x\n",i);
-i = 0x555<<12; printf("%x\n",i);
-i = 0x555<<13; printf("%x\n",i);
-i = 0x555<<14; printf("%x\n",i);
-i = 0x555<<15; printf("%x\n",i);
-i = 0x555<<16; printf("%x\n",i);
-i = 0x555<<17; printf("%x\n",i);
-i = 0x555<<18; printf("%x\n",i);
-i = 0x555<<19; printf("%x\n",i);
-i = 0x555<<20; printf("%x\n",i);
-i = 0x555<<21; printf("%x\n",i);
-i = 0x555<<22; printf("%x\n",i);
-i = 0x555<<23; printf("%x\n",i);
-i = 0x555<<24; printf("%x\n",i);
-i = 0x555<<25; printf("%x\n",i);
-i = 0x555<<26; printf("%x\n",i);
-i = 0x555<<27; printf("%x\n",i);
-i = 0x555<<28; printf("%x\n",i);
-i = 0x555<<29; printf("%x\n",i);
-i = 0x555<<30; printf("%x\n",i);
-i = 0x555<<31; printf("%x\n",i);
+i = -( 1 ); printf("100:\t%x\n",i);
+i = -( 3 ); printf("101:\t%x\n",i);
+i = -( 7 ); printf("102:\t%x\n",i);
+i = -( 15 ); printf("103:\t%x\n",i);
+i = -( 31 ); printf("104:\t%x\n",i);
+i = -( 63 ); printf("105:\t%x\n",i);
+i = -( 127 ); printf("106:\t%x\n",i);
+i = -( 255 ); printf("107:\t%x\n",i);
+i = -( 511 ); printf("108:\t%x\n",i);
+i = -( 1023 ); printf("109:\t%x\n",i);
+i = -( 2047 ); printf("110:\t%x\n",i);
+i = -( 4095 ); printf("111:\t%x\n",i);
+i = -( 8191 ); printf("112:\t%x\n",i);
+i = -( 16383 ); printf("113:\t%x\n",i);
+i = -( 32767 ); printf("114:\t%x\n",i);
+i = -( 65535 ); printf("115:\t%x\n",i);
+i = -( 131071 ); printf("116:\t%x\n",i);
+i = -( 262143 ); printf("117:\t%x\n",i);
+i = -( 524287 ); printf("118:\t%x\n",i);
+i = -( 1048575 ); printf("119:\t%x\n",i);
+i = -( 2097151 ); printf("120:\t%x\n",i);
+i = -( 4194303 ); printf("121:\t%x\n",i);
+i = -( 8388607 ); printf("122:\t%x\n",i);
+i = -( 16777215 ); printf("123:\t%x\n",i);
+i = -( 33554431 ); printf("124:\t%x\n",i);
+i = -( 67108863 ); printf("125:\t%x\n",i);
+i = -( 134217727 ); printf("126:\t%x\n",i);
+i = -( 268435455 ); printf("127:\t%x\n",i);
+i = -( 536870911 ); printf("128:\t%x\n",i);
+i = -( 1073741823 ); printf("129:\t%x\n",i);
+i = -( 2147483647 ); printf("130:\t%x\n",i);
+i = -( 4294967295 ); printf("131:\t%x\n",i);
+
+i += 0x555<<0; printf("132:\t%x\n",i);
+i += 0x555<<1; printf("133:\t%x\n",i);
+i += 0x555<<2; printf("134:\t%x\n",i);
+i += 0x555<<3; printf("135:\t%x\n",i);
+i += 0x555<<4; printf("136:\t%x\n",i);
+i += 0x555<<5; printf("137:\t%x\n",i);
+i += 0x555<<6; printf("138:\t%x\n",i);
+i += 0x555<<7; printf("139:\t%x\n",i);
+i += 0x555<<8; printf("140:\t%x\n",i);
+i += 0x555<<9; printf("141:\t%x\n",i);
+i += 0x555<<10; printf("142:\t%x\n",i);
+i += 0x555<<11; printf("143:\t%x\n",i);
+i += 0x555<<12; printf("144:\t%x\n",i);
+i += 0x555<<13; printf("145:\t%x\n",i);
+i += 0x555<<14; printf("146:\t%x\n",i);
+i += 0x555<<15; printf("147:\t%x\n",i);
+i += 0x555<<16; printf("148:\t%x\n",i);
+i += 0x555<<17; printf("149:\t%x\n",i);
+i += 0x555<<18; printf("150:\t%x\n",i);
+i += 0x555<<19; printf("151:\t%x\n",i);
+i += 0x555<<20; printf("152:\t%x\n",i);
+i += 0x555<<21; printf("153:\t%x\n",i);
+i += 0x555<<22; printf("154:\t%x\n",i);
+i += 0x555<<23; printf("155:\t%x\n",i);
+i += 0x555<<24; printf("156:\t%x\n",i);
+i += 0x555<<25; printf("157:\t%x\n",i);
+i += 0x555<<26; printf("158:\t%x\n",i);
+i += 0x555<<27; printf("159:\t%x\n",i);
+i += 0x555<<28; printf("160:\t%x\n",i);
+i += 0x555<<29; printf("161:\t%x\n",i);
+i += 0x555<<30; printf("162:\t%x\n",i);
+i += 0x555<<31; printf("163:\t%x\n",i);
 
-i = 1; printf("%x\n",i);
-i = 3; printf("%x\n",i);
-i = 7; printf("%x\n",i);
-i = 15; printf("%x\n",i);
-i = 31; printf("%x\n",i);
-i = 63; printf("%x\n",i);
-i = 127; printf("%x\n",i);
-i = 255; printf("%x\n",i);
-i = 511; printf("%x\n",i);
-i = 1023; printf("%x\n",i);
-i = 2047; printf("%x\n",i);
-i = 4095; printf("%x\n",i);
-i = 8191; printf("%x\n",i);
-i = 16383; printf("%x\n",i);
-i = 32767; printf("%x\n",i);
-i = 65535; printf("%x\n",i);
-i = 131071; printf("%x\n",i);
-i = 262143; printf("%x\n",i);
-i = 524287; printf("%x\n",i);
-i = 1048575; printf("%x\n",i);
-i = 2097151; printf("%x\n",i);
-i = 4194303; printf("%x\n",i);
-i = 8388607; printf("%x\n",i);
-i = 16777215; printf("%x\n",i);
-i = 33554431; printf("%x\n",i);
-i = 67108863; printf("%x\n",i);
-i = 134217727; printf("%x\n",i);
-i = 268435455; printf("%x\n",i);
-i = 536870911; printf("%x\n",i);
-i = 1073741823; printf("%x\n",i);
-i = 2147483647; printf("%x\n",i);
-i = 4294967295; printf("%x\n",i);
+i += 1; printf("164:\t%x\n",i);
+i += 3; printf("165:\t%x\n",i);
+i += 7; printf("166:\t%x\n",i);
+i += 15; printf("167:\t%x\n",i);
+i += 31; printf("168:\t%x\n",i);
+i += 63; printf("169:\t%x\n",i);
+i += 127; printf("170:\t%x\n",i);
+i += 255; printf("171:\t%x\n",i);
+i += 511; printf("172:\t%x\n",i);
+i += 1023; printf("173:\t%x\n",i);
+i += 2047; printf("174:\t%x\n",i);
+i += 4095; printf("175:\t%x\n",i);
+i += 8191; printf("176:\t%x\n",i);
+i += 16383; printf("177:\t%x\n",i);
+i += 32767; printf("178:\t%x\n",i);
+i += 65535; printf("179:\t%x\n",i);
+i += 131071; printf("180:\t%x\n",i);
+i += 262143; printf("181:\t%x\n",i);
+i += 524287; printf("182:\t%x\n",i);
+i += 1048575; printf("183:\t%x\n",i);
+i += 2097151; printf("184:\t%x\n",i);
+i += 4194303; printf("185:\t%x\n",i);
+i += 8388607; printf("186:\t%x\n",i);
+i += 16777215; printf("187:\t%x\n",i);
+i += 33554431; printf("188:\t%x\n",i);
+i += 67108863; printf("189:\t%x\n",i);
+i += 134217727; printf("190:\t%x\n",i);
+i += 268435455; printf("191:\t%x\n",i);
+i += 536870911; printf("192:\t%x\n",i);
+i += 1073741823; printf("193:\t%x\n",i);
+i += 2147483647; printf("194:\t%x\n",i);
+i += 4294967295; printf("195:\t%x\n",i);
 
+i += -( 0x555<<0 ); printf("196:\t%x\n",i);
+i += -( 0x555<<1 ); printf("197:\t%x\n",i);
+i += -( 0x555<<2 ); printf("198:\t%x\n",i);
+i += -( 0x555<<3 ); printf("199:\t%x\n",i);
+i += -( 0x555<<4 ); printf("200:\t%x\n",i);
+i += -( 0x555<<5 ); printf("201:\t%x\n",i);
+i += -( 0x555<<6 ); printf("202:\t%x\n",i);
+i += -( 0x555<<7 ); printf("203:\t%x\n",i);
+i += -( 0x555<<8 ); printf("204:\t%x\n",i);
+i += -( 0x555<<9 ); printf("205:\t%x\n",i);
+i += -( 0x555<<10 ); printf("206:\t%x\n",i);
+i += -( 0x555<<11 ); printf("207:\t%x\n",i);
+i += -( 0x555<<12 ); printf("208:\t%x\n",i);
+i += -( 0x555<<13 ); printf("209:\t%x\n",i);
+i += -( 0x555<<14 ); printf("210:\t%x\n",i);
+i += -( 0x555<<15 ); printf("211:\t%x\n",i);
+i += -( 0x555<<16 ); printf("212:\t%x\n",i);
+i += -( 0x555<<17 ); printf("213:\t%x\n",i);
+i += -( 0x555<<18 ); printf("214:\t%x\n",i);
+i += -( 0x555<<19 ); printf("215:\t%x\n",i);
+i += -( 0x555<<20 ); printf("216:\t%x\n",i);
+i += -( 0x555<<21 ); printf("217:\t%x\n",i);
+i += -( 0x555<<22 ); printf("218:\t%x\n",i);
+i += -( 0x555<<23 ); printf("219:\t%x\n",i);
+i += -( 0x555<<24 ); printf("220:\t%x\n",i);
+i += -( 0x555<<25 ); printf("221:\t%x\n",i);
+i += -( 0x555<<26 ); printf("222:\t%x\n",i);
+i += -( 0x555<<27 ); printf("223:\t%x\n",i);
+i += -( 0x555<<28 ); printf("224:\t%x\n",i);
+i += -( 0x555<<29 ); printf("225:\t%x\n",i);
+i += -( 0x555<<30 ); printf("226:\t%x\n",i);
+i += -( 0x555<<31 ); printf("227:\t%x\n",i);
+
+i += -( 1 ); printf("228:\t%x\n",i);
+i += -( 3 ); printf("229:\t%x\n",i);
+i += -( 7 ); printf("230:\t%x\n",i);
+i += -( 15 ); printf("231:\t%x\n",i);
+i += -( 31 ); printf("232:\t%x\n",i);
+i += -( 63 ); printf("233:\t%x\n",i);
+i += -( 127 ); printf("234:\t%x\n",i);
+i += -( 255 ); printf("235:\t%x\n",i);
+i += -( 511 ); printf("236:\t%x\n",i);
+i += -( 1023 ); printf("237:\t%x\n",i);
+i += -( 2047 ); printf("238:\t%x\n",i);
+i += -( 4095 ); printf("239:\t%x\n",i);
+i += -( 8191 ); printf("240:\t%x\n",i);
+i += -( 16383 ); printf("241:\t%x\n",i);
+i += -( 32767 ); printf("242:\t%x\n",i);
+i += -( 65535 ); printf("243:\t%x\n",i);
+i += -( 131071 ); printf("244:\t%x\n",i);
+i += -( 262143 ); printf("245:\t%x\n",i);
+i += -( 524287 ); printf("246:\t%x\n",i);
+i += -( 1048575 ); printf("247:\t%x\n",i);
+i += -( 2097151 ); printf("248:\t%x\n",i);
+i += -( 4194303 ); printf("249:\t%x\n",i);
+i += -( 8388607 ); printf("250:\t%x\n",i);
+i += -( 16777215 ); printf("251:\t%x\n",i);
+i += -( 33554431 ); printf("252:\t%x\n",i);
+i += -( 67108863 ); printf("253:\t%x\n",i);
+i += -( 134217727 ); printf("254:\t%x\n",i);
+i += -( 268435455 ); printf("255:\t%x\n",i);
+i += -( 536870911 ); printf("256:\t%x\n",i);
+i += -( 1073741823 ); printf("257:\t%x\n",i);
+i += -( 2147483647 ); printf("258:\t%x\n",i);
+i += -( 4294967295 ); printf("259:\t%x\n",i);
 }