// File: /workspace/github_c_makefile_star2_O0/azhai[P]mlite/mlite.c
// Function: sf_define
cell sf_define(int syntax, cell x, int *pc, int *ps) {
	cell	v, a, n, new, e;
	int	k;

	if (car(State_stack) == EV_ARGS)
		return error(syntax?
				"define_syntax: invalid context":
				"define: invalid context",
				x);
	k = length(x);
	if (k < 3)
		return too_few_args(x);
	if (k > 3)
		return too_many_args(x);
	if (!symbol_p(cadr(x)))
		return error(syntax?
				"define_syntax: expected id, got":
				"define: expected id, got",
				cadr(x));
	save(NIL);
	a = caddr(x);
	n = cadr(x);
	e = root_env();
	v = find_local_variable(n, car(e));
	if (v == NIL) {
		set(car(e), extend(n, UNDEFINED, car(e)));
		v = cadar(e);
	}
	car(Stack) = binding_box(v);
	*pc = 2;
	if (syntax)
		*ps = EV_MACRO;
	else
		*ps = EV_SET_VAL;
	return a;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movl %edi, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq 0x145b2(%rip), %rax     # 0x28180
movq 0x14573(%rip), %rcx     # 0x28148
cmpq $0x1, (%rax,%rcx,8)
jne 0x13c06
movl -0xc(%rbp), %ecx
leaq 0xcff9(%rip), %rdi      # 0x20bdf
leaq 0xcfd3(%rip), %rax      # 0x20bc0
cmpl $0x0, %ecx
cmovneq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x34b0
movq %rax, -0x8(%rbp)
jmp 0x13e26
movq -0x18(%rbp), %rdi
callq 0x5160
movl %eax, -0x54(%rbp)
cmpl $0x3, -0x54(%rbp)
jge 0x13c2a
movq -0x18(%rbp), %rdi
callq 0x12c70
movq %rax, -0x8(%rbp)
jmp 0x13e26
cmpl $0x3, -0x54(%rbp)
jle 0x13c42
movq -0x18(%rbp), %rdi
callq 0x12ca0
movq %rax, -0x8(%rbp)
jmp 0x13e26
movq 0x14537(%rip), %rax     # 0x28180
movq 0x14980(%rip), %rcx     # 0x285d0
movq -0x18(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
cmpq $0x0, (%rax,%rcx,8)
jl 0x13cb4
movq 0x1498a(%rip), %rax     # 0x285f0
movq 0x14513(%rip), %rcx     # 0x28180
movq 0x1495c(%rip), %rdx     # 0x285d0
movq -0x18(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
movsbl (%rax,%rcx), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x13cb4
movq 0x144ed(%rip), %rax     # 0x28180
movq 0x144e6(%rip), %rcx     # 0x28180
movq 0x1492f(%rip), %rdx     # 0x285d0
movq -0x18(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
cmpq $-0x22, (%rax,%rcx,8)
je 0x13cf4
movl -0xc(%rbp), %ecx
leaq 0xcf59(%rip), %rdi      # 0x20c17
leaq 0xcf32(%rip), %rax      # 0x20bf7
cmpl $0x0, %ecx
cmovneq %rax, %rdi
movq 0x144ad(%rip), %rax     # 0x28180
movq 0x148f6(%rip), %rcx     # 0x285d0
movq -0x18(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x34b0
movq %rax, -0x8(%rbp)
jmp 0x13e26
movq 0x1443d(%rip), %rsi     # 0x28138
movq $-0x1, %rdi
xorl %edx, %edx
callq 0x3780
movq %rax, 0x14428(%rip)     # 0x28138
movq 0x14469(%rip), %rax     # 0x28180
movq 0x148b2(%rip), %rcx     # 0x285d0
movq 0x148ab(%rip), %rdx     # 0x285d0
movq -0x18(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x38(%rbp)
movq 0x14440(%rip), %rax     # 0x28180
movq 0x14889(%rip), %rcx     # 0x285d0
movq -0x18(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x40(%rbp)
callq 0x13aa0
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rdi
movq 0x14415(%rip), %rax     # 0x28180
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
callq 0x13b20
movq %rax, -0x30(%rbp)
cmpq $-0x1, -0x30(%rbp)
jne 0x13de2
movq -0x40(%rbp), %rdi
movq 0x143f2(%rip), %rax     # 0x28180
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq $-0x5, %rsi
callq 0x127f0
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rdx
movq 0x143cf(%rip), %rax     # 0x28180
movq -0x50(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x143c0(%rip), %rax     # 0x28180
movq 0x14809(%rip), %rcx     # 0x285d0
movq 0x143b2(%rip), %rdx     # 0x28180
movq -0x50(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdx
movq 0x14393(%rip), %rax     # 0x28180
movq 0x14344(%rip), %rcx     # 0x28138
movq %rdx, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
movl $0x2, (%rax)
cmpl $0x0, -0xc(%rbp)
je 0x13e14
movq -0x28(%rbp), %rax
movl $0x6, (%rax)
jmp 0x13e1e
movq -0x28(%rbp), %rax
movl $0x5, (%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq