diff mc-code-mips.c @ 338:7fe7ce0a791f bit-field-done

bit-field done for IA32, PowerPC, MIPS. bit-field assop. No bit-field global init.
author kono
date Fri, 25 Jun 2004 14:30:43 +0900
parents 694cdf15c5bd
children 0150de6a3244
line wrap: on
line diff
--- a/mc-code-mips.c	Fri Jun 25 05:37:09 2004 +0900
+++ b/mc-code-mips.c	Fri Jun 25 14:30:43 2004 +0900
@@ -180,7 +180,7 @@
 int use_int0() { 
     int i = creg;
     if (!i||!ireg||!is_int_reg(i)) {
-	if (lreg) { free_register(lreg); lreg = 0; }
+	if (lreg) { if (regs[lreg]) free_register(lreg); lreg = 0; }
 	if (!ireg) ireg = get_register();
 	// else if (ireg!=i) free_register(i);
 	i = ireg;
@@ -5548,34 +5548,11 @@
     int bitsize = cadddr(type);
     int mask = 0;
     int tmp = -1;
-#if 0
-    int i;
-#endif
     char *crn,*lrn,*trn;
     set_bitsz(type,&sign,&bitsz,&align,&l);
 // printf("# %d: bitpos=%d bitsize=%d bitsz=%d\n",lineno,bitpos,bitsize,bitsz);
     if (l) {
 	use_longlong(value);
-#if 0
-	crn = lregister_name_low(value);
-	lrn = lregister_name_low(lvalue);
-	/* shift left */
-	if ((i=bitsz-bitsize-bitpos)) 
-	    loprtc(LLSHIFT,value,list2(CONST,i));
-	trn = register_name(tmp = get_register());
-	if (bitpos+bitsize>=32) {
-	    /* make and-mask lower */
-	    mask = make_mask(bitpos>=32?bitpos-32:0,bitpos+bitsize-32-1);
-	    make_mask_and_or(mask,tmp,trn,crn,lrn);
-	}
-	crn = lregister_name_high(value);
-	lrn = lregister_name_high(lvalue);
-	if (bitpos<32) {
-	    /* make and-mask upper */
-	    mask = make_mask(bitpos,bitpos+bitsize>=32?31:bitpos+bitsize-1);
-	    make_mask_and_or(mask,tmp,trn,crn,lrn);
-	}
-#else
 	crn = lregister_name_high(value);
 	lrn = lregister_name_high(lvalue);
 	/* shift left */
@@ -5594,25 +5571,16 @@
 	    mask = make_mask(bitpos+bitsize>=32?0:32-bitpos-bitsize,31-bitpos);
 	    make_mask_and_or(mask,tmp,trn,crn,lrn);
 	}
-#endif
     } else {
 	use_int(value);
 	crn = register_name(value);
 	lrn = register_name(lvalue);
 	/* shift left */
-#if 0
-	if ((i=bitsz-bitsize-bitpos)) 
-	    oprtc(LSHIFT,value,list2(CONST,i));
-	trn = register_name(tmp = get_register());
-	/* make and-mask */
-	mask = make_mask(bitpos+(32-bitsz),bitpos+bitsize-1+(32-bitsz));
-#else
 	if (bitpos) 
 	    oprtc(LSHIFT,value,list2(CONST,bitpos));
 	trn = register_name(tmp = get_register());
 	/* make and-mask */
 	mask = make_mask(32-bitpos-bitsize,31-bitpos);
-#endif
 	make_mask_and_or(mask,tmp,trn,crn,lrn);
     }
     if (tmp!=-1) free_register(tmp);