git: 9front

Download patch

ref: 84696bbcadb186b8df1f44e680de89ec688c0326
parent: 2e5de50460f1af9d8c1d6df0f4656482dd2c9be2
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Jun 24 15:38:46 EDT 2019

8c, 6c: LEA x, R; MOV (R), R -> MOV x, R

--- a/sys/src/cmd/6c/peep.c
+++ b/sys/src/cmd/6c/peep.c
@@ -170,6 +170,24 @@
 			}
 			break;
 
+		case ALEAQ:
+			if(regtyp(&p->to)) {
+				r1 = rnops(uniqs(r));
+				if(r1 != R){
+					p1 = r1->prog;
+					if((p1->as == AMOVL || p1->as == AMOVQ)
+					&& p1->to.type == p->to.type
+					&& p1->from.type-D_INDIR == p->to.type
+					&& p1->from.index == D_NONE
+					&& p1->from.offset == 0){
+						p->as = p1->as;
+						excise(r1);
+						t++;
+					}
+				}
+			}
+			break;
+
 		case AADDL:
 		case AADDQ:
 		case AADDW:
--- a/sys/src/cmd/8c/peep.c
+++ b/sys/src/cmd/8c/peep.c
@@ -99,6 +99,25 @@
 				}
 			}
 			break;
+
+		case ALEAL:
+			if(regtyp(&p->to)) {
+				r1 = uniqs(r);
+				if(r1 != R){
+					p1 = r1->prog;
+					if(p1->as == AMOVL
+					&& p1->to.type == p->to.type
+					&& p1->from.type-D_INDIR == p->to.type
+					&& p1->from.index == D_NONE
+					&& p1->from.offset == 0){
+						p->as = p1->as;
+						excise(r1);
+						t++;
+					}
+				}
+			}
+			break;
+
 		case AADDL:
 		case AADDW:
 			if(p->from.type != D_CONST || needc(p->link))
--