Mercurial > hg > CbC > old > device
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 } |