A few more opcodes.
authorDavid Given <dg@cowlark.com>
Mon, 10 Oct 2016 22:29:18 +0000 (00:29 +0200)
committerDavid Given <dg@cowlark.com>
Mon, 10 Oct 2016 22:29:18 +0000 (00:29 +0200)
mach/proto/mcg/table
mach/proto/mcg/treebuilder.c

index 20ef46b..f50f02c 100644 (file)
@@ -301,7 +301,11 @@ PATTERNS
                cost 4;
 
        out:(int)reg = SUB4(left:(int)reg, right:(int)reg)
-               emit "sub %out, %right, %left"
+               emit "subf %out, %left, %right"
+               cost 4;
+
+       out:(int)reg = SUB4(left:(int)reg, right:CONST4)
+               emit "addi %out, %left, -($right)"
                cost 4;
 
        out:(int)reg = MUL4(left:(int)reg, right:(int)reg)
index 8039b34..828a997 100644 (file)
@@ -217,6 +217,30 @@ static void insn_simple(int opcode)
             break;
         }
 
+        case op_inc:
+        {
+            push(
+                new_ir2(
+                    IR_ADD, EM_wordsize,
+                    pop(EM_wordsize),
+                    new_wordir(1)
+                )
+            );
+            break;
+        }
+
+        case op_dec:
+        {
+            push(
+                new_ir2(
+                    IR_SUB, EM_wordsize,
+                    pop(EM_wordsize),
+                    new_wordir(1)
+                )
+            );
+            break;
+        }
+
         default:
             fatal("treebuilder: unknown simple instruction '%s'",
                 em_mnem[opcode - sp_fmnem]);