// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/backend/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(BE_EXPR_AST_NODE_GET_CONSTANT(source));

	uint8_t source_type = BE_EXPR_AST_NODE_GET_TYPE(source);

	#define	_A(op, type)	\
		case BE_TYPE_##type: {	\
			BE_EXPR_AST_NODE_SET_CONSTEXPR_RESULT_##type##_VAL(target, op BE_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(!, BE_NODE_EXPR_NOT)
		_C(~, BE_NODE_EXPR_BNOT)
		_C(+, BE_NODE_EXPR_POSITIVE)
		_C(-, BE_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 0x55d10
jmp 0x55d2f
leaq 0x2a44a(%rip), %rdi     # 0x80161
leaq 0x2cb62(%rip), %rsi     # 0x82880
movl $0x555, %edx            # imm = 0x555
leaq 0x2d829(%rip), %rcx     # 0x83553
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x55d38
jmp 0x55d57
leaq 0x295f5(%rip), %rdi     # 0x7f334
leaq 0x2cb3a(%rip), %rsi     # 0x82880
movl $0x556, %edx            # imm = 0x556
leaq 0x2d801(%rip), %rcx     # 0x83553
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x55d60
jmp 0x55d7f
leaq 0x264cd(%rip), %rdi     # 0x7c234
leaq 0x2cb12(%rip), %rsi     # 0x82880
movl $0x557, %edx            # imm = 0x557
leaq 0x2d7d9(%rip), %rcx     # 0x83553
callq 0x30a0
movq -0x20(%rbp), %rax
testb $0x1, 0x70(%rax)
je 0x55d8b
jmp 0x55daa
leaq 0x2d819(%rip), %rdi     # 0x835ab
leaq 0x2cae7(%rip), %rsi     # 0x82880
movl $0x558, %edx            # imm = 0x558
leaq 0x2d7ae(%rip), %rcx     # 0x83553
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 0x5648b
movq -0x30(%rbp), %rax
leaq 0x2c096(%rip), %rcx     # 0x81e6c
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 0x55fa5
movq -0x38(%rbp), %rax
leaq 0x2c0e9(%rip), %rcx     # 0x81ee8
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 0x55fc4
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 0x55fc4
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 0x55fc4
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 0x55fc4
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 0x55fc4
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 0x55fc4
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 0x55fc4
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 0x55fc4
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 0x55fc4
leaq 0x1d4ae(%rip), %rdi     # 0x7345a
leaq 0x2c8cd(%rip), %rsi     # 0x82880
movl $0x57a, %edx            # imm = 0x57A
leaq 0x2d594(%rip), %rcx     # 0x83553
callq 0x30a0
jmp 0x564aa
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x40(%rbp)
subl $0x8, %eax
ja 0x56146
movq -0x40(%rbp), %rax
leaq 0x2bedb(%rip), %rcx     # 0x81ec4
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 0x56165
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 0x56165
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 0x56165
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 0x56165
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 0x56165
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 0x56165
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 0x56165
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 0x56165
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 0x56165
leaq 0x1d30d(%rip), %rdi     # 0x7345a
leaq 0x2c72c(%rip), %rsi     # 0x82880
movl $0x57b, %edx            # imm = 0x57B
leaq 0x2d3f3(%rip), %rcx     # 0x83553
callq 0x30a0
jmp 0x564aa
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x48(%rbp)
subl $0x8, %eax
ja 0x562ca
movq -0x48(%rbp), %rax
leaq 0x2bd16(%rip), %rcx     # 0x81ea0
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 0x562e9
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 0x562e9
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 0x562e9
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 0x562e9
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 0x562e9
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 0x562e9
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 0x562e9
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 0x562e9
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 0x562e9
leaq 0x1d189(%rip), %rdi     # 0x7345a
leaq 0x2c5a8(%rip), %rsi     # 0x82880
movl $0x57c, %edx            # imm = 0x57C
leaq 0x2d26f(%rip), %rcx     # 0x83553
callq 0x30a0
jmp 0x564aa
movzbl -0x21(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x50(%rbp)
subl $0x8, %eax
ja 0x5646a
movq -0x50(%rbp), %rax
leaq 0x2bb6e(%rip), %rcx     # 0x81e7c
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 0x56489
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 0x56489
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 0x56489
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 0x56489
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 0x56489
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 0x56489
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 0x56489
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 0x56489
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 0x56489
leaq 0x1cfe9(%rip), %rdi     # 0x7345a
leaq 0x2c408(%rip), %rsi     # 0x82880
movl $0x57d, %edx            # imm = 0x57D
leaq 0x2d0cf(%rip), %rcx     # 0x83553
callq 0x30a0
jmp 0x564aa
leaq 0x1cfc8(%rip), %rdi     # 0x7345a
leaq 0x2c3e7(%rip), %rsi     # 0x82880
movl $0x57f, %edx            # imm = 0x57F
leaq 0x2d0ae(%rip), %rcx     # 0x83553
callq 0x30a0
addq $0x50, %rsp
popq %rbp
retq