// File: /workspace/github_c_makefile_star2_O1/xemul[P]cylang/aryth.c
// Function: eval_sub
static int eval_sub(struct cy_token *t, struct cy_file *f)
{
	struct cy_token a, b;

	if (cy_eval_next(f, &a) <= 0)
		return -1;

	if (a.v.t == CY_V_LIST) {
		if (cy_eval_next_x(f, &b, CY_V_NUMBER) <= 0)
			return -1;

		return cy_list_del(&a.v, &b.v);
	}

	if (a.v.t == CY_V_MAP) {
		if (cy_eval_next_x(f, &b, CY_V_STRING) <= 0)
			return -1;

		return cy_map_del(&a.v, &b.v);
	}

	if (a.v.t == CY_V_NUMBER) {
		if (cy_eval_next_x(f, &b, CY_V_NUMBER) <= 0)
			return -1;

		t->v.t = CY_V_NUMBER;
		t->v.v_i = a.v.v_i - b.v.v_i;
		return 1;
	}

	show_token_err(t, "Bad op for sub");
	return -1;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rsi, %r12
movq %rdi, %r15
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x42fd
testl %eax, %eax
js 0x46ce
je 0x44a6
movq 0x38(%rsp), %rcx
movq 0x8(%rcx), %rcx
testq %rcx, %rcx
je 0x44a8
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq *%rcx
jmp 0x44a8
xorl %eax, %eax
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
testl %eax, %eax
jle 0x46c0
movl 0x48(%rsp), %eax
cmpl $0x1, %eax
je 0x4542
leaq 0x48(%rsp), %r14
cmpl $0x4, %eax
je 0x4511
cmpl $0x3, %eax
jne 0x457b
leaq 0x8(%rsp), %rsi
movq %r12, %rdi
callq 0x42fd
testl %eax, %eax
js 0x46dd
je 0x4662
movq 0x10(%rsp), %rcx
movq 0x8(%rcx), %rcx
testq %rcx, %rcx
je 0x4664
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *%rcx
jmp 0x4664
leaq 0x8(%rsp), %rsi
movq %r12, %rdi
callq 0x42fd
testl %eax, %eax
js 0x46d3
je 0x4591
movq 0x10(%rsp), %rcx
movq 0x8(%rcx), %rcx
testq %rcx, %rcx
je 0x4593
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *%rcx
jmp 0x4593
leaq 0x8(%rsp), %rsi
movq %r12, %rdi
callq 0x42fd
testl %eax, %eax
js 0x46d8
je 0x45f6
movq 0x10(%rsp), %rcx
movq 0x8(%rcx), %rcx
testq %rcx, %rcx
je 0x45f8
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *%rcx
jmp 0x45f8
leaq 0x4bf0(%rip), %rsi      # 0x9172
movq %r15, %rdi
xorl %eax, %eax
callq 0x3240
jmp 0x46c0
xorl %eax, %eax
cmpl $0x1, %eax
jne 0x45dc
movl $0x1, %eax
cmpl $0x2, 0x20(%rsp)
je 0x45dc
movl $0x2, %edi
callq 0x3bfc
movq %rax, %r15
leaq 0x8(%rsp), %r12
movl 0x18(%r12), %edi
callq 0x3bfc
leaq 0x4b91(%rip), %rsi      # 0x9158
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
xorl %eax, %eax
callq 0x3240
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testl %eax, %eax
jle 0x46c0
leaq 0x20(%rsp), %rsi
movq %r14, %rdi
callq 0x5dbc
jmp 0x46be
xorl %eax, %eax
cmpl $0x1, %eax
jne 0x4641
movl $0x1, %eax
cmpl $0x1, 0x20(%rsp)
je 0x4641
movl $0x1, %edi
callq 0x3bfc
movq %rax, %r14
leaq 0x8(%rsp), %r12
movl 0x18(%r12), %edi
callq 0x3bfc
leaq 0x4b2c(%rip), %rsi      # 0x9158
movq %r12, %rdi
movq %r14, %rdx
movq %rax, %rcx
xorl %eax, %eax
callq 0x3240
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testl %eax, %eax
jle 0x46c0
movl $0x1, 0x18(%r15)
movq 0x50(%rsp), %rax
subq 0x28(%rsp), %rax
movq %rax, 0x20(%r15)
movl $0x1, %ebx
jmp 0x46c0
xorl %eax, %eax
cmpl $0x1, %eax
jne 0x46ad
movl $0x1, %eax
cmpl $0x1, 0x20(%rsp)
je 0x46ad
movl $0x1, %edi
callq 0x3bfc
movq %rax, %r15
leaq 0x8(%rsp), %r12
movl 0x18(%r12), %edi
callq 0x3bfc
leaq 0x4ac0(%rip), %rsi      # 0x9158
movq %r12, %rdi
movq %r15, %rdx
movq %rax, %rcx
xorl %eax, %eax
callq 0x3240
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testl %eax, %eax
jle 0x46c0
leaq 0x20(%rsp), %rsi
movq %r14, %rdi
callq 0x54c9
movl %eax, %ebx
movl %ebx, %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
callq 0x33f9
callq 0x33af
callq 0x338a
callq 0x33d4