// File: /workspace/github_c_makefile_star2_O0/dalnefre[P]kernel_abe/reduce.c
// Function: reduce_expr
BEH_DECL(reduce_expr)
{
	CONS* msg = WHAT;
	CONS* expr = map_get(msg, expr_symbol);
	CONS* cont = map_get(msg, cont_symbol);
	CONS* env = map_get(msg, env_symbol);
	CONS* result = NIL;

	DBUG_ENTER("reduce_expr");
	DBUG_PRINT("", ("expr@%p=%s", expr, cons_to_str(expr)));
	if ((expr == true_symbol)
	||  (expr == false_symbol)
	||  (expr == undefined_symbol)) {
		/* built-in constant */
		DBUG_PRINT("", ("built-in constant"));
		result = expr;
	} else if (numberp(expr)) {
		/* numeric constant */
		DBUG_PRINT("", ("numeric constant"));
		result = expr;
	} else if (atomp(expr)) {
		/* atomic symbol */
		DBUG_PRINT("", ("atomic symbol"));
		result = map_get(env, expr);
		if (result == NULL) {
			DBUG_PRINT("", ("env=%s", cons_to_str(env)));
			SEND(an_error, cons(ATOM("reduce: undefined symbol"), expr));
			result = undefined_symbol;
		}
	} else if (nilp(expr)) {
		/* empty list */
		DBUG_PRINT("", ("empty list"));
		result = expr;
	} else if (consp(expr)) {
		/* evaluate first element to determine the actor to apply */
		CONS* state;
		CONS* actor;

		DBUG_PRINT("", ("cons list"));
		state = NIL;
		state = map_put(state, env_symbol, env);
		state = map_put(state, cont_symbol, cont);
		state = map_put(state, form_symbol, cdr(expr));
		actor = ACTOR(apply_expr, state);
		msg = NIL;
		msg = map_put(msg, env_symbol, env);
		msg = map_put(msg, cont_symbol, actor);
		msg = map_put(msg, expr_symbol, car(expr));
		SEND(a_reduce, msg);			/* self message */
		DBUG_RETURN;
	} else {	/* error */
		DBUG_PRINT("", ("undefined expression"));
		SEND(an_error, cons(ATOM("reduce: undefined expression"), expr));
		result = undefined_symbol;
	}
	DBUG_PRINT("", ("result=%s", cons_to_str(result)));
	SEND(cont, map_put(NIL, expr_symbol, result));
	DBUG_RETURN;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x16990
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq 0x1d80d(%rip), %rsi     # 0x20148
xorl %eax, %eax
movl %eax, %edx
callq 0x171b0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq 0x1d7ed(%rip), %rsi     # 0x20140
xorl %eax, %eax
movl %eax, %edx
callq 0x171b0
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq 0x1d7ed(%rip), %rsi     # 0x20158
xorl %eax, %eax
movl %eax, %edx
callq 0x171b0
movq %rax, -0x28(%rbp)
leaq 0x1d979(%rip), %rax     # 0x202f8
movq %rax, -0x30(%rbp)
leaq 0x1770d(%rip), %rax     # 0x1a097
movq %rax, -0x58(%rbp)
leaq 0x1d9f3(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl 0x8(%rax), %eax
movl %eax, -0x50(%rbp)
movl $0x98, -0x4c(%rbp)
leaq 0x1a300(%rip), %rax     # 0x1ccb0
movq %rax, -0x48(%rbp)
leaq 0x1d775(%rip), %rax     # 0x20130
movq %rax, -0x40(%rbp)
leaq 0x1d9c2(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movq %rax, -0x38(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x19910
leaq 0x1df4f(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2a4b
leaq 0x1d99b(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x1a2b5(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x1a2aa(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2a4b
leaq 0x1d971(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0x99, 0xc(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x18(%rbp), %rdi
callq 0xe6d0
movq -0x70(%rbp), %rsi
movq %rax, %rdx
leaq 0x1765f(%rip), %rdi     # 0x1a0a3
movb $0x0, %al
callq 0x199c0
jmp 0x2a4d
movq -0x18(%rbp), %rax
cmpq 0x1d718(%rip), %rax     # 0x20170
je 0x2a74
movq -0x18(%rbp), %rax
cmpq 0x1d713(%rip), %rax     # 0x20178
je 0x2a74
movq -0x18(%rbp), %rax
cmpq 0x1d6f6(%rip), %rax     # 0x20168
jne 0x2ade
jmp 0x2a76
leaq 0x1deb3(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2acf
leaq 0x1d8ff(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x1a219(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x1a20e(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2acf
leaq 0x1d8d5(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0x9e, 0xc(%rax)
leaq 0x175e6(%rip), %rdi     # 0x1a0ae
movb $0x0, %al
callq 0x199c0
jmp 0x2ad1
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x2fb8
movq -0x18(%rbp), %rax
andq $0x3, %rax
cmpq $0x3, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2b64
jmp 0x2afc
leaq 0x1de2d(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2b55
leaq 0x1d879(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x1a193(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x1a188(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2b55
leaq 0x1d84f(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xa2, 0xc(%rax)
leaq 0x17572(%rip), %rdi     # 0x1a0c0
movb $0x0, %al
callq 0x199c0
jmp 0x2b57
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x2fb6
movq -0x18(%rbp), %rax
andq $0x3, %rax
cmpq $0x2, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2cb5
jmp 0x2b86
leaq 0x1dda3(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2bdf
leaq 0x1d7ef(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x1a109(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x1a0fe(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2bdf
leaq 0x1d7c5(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xa6, 0xc(%rax)
leaq 0x174f9(%rip), %rdi     # 0x1a0d1
movb $0x0, %al
callq 0x199c0
jmp 0x2be1
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x171b0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x2cb0
jmp 0x2c03
leaq 0x1dd26(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2c68
leaq 0x1d772(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x1a08c(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x1a081(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2c68
leaq 0x1d748(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xa9, 0xc(%rax)
movq -0x28(%rbp), %rdi
callq 0xe6d0
movq %rax, %rsi
leaq 0x1747e(%rip), %rdi     # 0x1a0df
movb $0x0, %al
callq 0x199c0
jmp 0x2c6a
movq -0x8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq 0x1d4e7(%rip), %rax     # 0x20160
movq %rax, -0x78(%rbp)
leaq 0x17462(%rip), %rdi     # 0x1a0e6
callq 0x12b60
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x16710
movq -0x80(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq %rax, %rdx
callq 0xcc90
movq 0x1d4bc(%rip), %rax     # 0x20168
movq %rax, -0x30(%rbp)
jmp 0x2fb4
leaq 0x1d63c(%rip), %rax     # 0x202f8
cmpq %rax, -0x18(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2d3a
jmp 0x2cd2
leaq 0x1dc57(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2d2b
leaq 0x1d6a3(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x19fbd(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x19fb2(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2d2b
leaq 0x1d679(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xaf, 0xc(%rax)
leaq 0x173db(%rip), %rdi     # 0x1a0ff
movb $0x0, %al
callq 0x199c0
jmp 0x2d2d
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x2fb2
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x81(%rbp)
je 0x2d5e
movq -0x18(%rbp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
sete %al
movb %al, -0x81(%rbp)
movb -0x81(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2f01
jmp 0x2d77
leaq 0x1dbb2(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2dd0
leaq 0x1d5fe(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x19f18(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x19f0d(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2dd0
leaq 0x1d5d4(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xb6, 0xc(%rax)
leaq 0x17341(%rip), %rdi     # 0x1a10a
movb $0x0, %al
callq 0x199c0
jmp 0x2dd2
leaq 0x1d51f(%rip), %rax     # 0x202f8
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
movq 0x1d370(%rip), %rsi     # 0x20158
movq -0x28(%rbp), %rdx
callq 0x172a0
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
movq 0x1d340(%rip), %rsi     # 0x20140
movq -0x20(%rbp), %rdx
callq 0x172a0
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq 0x1d331(%rip), %rax     # 0x20150
movq %rax, -0xa0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x16990
movq -0xa8(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movq %rax, %rdx
callq 0x172a0
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rdi
movq -0x60(%rbp), %rdx
leaq -0x748(%rip), %rsi      # 0x2710
callq 0xcb70
movq %rax, -0x68(%rbp)
leaq 0x1d490(%rip), %rax     # 0x202f8
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq 0x1d2e1(%rip), %rsi     # 0x20158
movq -0x28(%rbp), %rdx
callq 0x172a0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq 0x1d2b1(%rip), %rsi     # 0x20140
movq -0x68(%rbp), %rdx
callq 0x172a0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
movq 0x1d29a(%rip), %rax     # 0x20148
movq %rax, -0x90(%rbp)
movq -0x18(%rbp), %rdi
callq 0x16800
movq -0x98(%rbp), %rdi
movq -0x90(%rbp), %rsi
movq %rax, %rdx
callq 0x172a0
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq 0x1d29d(%rip), %rsi     # 0x20180
movq -0x10(%rbp), %rdx
callq 0xcc90
movl $0xc1, -0x4c(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x19ae0
jmp 0x3074
jmp 0x2f03
leaq 0x1da26(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x2f5c
leaq 0x1d472(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x19d8c(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x19d81(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x2f5c
leaq 0x1d448(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xc3, 0xc(%rax)
leaq 0x171c7(%rip), %rdi     # 0x1a11c
movb $0x0, %al
callq 0x199c0
jmp 0x2f5e
movq -0x8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq 0x1d1f0(%rip), %rax     # 0x20160
movq %rax, -0xb0(%rbp)
leaq 0x17196(%rip), %rdi     # 0x1a114
callq 0x12b60
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0x16710
movq -0xb8(%rbp), %rdi
movq -0xb0(%rbp), %rsi
movq %rax, %rdx
callq 0xcc90
movq 0x1d1bc(%rip), %rax     # 0x20168
movq %rax, -0x30(%rbp)
jmp 0x2fb2
jmp 0x2fb4
jmp 0x2fb6
jmp 0x2fb8
jmp 0x2fba
leaq 0x1d96f(%rip), %rax     # 0x20930
cmpl $0x0, (%rax)
je 0x301f
leaq 0x1d3bb(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
leaq 0x19cd5(%rip), %rcx     # 0x1ccb0
movq %rcx, 0x10(%rax)
leaq 0x19cca(%rip), %rdi     # 0x1ccb0
callq 0x18d20
cmpl $0x0, %eax
je 0x301f
leaq 0x1d391(%rip), %rax     # 0x20388
movq (%rax), %rax
movq 0x50(%rax), %rax
movl $0xc7, 0xc(%rax)
movq -0x30(%rbp), %rdi
callq 0xe6d0
movq %rax, %rsi
leaq 0x17119(%rip), %rdi     # 0x1a131
movb $0x0, %al
callq 0x199c0
jmp 0x3021
movq -0x8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq 0x1d10a(%rip), %rsi     # 0x20148
movq -0x30(%rbp), %rdx
leaq 0x1d2af(%rip), %rdi     # 0x202f8
callq 0x172a0
movq -0xc8(%rbp), %rdi
movq -0xc0(%rbp), %rsi
movq %rax, %rdx
callq 0xcc90
movl $0xc9, -0x4c(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x19ae0
addq $0xd0, %rsp
popq %rbp
retq
nopl (%rax)