From 7c8d5a28545bdaf7d2574fcde8867d12a13128f6 Mon Sep 17 00:00:00 2001 From: Andrew Chambers Date: Fri, 8 Oct 2021 03:27:45 +1300 Subject: Work on relocations. --- asm.peg | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'asm.peg') diff --git a/asm.peg b/asm.peg index 0718aef..281d27c 100644 --- a/asm.peg +++ b/asm.peg @@ -29,26 +29,32 @@ label = { $$.label = (Label){.kind = ASM_LABEL, .name = i.ident.name}; } instr = - "nop" { $$.kind = ASM_NOP; } + "nop" { $$.kind = ASM_NOP; } | "leave" { $$.kind = ASM_LEAVE; } - | "ret" { $$.kind = ASM_RET; } - | i:xchg { $$ = i; } - | i:add { $$ = i; } - | i:and { $$ = i; } - | i:lea { $$ = i; } - | i:mov { $$ = i; } - | i:or { $$ = i; } - | i:sub { $$ = i; } - | i:xor { $$ = i; } + | "ret" { $$.kind = ASM_RET; } + | i:jmp { $$ = i; } + | i:xchg { $$ = i; } + | i:add { $$ = i; } + | i:and { $$ = i; } + | i:lea { $$ = i; } + | i:mov { $$ = i; } + | i:or { $$ = i; } + | i:sub { $$ = i; } + | i:xor { $$ = i; } + + +jmp = + "jmp" ws t:ident + { $$.jmp = (Jmp){ .kind = ASM_JMP, .target=t.ident.name } ; } lea = - 'lea' ( + "lea" ( 'w'? ws s:m ws? ',' ws? d:r16 { $$ = INSTR(0, s, d); } | 'l'? ws s:m ws? ',' ws? d:r32 { $$ = INSTR(1, s, d); } | 'q'? ws s:m ws? ',' ws? d:r64 { $$ = INSTR(2, s, d); } ) { $$.instr.kind = ASM_LEA; } -#XXX Some other these rules can probably be collapsed. +#XXX Some of these rules can probably be collapsed (or expanded for simplicity?). mov = "mov" ( 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = INSTR(0, s, d); } -- cgit v1.2.3