comparison mc-codegen.c @ 286:179e22f166ef register-assop

register assop fix
author kono
date Wed, 02 Jun 2004 13:19:13 +0900
parents 912b54949344
children a0779a414855
comparison
equal deleted inserted replaced
285:912b54949344 286:179e22f166ef
1552 e2 = cadr(e1); 1552 e2 = cadr(e1);
1553 if (car(e2)==INDIRECT) e2=cadr(e2); 1553 if (car(e2)==INDIRECT) e2=cadr(e2);
1554 e3 = caddr(e1); 1554 e3 = caddr(e1);
1555 op = cadddr(e1); 1555 op = cadddr(e1);
1556 1556
1557 if (code_lassop_p && car(e2)==LREGISTER) { 1557 if (car(e2)==LREGISTER) {
1558 if (code_lconst_op_p(op,e3)) { 1558 if (code_lconst_op_p(op,e3)) {
1559 loprtc(op,cadr(e2),e3); 1559 loprtc(op,cadr(e2),e3);
1560 } else { 1560 if (use) {
1561 code_lregister(cadr(e2),USE_CREG);
1562 }
1563 return;
1564 }
1565 if (code_lassop_p) {
1561 g_expr(e3); 1566 g_expr(e3);
1562 emit_lpush(); 1567 emit_lpush();
1563 code_register_lassop(cadr(e2),op); 1568 code_register_lassop(cadr(e2),op);
1569 if (use) {
1570 code_lregister(cadr(e2),USE_CREG);
1571 }
1572 return;
1564 } 1573 }
1565 if (use) {
1566 code_lregister(cadr(e2),USE_CREG);
1567 }
1568 return;
1569 } 1574 }
1570 if (!code_lassop_p||car(e3)==LCONST) { 1575 if (!code_lassop_p||car(e3)==LCONST) {
1571 /* e2 = e2 op e3; */ 1576 /* e2 = e2 op e3; */
1572 t = long_sign(op); 1577 t = long_sign(op);
1573 if (car(e2)==LVAR||car(e2)==GVAR) { 1578 if (car(e2)==LREGISTER||car(e2)==LVAR||car(e2)==GVAR) {
1574 g_expr(assign_expr0(e2,list3(op,rvalue_t(e2,t),e3),t,t)); 1579 g_expr(assign_expr0(e2,list3(op,rvalue_t(e2,t),e3),t,t));
1575 return; 1580 return;
1576 } 1581 }
1577 /* new = &e2 */ 1582 /* new = &e2 */
1578 /* *new = *new op e3 */ 1583 /* *new = *new op e3 */
1582 free_lvar(cadr(n)); 1587 free_lvar(cadr(n));
1583 return; 1588 return;
1584 } 1589 }
1585 1590
1586 g_expr(e3); 1591 g_expr(e3);
1592 if (car(e2)==LREGISTER) {
1593 emit_lpush();
1594 code_register_lassop(cadr(e2),op);
1595 if (use)
1596 code_lregister(cadr(e2),USE_CREG);
1597 return;
1598 }
1587 emit_lpush(); 1599 emit_lpush();
1588 g_expr(e2); 1600 g_expr(e2);
1589 code_lassop(op,USE_CREG); 1601 code_lassop(op,USE_CREG);
1590 return; 1602 return;
1591 } 1603 }