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)))));