// File: /workspace/github_c_makefile_star2_O3/chgzm[P]minic/generator.c
// Function: process_relational_expr
static void process_relational_expr(const RelationalExprNode* node) {
    switch (node->cmp_type) {
    // <shift-expression>
    case CMP_NONE: {
        process_shift_expr(node->shift_expr_node);
        break;
    }
    // <relational-expression> <  <shift-expression>
    case CMP_LT: {
        process_relational_expr(node->relational_expr_node);
        process_shift_expr(node->shift_expr_node);

        printf("  pop rdi\n");
        printf("  pop rax\n");
        printf("  cmp rax, rdi\n");
        printf("  setl al\n");
        printf("  movzb rax, al\n");
        printf("  push rax\n");

        break;
    }
    // <relational-expression> >  <shift-expression>
    case CMP_GT: {
        process_relational_expr(node->relational_expr_node);
        process_shift_expr(node->shift_expr_node);

        printf("  pop rdi\n");
        printf("  pop rax\n");
        printf("  cmp rax, rdi\n");
        printf("  setg al\n");
        printf("  movzb rax, al\n");
        printf("  push rax\n");

        break;
    }
    // <relational-expression> <= <shift-expression>
    case CMP_LE: {
        process_relational_expr(node->relational_expr_node);
        process_shift_expr(node->shift_expr_node);

        printf("  pop rdi\n");
        printf("  pop rax\n");
        printf("  cmp rax, rdi\n");
        printf("  setle al\n");
        printf("  movzb rax, al\n");
        printf("  push rax\n");

        break;
    }
    // <relational-expression> >= <shift-expression>
    case CMP_GE: {
        process_relational_expr(node->relational_expr_node);
        process_shift_expr(node->shift_expr_node);

        printf("  pop rdi\n");
        printf("  pop rax\n");
        printf("  cmp rax, rdi\n");
        printf("  setge al\n");
        printf("  movzb rax, al\n");
        printf("  push rax\n");

        break;
    }
    default: {
        break;
    }
    }
}

// Assembly:
pushq %rbx
movl (%rdi), %eax
cmpq $0x6, %rax
ja 0x3b92
movq %rdi, %rbx
leaq 0x5962(%rip), %rcx      # 0x94dc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rbx), %rax
cmpq $0x0, 0x8(%rax)
je 0x3cda
popq %rbx
retq
movq 0x10(%rbx), %rdi
callq 0x3b67
movq 0x8(%rbx), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3bb0
movq (%rax), %rdi
callq 0x3ce0
leaq 0x5d74(%rip), %rdi      # 0x992b
callq 0x1070
leaq 0x5d8c(%rip), %rdi      # 0x994f
callq 0x1070
leaq 0x5d71(%rip), %rdi      # 0x9940
callq 0x1070
leaq 0x5c05(%rip), %rdi      # 0x97e0
jmp 0x3cbc
movq 0x10(%rbx), %rdi
callq 0x3b67
movq 0x8(%rbx), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3bfc
movq (%rax), %rdi
callq 0x3ce0
leaq 0x5d28(%rip), %rdi      # 0x992b
callq 0x1070
leaq 0x5d40(%rip), %rdi      # 0x994f
callq 0x1070
leaq 0x5d25(%rip), %rdi      # 0x9940
callq 0x1070
leaq 0x5bc3(%rip), %rdi      # 0x97ea
jmp 0x3cbc
movq 0x10(%rbx), %rdi
callq 0x3b67
movq 0x8(%rbx), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3c48
movq (%rax), %rdi
callq 0x3ce0
leaq 0x5cdc(%rip), %rdi      # 0x992b
callq 0x1070
leaq 0x5cf4(%rip), %rdi      # 0x994f
callq 0x1070
leaq 0x5cd9(%rip), %rdi      # 0x9940
callq 0x1070
leaq 0x5b62(%rip), %rdi      # 0x97d5
jmp 0x3cbc
movq 0x10(%rbx), %rdi
callq 0x3b67
movq 0x8(%rbx), %rax
cmpq $0x0, 0x8(%rax)
jne 0x3c91
movq (%rax), %rdi
callq 0x3ce0
leaq 0x5c93(%rip), %rdi      # 0x992b
callq 0x1070
leaq 0x5cab(%rip), %rdi      # 0x994f
callq 0x1070
leaq 0x5c90(%rip), %rdi      # 0x9940
callq 0x1070
leaq 0x5b0e(%rip), %rdi      # 0x97ca
callq 0x1070
leaq 0x5b71(%rip), %rdi      # 0x9839
callq 0x1070
leaq 0x5c61(%rip), %rdi      # 0x9935
popq %rbx
jmp 0x1070
movq (%rax), %rdi
popq %rbx
jmp 0x3ce0