aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm.peg1
-rw-r--r--main.c1
-rw-r--r--minias.h7
3 files changed, 9 insertions, 0 deletions
diff --git a/asm.peg b/asm.peg
index 56466a3..d5c222a 100644
--- a/asm.peg
+++ b/asm.peg
@@ -30,6 +30,7 @@ jmp = "jmp" ws i:ident
mod-rm-binop = "add" a:mod-rm-binop-args { $$ = a; $$.kind = ASM_ADD; }
| "and" a:mod-rm-binop-args { $$ = a; $$.kind = ASM_AND;}
+ | "or" a:mod-rm-binop-args { $$ = a; $$.kind = ASM_OR;}
| "sub" a:mod-rm-binop-args { $$ = a; $$.kind = ASM_SUB;}
| "xor" a:mod-rm-binop-args { $$ = a; $$.kind = ASM_XOR;}
diff --git a/main.c b/main.c
index ce8b666..4e8f24f 100644
--- a/main.c
+++ b/main.c
@@ -259,6 +259,7 @@ static void assemble() {
break;
case ASM_ADD:
case ASM_AND:
+ case ASM_OR:
case ASM_SUB:
case ASM_XOR: {
diff --git a/minias.h b/minias.h
index 126c842..735812e 100644
--- a/minias.h
+++ b/minias.h
@@ -49,6 +49,7 @@ typedef enum {
ASM_LEAVE,
ASM_ADD,
ASM_AND,
+ ASM_OR,
ASM_SUB,
ASM_XOR,
// Registers, order matters.
@@ -138,7 +139,10 @@ typedef struct {
} ModRMBinop;
typedef ModRMBinop Add;
+typedef ModRMBinop And;
+typedef ModRMBinop Or;
typedef ModRMBinop Sub;
+typedef ModRMBinop Xor;
union Parsev {
AsmKind kind;
@@ -148,6 +152,9 @@ union Parsev {
Memarg memarg;
ModRMBinop modrmbinop;
Add add;
+ And and;
+ Or or;
+ Xor xor;
Sub sub;
Jmp jmp;
Byte byte;