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