Mercurial > hg > CbC > old > device
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);