// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/semantics.c
// Function: get_constexpr_double
static double _get_constexpr_double(
	ParserContext *ctx,
	ParserASTNode *node
) {
	assert(ctx);
	assert(node);
	assert(FE_IS_EXPR_NODE(node->type));
	assert(FE_EXPR_AST_NODE_GET_CONSTANT(node));

	#define	_A(type)	\
		case FE_TYPE_##type: {	\
			return (double) FE_EXPR_AST_NODE_GET_CONSTEXPR_RESULT_##type##_VAL(node);	\
		}

	switch (FE_EXPR_AST_NODE_GET_CONSTANT_TYPE(node)) {
		_A(CHAR)
		_A(INT8)
		_A(INT16)
		_A(INT32)
		_A(INT64)
		_A(UINT8)
		_A(UINT16)
		_A(UINT32)
		_A(UINT64)
		_A(FLOAT)
		_A(DOUBLE)
		default: {
			assert(0);
			return 0;
		}
	}

	#undef	_A
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x5c1a9
jmp 0x5c1c8
leaq 0x203a6(%rip), %rdi     # 0x7c556
leaq 0x22093(%rip), %rsi     # 0x7e24a
movl $0xa1b, %edx            # imm = 0xA1B
leaq 0x23712(%rip), %rcx     # 0x7f8d5
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x5c1d1
jmp 0x5c1f0
leaq 0x19dfb(%rip), %rdi     # 0x75fd3
leaq 0x2206b(%rip), %rsi     # 0x7e24a
movl $0xa1c, %edx            # imm = 0xA1C
leaq 0x236ea(%rip), %rcx     # 0x7f8d5
callq 0x30a0
movq -0x18(%rbp), %rax
movl (%rax), %eax
andl $0xff00, %eax           # imm = 0xFF00
cmpl $0xe00, %eax            # imm = 0xE00
jne 0x5c204
jmp 0x5c223
leaq 0x2320c(%rip), %rdi     # 0x7f417
leaq 0x22038(%rip), %rsi     # 0x7e24a
movl $0xa1d, %edx            # imm = 0xA1D
leaq 0x236b7(%rip), %rcx     # 0x7f8d5
callq 0x30a0
movq -0x18(%rbp), %rax
testb $0x1, 0x70(%rax)
je 0x5c22f
jmp 0x5c24e
leaq 0x2349f(%rip), %rdi     # 0x7f6d5
leaq 0x2200d(%rip), %rsi     # 0x7e24a
movl $0xa1e, %edx            # imm = 0xA1E
leaq 0x2368c(%rip), %rcx     # 0x7f8d5
callq 0x30a0
movq -0x18(%rbp), %rax
movzbl 0x71(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0xa, %eax
ja 0x5c39a
movq -0x20(%rbp), %rax
leaq 0x21eea(%rip), %rcx     # 0x7e15c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rax
movsbl 0x88(%rax), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movsbl 0x88(%rax), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movswl 0x88(%rax), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
cvtsi2sdl 0x88(%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
cvtsi2sdq 0x88(%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movzbl 0x88(%rax), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movzwl 0x88(%rax), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movl 0x88(%rax), %eax
cvtsi2sd %rax, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movq 0x88(%rax), %xmm0
movaps 0x21ed2(%rip), %xmm1    # 0x7e220
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x21ed6(%rip), %xmm1    # 0x7e230
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movss 0x88(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
movq -0x18(%rbp), %rax
movsd 0x88(%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x5c3b9
leaq 0x160ba(%rip), %rdi     # 0x7245b
leaq 0x21ea2(%rip), %rsi     # 0x7e24a
movl $0xa32, %edx            # imm = 0xA32
leaq 0x23521(%rip), %rcx     # 0x7f8d5
callq 0x30a0
movsd -0x8(%rbp), %xmm0
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)