aboutsummaryrefslogtreecommitdiff
path: root/asm.peg
diff options
context:
space:
mode:
Diffstat (limited to 'asm.peg')
-rw-r--r--asm.peg24
1 files changed, 24 insertions, 0 deletions
diff --git a/asm.peg b/asm.peg
index a2e90b1..f958b8c 100644
--- a/asm.peg
+++ b/asm.peg
@@ -113,10 +113,14 @@ instr =
| i:cqto { $$ = i; }
| i:nop { $$ = i; }
# Floating point is less common, so check last.
+ | i:addss { $$ = i; }
+ | i:addsd { $$ = i; }
| i:divsd { $$ = i; }
| i:pxor { $$ = i; }
| i:xorpd { $$ = i; }
| i:xorps { $$ = i; }
+ | i:subsd { $$ = i; }
+ | i:subss { $$ = i; }
| i:ucomisd { $$ = i; }
| i:ucomiss { $$ = i; }
| (& 'c'
@@ -422,6 +426,26 @@ test = "test" (
# Floating point instructions.
+addsd = "addsd" (
+ ws s:xmm ws? ',' ws? d:xmm { $$ = INSTR2(0, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }
+) { $$.instr.kind = ASM_ADDSD; }
+
+addss = "addss" (
+ ws s:xmm ws? ',' ws? d:xmm { $$ = INSTR2(0, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }
+) { $$.instr.kind = ASM_ADDSS; }
+
+subsd = "subsd" (
+ ws s:xmm ws? ',' ws? d:xmm { $$ = INSTR2(0, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }
+) { $$.instr.kind = ASM_SUBSD; }
+
+subss = "subss" (
+ ws s:xmm ws? ',' ws? d:xmm { $$ = INSTR2(0, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }
+) { $$.instr.kind = ASM_SUBSS; }
+
cvtsi2sd = "cvtsi2sd" (
ws s:r32 ws? ',' ws? d:xmm { $$ = INSTR2(0, s, d); }
| ws s:mem ws? ',' ws? d:xmm { $$ = INSTR2(1, s, d); }