// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: calc_unary_constexpr
static void _calc_unary_constexpr(
	ParserContext *ctx,
	uint32_t expr_node_type,
	ParserASTNode *target,
	ParserASTNode *source
) {
	assert(ctx);
	assert(target);
	assert(source);
	assert(FE_EXPR_AST_NODE_GET_CONSTANT(source));

	uint8_t source_type = FE_EXPR_AST_NODE_GET_TYPE(source);

	#define	_A(op, type)	\
		case FE_TYPE_##type: {	\
			FE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_##type##_VAL(target, op FE_EXPR_AST_NODE_GET_CONSTEXPR_RESULT_##type##_VAL(source));	\
			break;	\
		}
	
	#define	_B(op)	\
		_A(op, CHAR)	\
		_A(op, INT8)	\
		_A(op, INT16)	\
		_A(op, INT32)	\
		_A(op, INT64)	\
		_A(op, UINT8)	\
		_A(op, UINT16)	\
		_A(op, UINT32)	\
		_A(op, UINT64)

	#define	_C(op, node_type)	\
		case node_type: {	\
			switch (source_type) {	\
				_B(op)	\
				default: {	\
					assert(0);	\
					break;	\
				}	\
			}	\
			break;	\
		}

	switch (expr_node_type) {
		_C(!, FE_NODE_EXPR_NOT)
		_C(~, FE_NODE_EXPR_BNOT)
		_C(+, FE_NODE_EXPR_POSITIVE)
		_C(-, FE_NODE_EXPR_NEGATIVE)
		default: {
			assert(0);
			break;
		}
	}

	#undef	_A
	#undef	_B
	#undef	_C
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x57580
jmp 0x5759f
leaq 0x24fcf(%rip), %rdi     # 0x7c556
leaq 0x26cbc(%rip), %rsi     # 0x7e24a
movl $0x83d, %edx            # imm = 0x83D
leaq 0x27dc2(%rip), %rcx     # 0x7f35c
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x575a8
jmp 0x575c7
leaq 0x24173(%rip), %rdi     # 0x7b722
leaq 0x26c94(%rip), %rsi     # 0x7e24a
movl $0x83e, %edx            # imm = 0x83E
leaq 0x27d9a(%rip), %rcx     # 0x7f35c
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x575d0
jmp 0x575ef
leaq 0x19fba(%rip), %rdi     # 0x71591
leaq 0x26c6c(%rip), %rsi     # 0x7e24a
movl $0x83f, %edx            # imm = 0x83F
leaq 0x27d72(%rip), %rcx     # 0x7f35c
callq 0x30a0
movq -0x20(%rbp), %rax
testb $0x1, 0x70(%rax)
je 0x575fb
jmp 0x5761a
leaq 0x27db2(%rip), %rdi     # 0x7f3b4
leaq 0x26c41(%rip), %rsi     # 0x7e24a
movl $0x840, %edx            # imm = 0x840
leaq 0x27d47(%rip), %rcx     # 0x7f35c
callq 0x30a0
movq -0x20(%rbp), %rax
movb 0x60(%rax), %al
movb %al, -0x21(%rbp)
movl -0xc(%rbp), %eax
addl $0xfffff140, %eax       # imm = 0xFFFFF140
movl %eax, %ecx
movq %rcx, -0x30(%rbp)
subl $0x3, %eax
ja 0x57cfb
movq -0x30(%rbp), %rax
leaq 0x265fa(%rip), %rcx     # 0x7dc40
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x38(%rbp)
subl $0x8, %eax
ja 0x57815
movq -0x38(%rbp), %rax
leaq 0x2664d(%rip), %rcx     # 0x7dcbc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x20(%rbp), %rax
cmpb $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x1, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpb $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x2, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpw $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x3, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpl $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x4, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpq $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x5, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpb $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x6, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpw $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x7, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpl $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x8, 0x71(%rax)
jmp 0x57834
movq -0x20(%rbp), %rax
cmpq $0x0, 0x88(%rax)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x9, 0x71(%rax)
jmp 0x57834
leaq 0x1ac3f(%rip), %rdi     # 0x7245b
leaq 0x26a27(%rip), %rsi     # 0x7e24a
movl $0x862, %edx            # imm = 0x862
leaq 0x27b2d(%rip), %rcx     # 0x7f35c
callq 0x30a0
jmp 0x57d1a
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x40(%rbp)
subl $0x8, %eax
ja 0x579b6
movq -0x40(%rbp), %rax
leaq 0x2643f(%rip), %rcx     # 0x7dc98
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x20(%rbp), %rax
movsbl 0x88(%rax), %eax
xorl $-0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x1, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movsbl 0x88(%rax), %eax
xorl $-0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x2, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movswl 0x88(%rax), %eax
xorl $-0x1, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x3, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movl 0x88(%rax), %ecx
xorl $-0x1, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x4, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movq 0x88(%rax), %rcx
xorq $-0x1, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x5, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movzbl 0x88(%rax), %eax
xorl $-0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x6, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movzwl 0x88(%rax), %eax
xorl $-0x1, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x7, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movl 0x88(%rax), %ecx
xorl $-0x1, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x8, 0x71(%rax)
jmp 0x579d5
movq -0x20(%rbp), %rax
movq 0x88(%rax), %rcx
xorq $-0x1, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x9, 0x71(%rax)
jmp 0x579d5
leaq 0x1aa9e(%rip), %rdi     # 0x7245b
leaq 0x26886(%rip), %rsi     # 0x7e24a
movl $0x863, %edx            # imm = 0x863
leaq 0x2798c(%rip), %rcx     # 0x7f35c
callq 0x30a0
jmp 0x57d1a
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x48(%rbp)
subl $0x8, %eax
ja 0x57b3a
movq -0x48(%rbp), %rax
leaq 0x2627a(%rip), %rcx     # 0x7dc74
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x20(%rbp), %rax
movsbl 0x88(%rax), %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x1, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movsbl 0x88(%rax), %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x2, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movswl 0x88(%rax), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x3, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movl 0x88(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x4, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movq 0x88(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x5, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movzbl 0x88(%rax), %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x6, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movzwl 0x88(%rax), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x7, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movl 0x88(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x8, 0x71(%rax)
jmp 0x57b59
movq -0x20(%rbp), %rax
movq 0x88(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x9, 0x71(%rax)
jmp 0x57b59
leaq 0x1a91a(%rip), %rdi     # 0x7245b
leaq 0x26702(%rip), %rsi     # 0x7e24a
movl $0x864, %edx            # imm = 0x864
leaq 0x27808(%rip), %rcx     # 0x7f35c
callq 0x30a0
jmp 0x57d1a
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x50(%rbp)
subl $0x8, %eax
ja 0x57cda
movq -0x50(%rbp), %rax
leaq 0x260d2(%rip), %rcx     # 0x7dc50
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x20(%rbp), %rax
movsbl 0x88(%rax), %ecx
xorl %eax, %eax
subl %ecx, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x1, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
movsbl 0x88(%rax), %ecx
xorl %eax, %eax
subl %ecx, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x2, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
movswl 0x88(%rax), %ecx
xorl %eax, %eax
subl %ecx, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x3, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
xorl %ecx, %ecx
subl 0x88(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x4, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
xorl %ecx, %ecx
subq 0x88(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x5, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
movzbl 0x88(%rax), %ecx
xorl %eax, %eax
subl %ecx, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x6, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
movzwl 0x88(%rax), %ecx
xorl %eax, %eax
subl %ecx, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x7, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
xorl %ecx, %ecx
subl 0x88(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x8, 0x71(%rax)
jmp 0x57cf9
movq -0x20(%rbp), %rax
xorl %ecx, %ecx
subq 0x88(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x18(%rbp), %rax
movb $0x9, 0x71(%rax)
jmp 0x57cf9
leaq 0x1a77a(%rip), %rdi     # 0x7245b
leaq 0x26562(%rip), %rsi     # 0x7e24a
movl $0x865, %edx            # imm = 0x865
leaq 0x27668(%rip), %rcx     # 0x7f35c
callq 0x30a0
jmp 0x57d1a
leaq 0x1a759(%rip), %rdi     # 0x7245b
leaq 0x26541(%rip), %rsi     # 0x7e24a
movl $0x867, %edx            # imm = 0x867
leaq 0x27647(%rip), %rcx     # 0x7f35c
callq 0x30a0
addq $0x50, %rsp
popq %rbp
retq