Mercurial > hg > CbC > old > device
comparison mc-code-mips.c @ 196:5f70abd9453d
*** empty log message ***
author | kono |
---|---|
date | Wed, 07 Apr 2004 21:14:19 +0900 |
parents | c193120ee2a6 |
children | 28baf6cd9ad1 |
comparison
equal
deleted
inserted
replaced
195:c193120ee2a6 | 196:5f70abd9453d |
---|---|
1511 max_freg_var = FREG_VAR_BASE-FREG_VAR_MIN; | 1511 max_freg_var = FREG_VAR_BASE-FREG_VAR_MIN; |
1512 printf("\tj %s\n",register_name(e2)); | 1512 printf("\tj %s\n",register_name(e2)); |
1513 } | 1513 } |
1514 | 1514 |
1515 int | 1515 int |
1516 rindirect(int e1) /* *(p +5 ) */ | 1516 code_rindirect(int e1, int offset, int us) |
1517 { | 1517 { |
1518 char *crn; | 1518 char *crn; |
1519 int e2,e3,e4,offset; | 1519 g_expr(e1); |
1520 | |
1521 offset=0; | |
1522 e3 = cadr(e2 = cadr(e1)); | |
1523 if (car(e2)==ADD) { | |
1524 e4=caddr(e2); | |
1525 if (car(e4)==CONST) { | |
1526 offset=cadr(e4); | |
1527 e2=e3; | |
1528 } | |
1529 } | |
1530 g_expr(e2); | |
1531 crn=register_name(creg); | 1520 crn=register_name(creg); |
1532 switch (car(e1)) { | 1521 printf("\tlw %s,%d(%s)\n",crn,offset,crn); |
1533 case FRINDIRECT: | 1522 return INT; |
1534 printf("\tl.s %s,%d(%s)\n", fregister_name(freg),offset,crn); | 1523 } |
1535 regv[creg]=0; regv[freg]=1; | 1524 |
1536 creg = freg; | 1525 int |
1537 return FLOAT; | 1526 code_crindirect(int e1, int offset, int us) |
1538 case DRINDIRECT: | 1527 { |
1528 char *crn; | |
1529 g_expr(e1); | |
1530 crn=register_name(creg); | |
1531 if (us) { | |
1532 printf("\tlbu %s,%d(%s)\n",crn,offset,crn); | |
1533 return UCHAR; | |
1534 } else { | |
1535 printf("\tlb %s,%d(%s)\n",crn,offset,crn); | |
1536 return CHAR; | |
1537 } | |
1538 } | |
1539 | |
1540 int | |
1541 code_srindirect(int e1, int offset, int us) | |
1542 { | |
1543 char *crn; | |
1544 g_expr(e1); | |
1545 crn=register_name(creg); | |
1546 if (us) { | |
1547 printf("\tlhu %s,%d(%s)\n",crn,offset,crn); | |
1548 return USHORT; | |
1549 } else { | |
1550 printf("\tlh %s,%d(%s)\n",crn,offset,crn); | |
1551 return SHORT; | |
1552 } | |
1553 } | |
1554 | |
1555 #if FLOAT_CODE | |
1556 int | |
1557 code_drindirect(int e1, int offset, int d) | |
1558 { | |
1559 char *crn; | |
1560 g_expr(e1); | |
1561 crn=register_name(creg); | |
1562 if (d) { | |
1539 printf("\tlw %s,%d(%s)\n", | 1563 printf("\tlw %s,%d(%s)\n", |
1540 dregister_name0(dreg),offset,crn); | 1564 dregister_name0(dreg),offset,crn); |
1541 printf("\tlw %s,%d(%s)\n", | 1565 printf("\tlw %s,%d(%s)\n", |
1542 dregister_name1(dreg),offset+size_of_int,crn); | 1566 dregister_name1(dreg),offset+size_of_int,crn); |
1543 regv[creg]=0; regv[dreg]=1; | 1567 regv[creg]=0; regv[dreg]=1; |
1544 creg = dreg; | 1568 creg = dreg; |
1545 return DOUBLE; | 1569 return DOUBLE; |
1546 case CRINDIRECT: | 1570 } else { |
1547 printf("\tlb %s,%d(%s)\n",crn,offset,crn); | 1571 printf("\tl.s %s,%d(%s)\n", fregister_name(freg),offset,crn); |
1548 return CHAR; | 1572 regv[creg]=0; regv[freg]=1; |
1549 case CURINDIRECT: | 1573 creg = freg; |
1550 printf("\tlbu %s,%d(%s)\n",crn,offset,crn); | 1574 return FLOAT; |
1551 return UCHAR; | 1575 } |
1552 case SRINDIRECT: | 1576 } |
1553 printf("\tlh %s,%d(%s)\n",crn,offset,crn); | 1577 #endif |
1554 return SHORT; | 1578 |
1555 case SURINDIRECT: | 1579 #if LONGLONG_CODE |
1556 printf("\tlhu %s,%d(%s)\n",crn,offset,crn); | 1580 int |
1557 return USHORT; | 1581 code_lrindirect(int e1, int offset, int us) |
1558 case RINDIRECT: | 1582 { |
1559 printf("\tlw %s,%d(%s)\n",crn,offset,crn); | 1583 char *crn; |
1560 return INT; | 1584 g_expr(e1); |
1561 } | 1585 crn=register_name(creg); |
1562 error(-1); return INT; | 1586 } |
1563 } | 1587 #endif |
1564 | 1588 |
1565 void | 1589 void |
1566 code_assign_gvar(int e2,int creg,int byte) { | 1590 code_assign_gvar(int e2,int creg,int byte) { |
1567 char *crn,*name; | 1591 char *crn,*name; |
1568 | 1592 |