// File: /workspace/github_c_makefile_star2_O2/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
testq %rdx, %rdx
je 0x2e2bb
cmpb $0x0, 0x70(%rdx)
je 0x2e2da
addl $0xfffff140, %edi       # imm = 0xFFFFF140
cmpl $0x3, %edi
ja 0x2e2f9
movzbl 0x60(%rdx), %eax
leaq 0x191a8(%rip), %rcx     # 0x471d4
movslq (%rcx,%rdi,4), %rdi
addq %rcx, %rdi
jmpq *%rdi
decl %eax
cmpl $0x8, %eax
ja 0x2e318
leaq 0x19209(%rip), %rcx     # 0x47250
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpb $0x0, 0x88(%rdx)
sete 0x88(%rsi)
jmp 0x2e0d7
decl %eax
cmpl $0x8, %eax
ja 0x2e337
leaq 0x19172(%rip), %rcx     # 0x471e4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
xorl %eax, %eax
subb 0x88(%rdx), %al
movb %al, 0x88(%rsi)
jmp 0x2e0d7
decl %eax
cmpl $0x8, %eax
ja 0x2e356
leaq 0x1918f(%rip), %rcx     # 0x4722c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb 0x88(%rdx), %al
notb %al
jmp 0x2e0d1
decl %eax
cmpl $0x8, %eax
ja 0x2e375
leaq 0x19146(%rip), %rcx     # 0x47208
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb 0x88(%rdx), %al
movb %al, 0x88(%rsi)
movb $0x1, %al
jmp 0x2e2b6
xorl %eax, %eax
subq 0x88(%rdx), %rax
jmp 0x2e116
movq 0x88(%rdx), %rax
notq %rax
jmp 0x2e116
xorl %eax, %eax
cmpq $0x0, 0x88(%rdx)
sete %al
jmp 0x2e116
xorl %eax, %eax
subw 0x88(%rdx), %ax
jmp 0x2e155
movq 0x88(%rdx), %rax
movq %rax, 0x88(%rsi)
movb $0x5, %al
jmp 0x2e2b6
xorl %eax, %eax
subl 0x88(%rdx), %eax
jmp 0x2e1b8
movl 0x88(%rdx), %eax
notl %eax
jmp 0x2e155
xorl %eax, %eax
subl 0x88(%rdx), %eax
jmp 0x2e1d9
xorl %eax, %eax
cmpw $0x0, 0x88(%rdx)
sete %al
movw %ax, 0x88(%rsi)
jmp 0x2e17f
xorl %eax, %eax
subb 0x88(%rdx), %al
movb %al, 0x88(%rsi)
jmp 0x2e212
movzwl 0x88(%rdx), %eax
movw %ax, 0x88(%rsi)
movb $0x3, %al
jmp 0x2e2b6
movl 0x88(%rdx), %eax
notl %eax
jmp 0x2e1b8
movl 0x88(%rdx), %eax
notl %eax
jmp 0x2e1d9
xorl %eax, %eax
cmpl $0x0, 0x88(%rdx)
sete %al
jmp 0x2e1b8
movb 0x88(%rdx), %al
notb %al
jmp 0x2e20c
movl 0x88(%rdx), %eax
movl %eax, 0x88(%rsi)
movb $0x4, %al
jmp 0x2e2b6
xorl %eax, %eax
cmpl $0x0, 0x88(%rdx)
sete %al
jmp 0x2e1d9
movl 0x88(%rdx), %eax
movl %eax, 0x88(%rsi)
movb $0x8, %al
jmp 0x2e2b6
xorl %eax, %eax
subb 0x88(%rdx), %al
movb %al, 0x88(%rsi)
jmp 0x2e25f
cmpb $0x0, 0x88(%rdx)
sete 0x88(%rsi)
jmp 0x2e212
movb 0x88(%rdx), %al
movb %al, 0x88(%rsi)
movb $0x2, %al
jmp 0x2e2b6
xorl %eax, %eax
subw 0x88(%rdx), %ax
jmp 0x2e27c
xorl %eax, %eax
subq 0x88(%rdx), %rax
jmp 0x2e2ad
movb 0x88(%rdx), %al
notb %al
jmp 0x2e259
movl 0x88(%rdx), %eax
notl %eax
jmp 0x2e27c
cmpb $0x0, 0x88(%rdx)
sete 0x88(%rsi)
jmp 0x2e25f
movb 0x88(%rdx), %al
movb %al, 0x88(%rsi)
movb $0x6, %al
jmp 0x2e2b6
movq 0x88(%rdx), %rax
notq %rax
jmp 0x2e2ad
xorl %eax, %eax
cmpw $0x0, 0x88(%rdx)
sete %al
movw %ax, 0x88(%rsi)
jmp 0x2e293
movzwl 0x88(%rdx), %eax
movw %ax, 0x88(%rsi)
movb $0x7, %al
jmp 0x2e2b6
xorl %eax, %eax
cmpq $0x0, 0x88(%rdx)
sete %al
jmp 0x2e2ad
movq 0x88(%rdx), %rax
movq %rax, 0x88(%rsi)
movb $0x9, %al
movb %al, 0x71(%rsi)
popq %rbp
retq
leaq 0xd264(%rip), %rdi      # 0x3b526
leaq 0x19671(%rip), %rsi     # 0x4793a
leaq 0x1a74c(%rip), %rcx     # 0x48a1c
movl $0x83f, %edx            # imm = 0x83F
callq 0x30a0
leaq 0x1a793(%rip), %rdi     # 0x48a74
leaq 0x19652(%rip), %rsi     # 0x4793a
leaq 0x1a72d(%rip), %rcx     # 0x48a1c
movl $0x840, %edx            # imm = 0x840
callq 0x30a0
leaq 0xe060(%rip), %rdi      # 0x3c360
leaq 0x19633(%rip), %rsi     # 0x4793a
leaq 0x1a70e(%rip), %rcx     # 0x48a1c
movl $0x867, %edx            # imm = 0x867
callq 0x30a0
leaq 0xe041(%rip), %rdi      # 0x3c360
leaq 0x19614(%rip), %rsi     # 0x4793a
leaq 0x1a6ef(%rip), %rcx     # 0x48a1c
movl $0x862, %edx            # imm = 0x862
callq 0x30a0
leaq 0xe022(%rip), %rdi      # 0x3c360
leaq 0x195f5(%rip), %rsi     # 0x4793a
leaq 0x1a6d0(%rip), %rcx     # 0x48a1c
movl $0x865, %edx            # imm = 0x865
callq 0x30a0
leaq 0xe003(%rip), %rdi      # 0x3c360
leaq 0x195d6(%rip), %rsi     # 0x4793a
leaq 0x1a6b1(%rip), %rcx     # 0x48a1c
movl $0x863, %edx            # imm = 0x863
callq 0x30a0
leaq 0xdfe4(%rip), %rdi      # 0x3c360
leaq 0x195b7(%rip), %rsi     # 0x4793a
leaq 0x1a692(%rip), %rcx     # 0x48a1c
movl $0x864, %edx            # imm = 0x864
callq 0x30a0