summaryrefslogtreecommitdiff
path: root/test/trans.d/case/stateact1_asm.rl
diff options
context:
space:
mode:
Diffstat (limited to 'test/trans.d/case/stateact1_asm.rl')
-rw-r--r--test/trans.d/case/stateact1_asm.rl208
1 files changed, 208 insertions, 0 deletions
diff --git a/test/trans.d/case/stateact1_asm.rl b/test/trans.d/case/stateact1_asm.rl
new file mode 100644
index 00000000..1d2f9486
--- /dev/null
+++ b/test/trans.d/case/stateact1_asm.rl
@@ -0,0 +1,208 @@
+#
+# @LANG: asm
+# @GENERATED: true
+#
+
+
+
+
+%%{
+ machine state_act;
+
+ action a1 {
+ .section .rodata
+1:
+ .string "a1\n"
+ .text
+ movq $1b, %rax
+ pushq %rax
+ movq $.L_fmt_str, %rdi
+ popq %rsi
+ movq $0, %rax
+ call printf
+
+}
+ action a2 {
+ .section .rodata
+2:
+ .string "a2\n"
+ .text
+ movq $2b, %rax
+ pushq %rax
+ movq $.L_fmt_str, %rdi
+ popq %rsi
+ movq $0, %rax
+ call printf
+
+}
+ action b1 {
+ .section .rodata
+3:
+ .string "b1\n"
+ .text
+ movq $3b, %rax
+ pushq %rax
+ movq $.L_fmt_str, %rdi
+ popq %rsi
+ movq $0, %rax
+ call printf
+
+}
+ action b2 {
+ .section .rodata
+4:
+ .string "b2\n"
+ .text
+ movq $4b, %rax
+ pushq %rax
+ movq $.L_fmt_str, %rdi
+ popq %rsi
+ movq $0, %rax
+ call printf
+
+}
+ action c1 {
+ .section .rodata
+5:
+ .string "c1\n"
+ .text
+ movq $5b, %rax
+ pushq %rax
+ movq $.L_fmt_str, %rdi
+ popq %rsi
+ movq $0, %rax
+ call printf
+
+}
+ action c2 {
+ .section .rodata
+6:
+ .string "c2\n"
+ .text
+ movq $6b, %rax
+ pushq %rax
+ movq $.L_fmt_str, %rdi
+ popq %rsi
+ movq $0, %rax
+ call printf
+
+}
+ action next_again {
+ fnext again;
+
+}
+
+ hi = 'hi';
+ line = again:
+ hi
+ >to b1
+ >from b2
+ '\n'
+ >to c1
+ >from c2
+ @next_again;
+
+ main := line*
+ >to a1
+ >from a2;
+}%%
+
+
+
+ .text
+ .comm buf, 1024, 32
+ .comm bpos, 8, 8
+ .comm stack_data, 1024, 32
+ .section .rodata
+
+.L_str_accept:
+ .string "ACCEPT"
+.L_str_fail:
+ .string "FAIL"
+.L_fmt_int:
+ .string "%ld"
+.L_fmt_str:
+ .string "%s"
+
+ %% write data;
+
+ .text
+exec:
+ pushq %rbp
+ movq %rsp, %rbp
+ subq $96, %rsp
+
+ movq $stack_data, -56(%rbp)
+
+ pushq %r12
+ pushq %r13
+ movq %rdi, %r12
+
+ # Get the length.
+ movq %r12, %rdi
+ call strlen
+ movq %r12, %r13
+ movslq %eax, %rax
+ addq %rax, %r13
+
+ movq $0, bpos(%rip)
+
+ %% write init;
+ %% write exec;
+
+ # current state is in r11.
+ movq state_act_first_final(%rip), %rax
+ cmpq %rax, %r11
+ jl .L_exec_fail
+ movq $.L_str_accept, %rdi
+ call puts
+ jmp .L_exec_done
+.L_exec_fail:
+ movq $.L_str_fail, %rdi
+ call puts
+.L_exec_done:
+ popq %r13
+ popq %r12
+ leave
+ ret
+ .section .rodata
+.L_debug_msg:
+ .string "debug %d\n"
+.L_inp_0:
+ .string "hi\nhi\n"
+
+ .align 8
+inp:
+ .quad .L_inp_0
+
+ .align 8
+inplen:
+ .quad 1
+
+ .text
+ .globl main
+main:
+ pushq %rbp
+ movq %rsp, %rbp
+ pushq %r12
+ movq $0, %r12
+.L_again:
+ movq inplen(%rip), %rax
+ cmpq %r12, %rax
+ je .L_done
+ movq inp(,%r12,8), %rdi
+ call exec
+ incq %r12
+ jmp .L_again
+.L_done:
+ popq %r12
+ mov $0, %rax
+ leave
+ ret
+debug:
+ movl %edi, %esi
+ movq $0, %rax
+ movq $.L_debug_msg, %rdi
+ call printf
+ ret
+