Mercurial > hg > CbC > old > device
diff mc-code-mips.c @ 420:efbd420386c5
non aligned bitfield (not yet finished)
author | kono |
---|---|
date | Thu, 28 Oct 2004 21:20:52 +0900 |
parents | 5fafb50df9d4 |
children | 8b9136a06f56 |
line wrap: on
line diff
--- a/mc-code-mips.c Wed Oct 27 09:04:07 2004 +0900 +++ b/mc-code-mips.c Thu Oct 28 21:20:52 2004 +0900 @@ -2277,11 +2277,11 @@ { char *crn; - g_expr(list3(BAND,list3(ADD,e1,list2(CONST,15)),list2(CONST,~15))); + g_expr(list3(BAND,list3(ADD,e1,list2(CONST,15+4)),list2(CONST,~15))); use_int(reg); crn = register_name(reg); printf("\tsubu $sp,$sp,%s\n",crn); - printf("\taddu %s,$sp,$L_%d\n",crn,cprestore_label); + printf("\taddu %s,$sp,$L_%d+4\n",crn,cprestore_label); if (fnptr->sc==CODE) { printf("\tsw\t$gp,$L_%d($sp)\n",cprestore_label); } @@ -5456,7 +5456,7 @@ { int sign=0,bitsz; int align,l=0; - switch(cadr(type)) { + switch(cadr(type)) { /* value type */ case INT: sign=1; bitsz=32; align=4;break; case UNSIGNED: bitsz=32; align=4;break; case CHAR: sign=1; bitsz= 8; align=1;break; @@ -5486,7 +5486,7 @@ int bitpos = *bfd; int offset = *poffset; int l; - int bitsize = cadddr(type); + int bitsize = caddr(caddr(type)); set_bitsz(type,&sign,&bitsz,&align,&l); if (bitsize>bitsz) { error(BTERR); bitsize = i; } @@ -5531,7 +5531,7 @@ code_bit_field(int type,int bitpos,int reg) { int sign,bitsz,l,align; - int bitsize = cadddr(type); + int bitsize = caddr(caddr(type)); int i; set_bitsz(type,&sign,&bitsz,&align,&l); // printf("# %d: bitpos=%d bitsize=%d bitsz=%d\n",lineno,bitpos,bitsize,bitsz); @@ -5576,7 +5576,7 @@ code_bit_replace(int value,int lvalue,int type,int bitpos) { int sign,bitsz,l,align; - int bitsize = cadddr(type); + int bitsize = caddr(caddr(type)); int mask = 0; int tmp = -1; char *crn,*lrn,*trn; @@ -5650,7 +5650,7 @@ code_bit_replace_const(int value,int lvalue,int type,int bitpos) { int sign,bitsz,l,align; - int bitsize = cadddr(type); + int bitsize = caddr(caddr(type)); int mask = 0; int c; #if LONGLONG_CODE