// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/irgen_c.c
// Function: ir_expr_shift
static bool _ir_expr_shift(
	IRGeneratorCContext *ctx,
	ResizableString *rstr,
	ParserASTNode *node_expr
) {
	assert(ctx);
	assert(rstr);
	assert(node_expr);

	#define	_IR_EXPR_SHIFT(str_opt)	\
	{	\
		assert(node_expr->nchilds == 2);	\
		rstr_append_with_cstr(rstr, "(");	\
		_ir_expr(ctx, rstr, node_expr->childs[0]);	\
		rstr_append_with_cstr(rstr, (str_opt));	\
		_ir_expr(ctx, rstr, node_expr->childs[1]);	\
		rstr_append_with_cstr(rstr, ")");	\
	}

	switch (node_expr->type) {
		case FE_NODE_EXPR_SHIFT_LEFT: {
			_IR_EXPR_SHIFT(" << ")
			return true;
		}
		case FE_NODE_EXPR_SHIFT_RIGHT: {
			_IR_EXPR_SHIFT(" >> ")
			return true;
		}
		default: {
			return false;
		}
	}

	#undef	_IR_EXPR_SHIFT
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x23f6d
jmp 0x23f8c
leaq 0x585e2(%rip), %rdi     # 0x7c556
leaq 0x52e6d(%rip), %rsi     # 0x76de8
movl $0x305, %edx            # imm = 0x305
leaq 0x53550(%rip), %rcx     # 0x774d7
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x23f95
jmp 0x23fb4
leaq 0x4eb72(%rip), %rdi     # 0x72b0e
leaq 0x52e45(%rip), %rsi     # 0x76de8
movl $0x306, %edx            # imm = 0x306
leaq 0x53528(%rip), %rcx     # 0x774d7
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x23fbd
jmp 0x23fdc
leaq 0x53131(%rip), %rdi     # 0x770f5
leaq 0x52e1d(%rip), %rsi     # 0x76de8
movl $0x307, %edx            # imm = 0x307
leaq 0x53500(%rip), %rcx     # 0x774d7
callq 0x30a0
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x24(%rbp)
subl $0xe90, %eax            # imm = 0xE90
je 0x24001
jmp 0x23fee
movl -0x24(%rbp), %eax
subl $0xe91, %eax            # imm = 0xE91
je 0x24096
jmp 0x24128
movq -0x20(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2400d
jmp 0x2402c
leaq 0x53304(%rip), %rdi     # 0x77318
leaq 0x52dcd(%rip), %rsi     # 0x76de8
movl $0x315, %edx            # imm = 0x315
leaq 0x534b0(%rip), %rcx     # 0x774d7
callq 0x30a0
movq -0x18(%rbp), %rdi
leaq 0x53a26(%rip), %rsi     # 0x77a5d
callq 0x8d70
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rdx
callq 0x227b0
movq -0x18(%rbp), %rdi
leaq 0x534c8(%rip), %rsi     # 0x77527
callq 0x8d70
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rdx
callq 0x227b0
movq -0x18(%rbp), %rdi
leaq 0x52f16(%rip), %rsi     # 0x76f9e
callq 0x8d70
movb $0x1, -0x1(%rbp)
jmp 0x2412c
movq -0x20(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x240a2
jmp 0x240c1
leaq 0x5326f(%rip), %rdi     # 0x77318
leaq 0x52d38(%rip), %rsi     # 0x76de8
movl $0x319, %edx            # imm = 0x319
leaq 0x5341b(%rip), %rcx     # 0x774d7
callq 0x30a0
movq -0x18(%rbp), %rdi
leaq 0x53991(%rip), %rsi     # 0x77a5d
callq 0x8d70
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rdx
callq 0x227b0
movq -0x18(%rbp), %rdi
leaq 0x53438(%rip), %rsi     # 0x7752c
callq 0x8d70
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rdx
callq 0x227b0
movq -0x18(%rbp), %rdi
leaq 0x52e81(%rip), %rsi     # 0x76f9e
callq 0x8d70
movb $0x1, -0x1(%rbp)
jmp 0x2412c
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)