// File: /workspace/github_c_makefile_star2_O3/hsjoihs[P]c-compiler/codegen_expression.c
// Function: print_simple_binary_op
static void print_simple_binary_op(enum SimpleBinOp kind,
                                   const struct Type *ref_left_type, int size)
{
	const struct Type left_type = *ref_left_type;
	assert(!is_struct_or_union(&left_type));
	if (left_type.type_category == PTR_) {
		switch (kind) {
		case SIMPLE_BIN_OP_PLUS:
			print_op_pointer_plusminus_int(1, size);
			return;
		case SIMPLE_BIN_OP_MINUS:
			print_op_pointer_plusminus_int(0, size);
			return;

		case SIMPLE_BIN_OP_EQ_EQ:
			gen_compare_ptrs("sete");
			return;
		case SIMPLE_BIN_OP_NOT_EQ:
			gen_compare_ptrs("setne");
			return;
		case SIMPLE_BIN_OP_LT_EQ:
			gen_compare_ptrs("setbe");
			return;
		case SIMPLE_BIN_OP_GT_EQ:
			gen_compare_ptrs("setnb");
			return;
		case SIMPLE_BIN_OP_LT:
			gen_compare_ptrs("setb");
			return;
		case SIMPLE_BIN_OP_GT:
			gen_compare_ptrs("seta");
			return;
		default:
			simple_error("unexpected pointer in binary operation\n");
		}
	}
	switch (kind) {
	case SIMPLE_BIN_OP_PLUS:
		gen_op_ints("addl");
		return;
	case SIMPLE_BIN_OP_MINUS:
		gen_op_ints("subl");
		return;
	case SIMPLE_BIN_OP_ASTERISK:
		gen_mul_ints();
		return;
	case SIMPLE_BIN_OP_SLASH:
		gen_div_ints();
		return;
	case SIMPLE_BIN_OP_PERCENT:
		gen_rem_ints();
		return;
	case SIMPLE_BIN_OP_LT:
		gen_compare_ints("setl");
		return;
	case SIMPLE_BIN_OP_LT_EQ:
		gen_compare_ints("setle");
		return;
	case SIMPLE_BIN_OP_LSHIFT:
		gen_shift_ints("sall");
		return;
	case SIMPLE_BIN_OP_GT:
		gen_compare_ints("setg");
		return;
	case SIMPLE_BIN_OP_GT_EQ:
		gen_compare_ints("setge");
		return;
	case SIMPLE_BIN_OP_RSHIFT:
		gen_shift_ints("sarl");
		return;
	case SIMPLE_BIN_OP_AND:
		gen_op_ints("andl");
		return;
	case SIMPLE_BIN_OP_OR:
		gen_op_ints("orl");
		return;
	case SIMPLE_BIN_OP_EQ_EQ:
		gen_compare_ints("sete");
		return;
	case SIMPLE_BIN_OP_NOT_EQ:
		gen_compare_ints("setne");
		return;
	case SIMPLE_BIN_OP_HAT:
		gen_op_ints("xorl");
		return;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x58, %rsp
movl %edx, %ebx
movl %edi, %r14d
leaq -0x68(%rbp), %r15
movl $0xa, %ecx
movq %r15, %rdi
rep  movsq (%rsi), %es:(%rdi)
movq %r15, %rdi
callq 0x95ca
xorl %edi, %edi
testl %eax, %eax
sete %dil
xorl %eax, %eax
callq 0x243c
cmpl $0x1, (%r15)
jne 0x5a97
cmpl $0xe, %r14d
ja 0x5bb7
movl %r14d, %eax
leaq 0x92d7(%rip), %rcx      # 0xed50
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
callq 0xaefc
movl %ebx, %edi
callq 0xafac
leaq 0x967a(%rip), %rdi      # 0xf10f
jmp 0x5b00
cmpl $0xf, %r14d
ja 0x5bac
movl %r14d, %eax
leaq 0x9265(%rip), %rcx      # 0xed10
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x98b2(%rip), %rdi      # 0xf36d
jmp 0x5b70
leaq 0x9879(%rip), %rdi      # 0xf340
jmp 0x5b11
leaq 0x9865(%rip), %rdi      # 0xf335
jmp 0x5b11
leaq 0x9862(%rip), %rdi      # 0xf33b
jmp 0x5b11
leaq 0x9847(%rip), %rdi      # 0xf329
jmp 0x5b11
leaq 0x9844(%rip), %rdi      # 0xf32f
jmp 0x5b11
callq 0xaefc
movl %ebx, %edi
callq 0xafac
leaq 0x9614(%rip), %rdi      # 0xf114
callq 0xaec4
jmp 0x5bac
leaq 0x9813(%rip), %rdi      # 0xf324
callq 0xae19
jmp 0x5bac
leaq 0x9807(%rip), %rdi      # 0xf329
jmp 0x5ba7
leaq 0x9869(%rip), %rdi      # 0xf397
jmp 0x5b70
callq 0xad69
jmp 0x5bac
leaq 0x985f(%rip), %rdi      # 0xf39d
jmp 0x5b70
leaq 0x9845(%rip), %rdi      # 0xf38c
jmp 0x5ba7
callq 0xad19
jmp 0x5bac
leaq 0x9845(%rip), %rdi      # 0xf39c
jmp 0x5b70
callq 0xad41
jmp 0x5bac
leaq 0x981b(%rip), %rdi      # 0xf382
jmp 0x5b99
leaq 0x9802(%rip), %rdi      # 0xf372
callq 0xaca9
jmp 0x5bac
leaq 0x97f9(%rip), %rdi      # 0xf377
jmp 0x5ba7
leaq 0x979d(%rip), %rdi      # 0xf324
jmp 0x5ba7
leaq 0x97ec(%rip), %rdi      # 0xf37c
jmp 0x5ba7
leaq 0x97f9(%rip), %rdi      # 0xf392
callq 0xad91
jmp 0x5bac
leaq 0x97e0(%rip), %rdi      # 0xf387
callq 0xace1
addq $0x58, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9787(%rip), %rdi      # 0xf345
callq 0x9546
nop