aboutsummaryrefslogtreecommitdiff
path: root/asm.peg
diff options
context:
space:
mode:
authorAndrew Chambers <[email protected]>2021-10-13 22:46:17 +1300
committerAndrew Chambers <[email protected]>2021-10-13 22:46:17 +1300
commitdfe49d06a417f4cb6a9ee0c67f7c1234c2315a7a (patch)
tree3efcf1ffc9df78f76026f6304e7d7ba1ea4410de /asm.peg
parent174fc3291257e96a81a8757ae22dd0e14d3b259f (diff)
Fix broken test.
Diffstat (limited to 'asm.peg')
-rw-r--r--asm.peg20
1 files changed, 18 insertions, 2 deletions
diff --git a/asm.peg b/asm.peg
index bcc7935..bc1ed72 100644
--- a/asm.peg
+++ b/asm.peg
@@ -80,6 +80,8 @@ instr =
| i:cvtsi2ss { $$ = i; }
| i:cvtss2sd { $$ = i; }
| i:cvtsd2ss { $$ = i; }
+ | i:cvtsd2si { $$ = i; }
+ | i:cvtss2si { $$ = i; }
| i:cmp { $$ = i; }
| i:div { $$ = i; }
| i:idiv { $$ = i; }
@@ -225,6 +227,20 @@ cvtsd2ss = "cvtsd2ss" (
| ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }
) { $$.instr.kind = ASM_CVTSD2SS; }
+cvtss2si = "cvtss2si" (
+ 'l'? ws s:xmm ws? ',' ws? d:r32 { $$ = INSTR2(0, s, d); }
+ | 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = INSTR2(1, s, d); }
+ | 'l' ws s:mem ws? ',' ws? d:r32 { $$ = INSTR2(2, s, d); }
+ | 'q' ws s:mem ws? ',' ws? d:r64 { $$ = INSTR2(3, s, d); }
+) { $$.instr.kind = ASM_CVTSS2SI; }
+
+cvtsd2si = "cvtsd2si" (
+ 'l'? ws s:xmm ws? ',' ws? d:r32 { $$ = INSTR2(0, s, d); }
+ | 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = INSTR2(1, s, d); }
+ | 'l' ws s:mem ws? ',' ws? d:r32 { $$ = INSTR2(2, s, d); }
+ | 'q' ws s:mem ws? ',' ws? d:r64 { $$ = INSTR2(3, s, d); }
+) { $$.instr.kind = ASM_CVTSD2SI; }
+
movaps = "movaps" (
ws s:xmm ws? ',' ws? d:xmm { $$ = INSTR2(0, s, d); }
| ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }
@@ -397,8 +413,8 @@ xchg =
| 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = INSTR2(17, s, d); }
) { $$.instr.kind = ASM_XCHG; }
-add = "add" a:basic-op-args { a.instr.kind = ASM_CMP; $$ = a; }
-cmp = "cmp" a:basic-op-args { a.instr.kind = ASM_ADD; $$ = a; }
+add = "add" a:basic-op-args { a.instr.kind = ASM_ADD; $$ = a; }
+cmp = "cmp" a:basic-op-args { a.instr.kind = ASM_CMP; $$ = a; }
and = "and" a:basic-op-args { a.instr.kind = ASM_AND; $$ = a; }
or = "or" a:basic-op-args { a.instr.kind = ASM_OR; $$ = a; }
sub = "sub" a:basic-op-args { a.instr.kind = ASM_SUB; $$ = a; }