diff --git a/worker/src/main/antlr/nl/tudelft/ewi/auta/checker/grammar/AttAsm.g4 b/worker/src/main/antlr/nl/tudelft/ewi/auta/checker/grammar/AttAsm.g4
index 44b310c58be53e92a388058d62ec5f8b51daefef..4f63d5edbc61fdabadd17d9232c890ac383e379a 100644
--- a/worker/src/main/antlr/nl/tudelft/ewi/auta/checker/grammar/AttAsm.g4
+++ b/worker/src/main/antlr/nl/tudelft/ewi/auta/checker/grammar/AttAsm.g4
@@ -42,7 +42,7 @@ expression
| register
| absolute
| constant
- | '(' expression ')'
+ | '(' expression (',' expression)* ')'
| expression '(' expression (',' expression)* ')'
| ('-'|'~'|'+') expression
| expression ('*'|'/'|'-'|'+') expression
diff --git a/worker/src/test/java/nl/tudelft/ewi/auta/checker/asm/AttAsmReaderTest.java b/worker/src/test/java/nl/tudelft/ewi/auta/checker/asm/AttAsmReaderTest.java
index f4fbacb378dd135e451b8070ad2f32365719f552..b5669128b5066222e3cdbe3d959dce9bc39128b1 100644
--- a/worker/src/test/java/nl/tudelft/ewi/auta/checker/asm/AttAsmReaderTest.java
+++ b/worker/src/test/java/nl/tudelft/ewi/auta/checker/asm/AttAsmReaderTest.java
@@ -115,6 +115,60 @@ public class AttAsmReaderTest {
);
}
+ @Test
+ public void testSimpleMemOperand() {
+ final var info = this.analyze(
+ "movq (%rbx), %rax\n"
+ );
+
+ assertThat(info.getInstructionCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testIndexedMemOperand() {
+ final var info = this.analyze(
+ "leaq (%rbx, %rcx), %r8\n"
+ );
+
+ assertThat(info.getInstructionCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testIndexedScaledMemOperand() {
+ final var info = this.analyze(
+ "pushq (%rdx, %rax, 4), %rax\n"
+ );
+
+ assertThat(info.getInstructionCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testSimpleMemOperandWithDisp() {
+ final var info = this.analyze(
+ "mov -4(%rbp), %edi\n"
+ );
+
+ assertThat(info.getInstructionCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testIndexedMemOperandWithDisp() {
+ final var info = this.analyze(
+ "movw %ax, -2(%rdx, %rdi, 2)\n"
+ );
+
+ assertThat(info.getInstructionCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testIndexedScaledMemOperandWithDisp() {
+ final var info = this.analyze(
+ "pushb 6(%rbx, %rcx, 8)\n"
+ );
+
+ assertThat(info.getInstructionCount()).isEqualTo(1);
+ }
+
private AttAsmReader.Info analyze(final String source) {
final var lexer = new AttAsmLexer(CharStreams.fromString(source));
final var tokens = new CommonTokenStream(lexer);