// File: /workspace/github_cpp_makefile_star2_O3/pfnet-research[P]pml/src/test.cpp
// Function: arith_test::arith_test()
PML_CUSTOM_TEST(arith_test, lang_feature_test) {
    using namespace ast;
    parse_test("1 +(2+3*4) - 3", "Sub(Add(1, Add(2, Mul(3, 4))), 3)");
    eval_test(
            make<sub_expr_t>(
                make<add_expr_t>(
                    make<int_expr_t>(1),
                    make<add_expr_t>(
                        make<int_expr_t>(2),
                        make<mul_expr_t>(
                            make<int_expr_t>(3),
                            make<int_expr_t>(4)))),
                make<int_expr_t>(3)),
            make<int_expr_t>(12));
    parse_test("1-(-3)", "Sub(1, -3)");
    eval_test(
            make<sub_expr_t>(
                make<int_expr_t>(1),
                make<int_expr_t>(-3)),
            make<int_expr_t>(4));
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
movq %rdi, %rbx
movl $0x0, 0x8(%rdi)
leaq 0x33352(%rip), %rax     # 0x615a0
movq %rax, (%rdi)
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1c83b(%rip), %rsi     # 0x4aa9c
leaq 0x1c842(%rip), %rdx     # 0x4aaaa
movq %rsp, %rdi
callq 0x116f8
leaq 0x30(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1c82b(%rip), %rsi     # 0x4aaab
leaq 0x1c845(%rip), %rdx     # 0x4aacc
leaq 0x20(%rsp), %rdi
callq 0x116f8
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x3543e
movq 0x20(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2e2b8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x92e0
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2e2ce
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x92e0
movl $0x20, %edi
callq 0x92d0
movabsq $0x100000001, %r15      # imm = 0x100000001
movq %r15, 0x8(%rax)
leaq 0x317fb(%rip), %r12     # 0x5fae8
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
leaq 0x3183a(%rip), %r13     # 0x5fb38
movq %r13, 0x10(%rax)
movl $0x1, 0x18(%rax)
movq %rax, 0x58(%rsp)
movq %rcx, 0x50(%rsp)
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0x2, 0x18(%rax)
movq %rax, 0x98(%rsp)
movq %rcx, 0x90(%rsp)
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0x3, 0x18(%rax)
movq %rax, 0x78(%rsp)
movq %rcx, 0x70(%rsp)
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0x4, 0x18(%rax)
leaq 0xd8(%rsp), %r8
movq %rax, 0x8(%r8)
movq %rcx, (%r8)
leaq 0x88(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x80(%rsp), %rsi
leaq 0x60(%rsp), %rdx
leaq 0x70(%rsp), %rcx
callq 0x36334
leaq 0x48(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x40(%rsp), %rsi
leaq 0x60(%rsp), %rdx
leaq 0x90(%rsp), %rcx
leaq 0x80(%rsp), %r8
callq 0x36246
leaq 0x28(%rsp), %rdi
movq $0x0, -0x8(%rdi)
leaq 0x20(%rsp), %rsi
leaq 0x60(%rsp), %rdx
leaq 0x50(%rsp), %rcx
leaq 0x40(%rsp), %r8
callq 0x36158
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0x3, 0x18(%rax)
leaq 0x60(%rsp), %r8
movq %rax, 0x8(%r8)
movq %rcx, (%r8)
leaq 0x8(%rsp), %rdi
movq $0x0, -0x8(%rdi)
movq %rsp, %rsi
leaq 0xc8(%rsp), %rdx
leaq 0x20(%rsp), %rcx
callq 0x3606a
movaps (%rsp), %xmm0
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0xc, 0x18(%rax)
leaq 0xc8(%rsp), %rdx
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
leaq 0xb0(%rsp), %rsi
movq %rbx, %rdi
callq 0x354b8
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e4d6
callq 0xa946
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e4e8
callq 0xa946
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e4f7
callq 0xa946
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x2e506
callq 0xa946
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x2e515
callq 0xa946
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2e524
callq 0xa946
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x2e536
callq 0xa946
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e548
callq 0xa946
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x2e557
callq 0xa946
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x2e569
callq 0xa946
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x2e578
callq 0xa946
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x1c548(%rip), %rsi     # 0x4aacd
leaq 0x1c547(%rip), %rdx     # 0x4aad3
callq 0x116f8
leaq 0x20(%rsp), %rdi
movq %rbp, (%rdi)
leaq 0x1c534(%rip), %rsi     # 0x4aad4
leaq 0x1c537(%rip), %rdx     # 0x4aade
callq 0x116f8
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x3543e
movq 0x20(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2e5d3
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x92e0
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2e5e9
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x92e0
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0x1, 0x18(%rax)
movq %rax, 0x28(%rsp)
movq %rcx, 0x20(%rsp)
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0xfffffffd, 0x18(%rax) # imm = 0xFFFFFFFD
leaq 0x50(%rsp), %r8
movq %rax, 0x8(%r8)
movq %rcx, (%r8)
leaq 0x8(%rsp), %rdi
movq $0x0, -0x8(%rdi)
movq %rsp, %rsi
leaq 0x40(%rsp), %rdx
leaq 0x20(%rsp), %rcx
callq 0x36422
movaps (%rsp), %xmm0
movaps %xmm0, 0xa0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movl $0x20, %edi
callq 0x92d0
movq %r15, 0x8(%rax)
movq %r12, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r13, 0x10(%rax)
movl $0x4, 0x18(%rax)
leaq 0x40(%rsp), %rdx
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
leaq 0xa0(%rsp), %rsi
movq %rbx, %rdi
callq 0x354b8
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2e6c5
callq 0xa946
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e6d7
callq 0xa946
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e6e6
callq 0xa946
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x2e6f5
callq 0xa946
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x2e704
callq 0xa946
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2e72d
callq 0xa946
jmp 0x2e72d
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e73f
callq 0xa946
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e753
callq 0xa946
jmp 0x2e753
movq %rax, %rbx
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x2e767
callq 0xa946
jmp 0x2e767
movq %rax, %rbx
movq 0x28(%rsp), %rdi
jmp 0x2e85a
jmp 0x2e8a4
jmp 0x2e86d
jmp 0x2e889
jmp 0x2e8a4
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e79f
callq 0xa946
jmp 0x2e79f
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e7b1
callq 0xa946
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x2e7c5
callq 0xa946
jmp 0x2e7c5
movq %rax, %rbx
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x2e7d9
callq 0xa946
jmp 0x2e7d9
movq %rax, %rbx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x2e7ed
callq 0xa946
jmp 0x2e7ed
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x2e801
callq 0xa946
jmp 0x2e801
movq %rax, %rbx
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x2e818
callq 0xa946
jmp 0x2e818
movq %rax, %rbx
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x2e82f
callq 0xa946
jmp 0x2e82f
movq %rax, %rbx
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x2e843
callq 0xa946
jmp 0x2e843
movq %rax, %rbx
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x2e855
callq 0xa946
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x2e8a7
callq 0xa946
jmp 0x2e8a7
movq %rax, %rbx
jmp 0x2e855
jmp 0x2e8a4
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2e88c
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2e88c
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2e8a7
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2e8a7
movq %rax, %rbx
movq %rbx, %rdi
callq 0x94e0
nop