aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Chambers <[email protected]>2021-10-14 02:24:39 +1300
committerAndrew Chambers <[email protected]>2021-10-14 02:24:39 +1300
commit946fe07401b98590fd5b9e34f2162a71eb235c69 (patch)
tree6d19d178b09e7ee8989fe27b273c46dc06de373e
parent0deae83ea5e893b8c79520660b8888b73301fd8c (diff)
Order sib parser by most common first.
-rw-r--r--asm.peg13
1 files changed, 6 insertions, 7 deletions
diff --git a/asm.peg b/asm.peg
index 97a7bd4..b864dd5 100644
--- a/asm.peg
+++ b/asm.peg
@@ -78,7 +78,7 @@ instr =
| i:movsd { $$ = i; }
| i:movss { $$ = i; }
| i:mulsd { $$ = i; }
- | i:mulss { $$ = i; } ))
+ | i:mulss { $$ = i; }))
| i:add { $$ = i; }
| i:and { $$ = i; }
| i:cmp { $$ = i; }
@@ -192,12 +192,11 @@ condition-code =
| "ae" { $$.i64 = 28; }
| "a" { $$.i64 = 29; }
-lea =
- "lea" (
+lea = "lea" (
'w'? ws s:mem ws? ',' ws? d:r16 { $$ = INSTR2(0, s, d); }
| 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = INSTR2(1, s, d); }
| 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = INSTR2(2, s, d); }
- ) { $$.instr.kind = ASM_LEA; }
+) { $$.instr.kind = ASM_LEA; }
div = "div" (
'b' ws a:mem { $$ = INSTR1(0, a); }
@@ -528,12 +527,12 @@ opt-scale-index-base =
| { $$.memarg = (Memarg){.kind=ASM_MEMARG, .scale = 0, .index=ASM_NO_REG, .base = ASM_NO_REG, .disp = {0} }; }
scale-index-base =
- '(' ws? b:r64 ws? ',' ws? i:r64 ws? ',' ws? s:number ws? ')'
+ '(' ws? b:r64-or-rip ws? ')'
+ { $$.memarg = (Memarg){.kind=ASM_MEMARG, .scale = 0, .index=ASM_NO_REG, .base = b.kind, .disp = {0} }; }
+ | '(' ws? b:r64 ws? ',' ws? i:r64 ws? ',' ws? s:number ws? ')'
{ $$.memarg = (Memarg){.kind=ASM_MEMARG, .scale = s.i64, .index=i.kind, .base = b.kind, .disp = {0} }; }
| '(' ws? b:r64 ws? ',' ws? i:r64 ')'
{ $$.memarg = (Memarg){.kind=ASM_MEMARG, .scale = 1, .index=i.kind, .base = b.kind, .disp = {0} }; }
- | '(' ws? b:r64-or-rip ws? ')'
- { $$.memarg = (Memarg){.kind=ASM_MEMARG, .scale = 0, .index=ASM_NO_REG, .base = b.kind, .disp = {0} }; }
imm8 = i:imm { i.imm.nbytes = 1; $$ = i; }
imm16 = i:imm { i.imm.nbytes = 2; $$ = i; }