Several optimization patterns for DAS (Delftse Ada Subset) frontend added.
authorbal <none@none>
Mon, 14 Oct 1985 09:27:24 +0000 (09:27 +0000)
committerbal <none@none>
Mon, 14 Oct 1985 09:27:24 +0000 (09:27 +0000)
mach/m68k2/cg/table

index c721247..1713698 100644 (file)
@@ -235,6 +235,10 @@ lae | | | {EXTERNAL_ADDR,$1} | |
 
 lxl $1 == 0 | | | LB | |
 lxl $1 == 1 | | | {DISPL4,LB,8} | |
+lxl $1 == 2 | | 
+               allocate(ADDREG)
+               "move.l 8(a6),%[a]"
+               "move.l 8(%[a]),%[a]"   | %[a] | |
 lxl $1>1    | |
                allocate(ADDREG,DATAREG = {IMMEDIATE,$1-1})
                "move.l a6,%[a]"
@@ -788,9 +792,14 @@ ldl ldc sbi sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
 lde ldc sbi sde $3 == 4 && $1 == $4 | |
                                remove(MEM_ALL)
                                "sub.l #$2,$1"          | | |   (9,17)
+mli $1 == 2 | DATASCR ANY |    "muls %[2],%[1]"
+                               erase(%[1])
+                               setcc(%[1])             | %[1] | |
 mli $1 == 2 | ANY DATASCR |    "muls %[1],%[2]"
                                erase(%[2])
                                setcc(%[2])             | %[2] | |
+ldc mli loww(1) == 1 && highw(1) == 0 && $2 == 4 | | | | |
+ldc mli loww(1) == 2 && highw(1) == 0 && $2 == 4 | | | | loc 1 sli 4 |
 mli $1 == 4 | |                        remove(ALL)
                                "jsr .mli"
                                                        | DD1 | |
@@ -1062,9 +1071,7 @@ adp $1 >= 0-32767 && $1 <= 32767
 ...    | nocoercions: LOCAL_ADDR | | {LOCAL_ADDR,%[1.off]+$1} | |
 ...    | nocoercions: REGOFF_ADDR | | {REGOFF_ADDR,%[1.reg],%[1.off]+$1}  | |
 ...    | nocoercions: ADDREG | | {REGOFF_ADDR,%[1],$1} | |
-...    | ADDSCR |      "lea $1(%[1]),%[1]"
-                       erase(%[1])
-                       setcc(%[1])                     | %[1] | |
+...    | ADDSCR |      |       {REGOFF_ADDR,%[1],$1} | |
 adp    | nocoercions: EXTERNAL_ADDR | | {EXTERNAL_ADDR,%[1.off] + "+"
                                                + tostring($1)} | |
 ...    | ADDSCR |      "add.l #$1,%[1]"
@@ -1098,6 +1105,9 @@ ldl adp sdl $1 == $3 && inreg($1) < 2 | | remove(MEM_ALL)
                                "add.l #$2,$1(a6)"      | | | (8,16)
 lde adp sde $1 == $3 | |       remove(MEM_ALL)
                                "add.l #$2,$1"          | | | (9,17)
+ldc ads loww(1) == 0 && highw(1) == 0 && $2 == 4 | | | | |
+ldc ads highw(1) == 0 && $2 == 4 | ADDREG | 
+                                       | {REGOFF_ADDR,%[1],loww(1)} | |
 ads $1 == 2 |  ANY ADDSCR |    "add.w %[1],%[2]"
                                erase(%[2])
                                setcc(%[2])     | %[2] | |
@@ -1289,6 +1299,22 @@ loc loc cii $1==1 && $2==4 | ANY |
                                "ext.l %[a]"
                                erase(%[a])
                                setcc(%[a])     | %[a] | |
+loc loc cuu $1==1 && $2==4 | nocoercions: DATASCR |
+                               "and.l #255,%[1]"
+                               erase(%[1])
+                               setcc(%[1])     | %[1] | |
+...                       | ANY |
+                               allocate(DATAREG4)
+                               "clr.l %[a]"
+                               move(%[1],%[a.1])
+                               erase(%[a])
+                                               | %[a] | |
+...                       | ANY1 |
+                               allocate(DATAREG4)
+                               "clr.l %[a]"
+                               "move.b %[1],%[a.1]"
+                               erase(%[a])
+                                               | %[a] | |
 loc loc cii $1==2 && $2==4 | ANY |
                                allocate(%[1],DATAREG4)
                                move(%[1],%[a.1])
@@ -1299,6 +1325,9 @@ loc loc cuu $1==2 && $2==4 |      |       | {IMMEDIATE,0} | |
 loc loc ciu $1==2 && $2==4 |   |       | {IMMEDIATE,0} | |
 loc loc cui $1==2 && $2==4 |   |       | {IMMEDIATE,0} | |
 
+loc loc loc cuu $1 == 0 && $2 == 1 && $3 == 4 | | | {DOUBLE,"0"} | |
+loc loc loc ciu $1 == 0 && $2 == 1 && $3 == 4 | | | {DOUBLE,"0"} | |
+loc loc loc cui $1 == 0 && $2 == 1 && $3 == 4 | | | {DOUBLE,"0"} | |
 loc loc loc cuu $1 == 0 && $2 == 2 && $3 == 4 | | | {DOUBLE,"0"} | |
 loc loc loc ciu $1 == 0 && $2 == 2 && $3 == 4 | | | {DOUBLE,"0"} | |
 loc loc loc cui $1 == 0 && $2 == 2 && $3 == 4 | | | {DOUBLE,"0"} | |
@@ -1311,6 +1340,7 @@ loc loc ciu $1==4 && $2==2 | DATAREG4     | |  %[1.1] | |
 ...                       | ANY        | |  | |
 loc loc cui $1==4 && $2==2 | DATAREG4  | |  %[1.1] | |
 ...                       | ANY        | |  | |
+loc loc loc cuu $2 == 1 && $3 == 4 && $1 > 0 && $1 < 128 | | | | ldc $1 |
 
 /* Floating point stuff */
 
@@ -2251,6 +2281,24 @@ ldc cmi zgt loww(1)==0&&highw(1)==0 && $2==4 | DATA_ALT4 STACK |
                                test(%[1])
                                "bgt $3" | | |
 
+ldc cmi zlt $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "blt $3" | | |
+ldc cmi zle $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "ble $3" | | |
+ldc cmi zeq $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "beq $3" | | |
+ldc cmi zne $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "bne $3" | | |
+ldc cmi zge $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "bge $3" | | |
+ldc cmi zgt $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "bgt $3" | | |
 
 ldc cms zeq loww(1)==0&&highw(1)==0 && $2==4 | DATA_ALT4 STACK |
                                test(%[1])
@@ -2258,6 +2306,12 @@ ldc cms zeq loww(1)==0&&highw(1)==0 && $2==4 | DATA_ALT4 STACK |
 ldc cms zne loww(1)==0&&highw(1)==0 && $2==4 | DATA_ALT4 STACK |
                                test(%[1])
                                "bne $3" | | |
+ldc cms zeq $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "beq $3" | | |
+ldc cms zne $2==4 | DATA_ALT4 STACK |
+                               "cmp.l #$1,%[1]"
+                               "bne $3" | | |
 
 cmp tlt        | ANY4 ADDREG |         allocate(DATAREG={IMMEDIATE,1})
                                "cmp.l %[1],%[2]"
@@ -2559,6 +2613,7 @@ zgt |     DATA_ALT |              remove(ALL)
 
 /* G R O U P :  XIV   P R O C E D U R E   C A L L S   */
 
+lpi cai | | | | cal $1 |
 cai | ADDREG |         remove(ALL)
                        "jsr (%[1])"
                                                | | |
@@ -2739,6 +2794,16 @@ mon | STACK | "jsr .mon" | | |
 nop | STACK | "jsr .nop" | | |
 lim | | | {ABS4,".trpim"} | |
 lor $1 == 0 |  |   |  LB | |
+#ifdef REGVARS
+lor sdl $1 == 1 && inreg($2) == 2 |
+                               STACK | "move.l sp,%(regvar($1)%)" | | |
+#endif
+lor sdl $1 == 1 | STACK |      "move.l sp,$2(a6)"      | | |
+lor adp $1 == 1 | STACK |      allocate(ADDREG)
+                               "move.l sp,%[a]"
+                               "add.l #$2,%[a]"        | %[a] | |
+lor ldf $1 == 1 | STACK |      allocate(ADDREG)
+                               "move.l $2(sp),%[a]"    | %[a] | |
 lor $1 == 1 |  STACK |         "move.l sp,-(sp)"       | | |
 lor $1 == 2 | | | {ABS4,".reghp"} | |
 lpb | | | | adp 8 |