Mercurial > hg > CbC > old > device
comparison mc-codegen.c @ 533:80b5058f0535 inline-code-gen-passed
inline code-gen test passed.
author | kono |
---|---|
date | Fri, 30 Dec 2005 18:33:55 +0900 |
parents | 6b0fd56848e6 |
children | 0f24e1dba811 |
comparison
equal
deleted
inserted
replaced
532:cecf5103679e | 533:80b5058f0535 |
---|---|
3250 | 3250 |
3251 | 3251 |
3252 /* right value , get the value of the variable */ | 3252 /* right value , get the value of the variable */ |
3253 | 3253 |
3254 static int | 3254 static int |
3255 indirect(int t,int e1) | 3255 indirect(int t,int e1,int type) |
3256 { | 3256 { |
3257 int e2,e3,e4,offset; | 3257 int e2,e3,e4,offset; |
3258 e2 = e1; | 3258 e2 = e1; |
3259 offset = 0; | 3259 offset = 0; |
3260 e3 = cadr(e2); | 3260 e3 = cadr(e2); |
3269 } | 3269 } |
3270 | 3270 |
3271 extern int | 3271 extern int |
3272 rvalue(int e) | 3272 rvalue(int e) |
3273 { | 3273 { |
3274 int op,c,e1; | 3274 int op,c; |
3275 NMTBL *n; | 3275 NMTBL *n; |
3276 int type0 = type_value(type); | 3276 int type0 = type_value(type); |
3277 | 3277 |
3278 if (e==0) error(-1); | 3278 if (e==0) error(-1); |
3279 op = 0; | 3279 op = 0; |
3330 if (n && (c=attr_value(n,KONST))) { | 3330 if (n && (c=attr_value(n,KONST))) { |
3331 return c; | 3331 return c; |
3332 } | 3332 } |
3333 return(list3(RLVAR+op,cadr(e),caddr(e))); | 3333 return(list3(RLVAR+op,cadr(e),caddr(e))); |
3334 case INDIRECT: | 3334 case INDIRECT: |
3335 e1=cadr(e); | 3335 return(indirect(RINDIRECT+op,cadr(e),type0)); |
3336 return(indirect(RINDIRECT+op,cadr(e))); | |
3337 case IVAR: | 3336 case IVAR: |
3338 return(indirect(RINDIRECT+op,e)); | 3337 return(indirect(RINDIRECT+op,e,type0)); |
3339 default:return(e); /* idempotent case? */ | 3338 default:return(e); /* idempotent case? */ |
3340 } | 3339 } |
3341 } | 3340 } |
3342 | 3341 |
3343 extern int | 3342 extern int |
3813 type=t1; | 3812 type=t1; |
3814 if (car(e)==CONST && cadr(e)==0) | 3813 if (car(e)==CONST && cadr(e)==0) |
3815 return(e1); | 3814 return(e1); |
3816 if (car(e)==CONST) { | 3815 if (car(e)==CONST) { |
3817 if(car(e1)==ADDRESS) { | 3816 if(car(e1)==ADDRESS) { |
3818 if (car(cadr(e1))!=GVAR) { | 3817 if (car(cadr(e1))==IVAR) { |
3818 } else if (car(cadr(e1))!=GVAR) { | |
3819 // must be lvar | 3819 // must be lvar |
3820 if (car(cadr(e1))!=LVAR) error(-1); | 3820 if (car(cadr(e1))!=LVAR) error(-1); |
3821 return(list2(ADDRESS, | 3821 return(list2(ADDRESS, |
3822 list3(car(cadr(e1)),cadr(cadr(e1))+cadr(e), | 3822 list3(car(cadr(e1)),cadr(cadr(e1))+cadr(e), |
3823 caddr(cadr(e1))))); | 3823 caddr(cadr(e1))))); |