diff options
| author | Andrew Chambers <[email protected]> | 2021-10-05 18:58:52 +1300 |
|---|---|---|
| committer | Andrew Chambers <[email protected]> | 2021-10-05 18:58:52 +1300 |
| commit | e0b52ff23ca304d581f80f0d9bd2de76fb042d03 (patch) | |
| tree | 6ab1cef175157cbab62f9b379dbdb5f573b7cdbc /asm.peg | |
| parent | 5c0af4055474834542e2813f36f4dd9a16479e53 (diff) | |
Add more add variants.
Diffstat (limited to 'asm.peg')
| -rw-r--r-- | asm.peg | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -34,10 +34,19 @@ add = "addq" ws s:r-m64 ws? ',' ws? d:r64 { $$.add = (Add){ .kind = ASM_ADD, .type = 'q', .src = dupv(&s), .dst = dupv(&d) } } | "addq" ws s:imm ws? ',' ws? d:r-m64 { $$.add = (Add){ .kind = ASM_ADD, .type = 'q', .src = dupv(&s), .dst = dupv(&d) } } + | "addl" ws s:r-m32 ws? ',' ws? d:r32 + { $$.add = (Add){ .kind = ASM_ADD, .type = 'l', .src = dupv(&s), .dst = dupv(&d) } } + | "addl" ws s:r32 ws? ',' ws? d:r-m32 + { $$.add = (Add){ .kind = ASM_ADD, .type = 'l', .src = dupv(&s), .dst = dupv(&d) } } + | "addl" ws s:imm ws? ',' ws? d:r-m32 + { $$.add = (Add){ .kind = ASM_ADD, .type = 'l', .src = dupv(&s), .dst = dupv(&d) } } r-m64 = r:r64 { $$ = r; } | m:m { $$ = m; } +r-m32 = r:r32 { $$ = r; } + | m:m { $$ = m; } + m = '(' ws? r:r64 ws? ')' { $$.memarg = (Memarg){ .kind = ASM_MEMARG, .c = 0, .l = NULL, .reg = r.kind } } | <'-'?[0-9]+> ws? '(' ws? r:r64 ws? ')' @@ -62,6 +71,15 @@ r64 = "%rax" { $$.kind = ASM_RAX } | "%r14" { $$.kind = ASM_R14 } | "%r15" { $$.kind = ASM_R15 } +r32 = "%eax" { $$.kind = ASM_EAX } + | "%ecx" { $$.kind = ASM_ECX } + | "%edx" { $$.kind = ASM_EDX } + | "%ebx" { $$.kind = ASM_EBX } + | "%esp" { $$.kind = ASM_ESP } + | "%ebp" { $$.kind = ASM_EBP } + | "%esi" { $$.kind = ASM_ESI } + | "%edi" { $$.kind = ASM_EDI } + imm = '$' i:ident { $$.imm = (Imm){.kind = ASM_IMM, .l = i.ident.name, .c = 0 }; } |
