// File: /workspace/github_c_makefile_star2_O0/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 %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x10(%rbp)
subq $0x6, %rax
ja 0x515c
movq -0x10(%rbp), %rax
leaq 0xa585(%rip), %rcx      # 0xf500
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x5170
jmp 0x515e
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4f50
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x5170
leaq 0xa722(%rip), %rdi      # 0xf6d9
movb $0x0, %al
callq 0x1090
leaq 0xa71f(%rip), %rdi      # 0xf6e4
movb $0x0, %al
callq 0x1090
leaq 0xa830(%rip), %rdi      # 0xf803
movb $0x0, %al
callq 0x1090
leaq 0xa85a(%rip), %rdi      # 0xf83b
movb $0x0, %al
callq 0x1090
leaq 0xa82f(%rip), %rdi      # 0xf81e
movb $0x0, %al
callq 0x1090
leaq 0xa6d0(%rip), %rdi      # 0xf6cd
movb $0x0, %al
callq 0x1090
jmp 0x515e
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4f50
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x5170
leaq 0xa6af(%rip), %rdi      # 0xf6d9
movb $0x0, %al
callq 0x1090
leaq 0xa6ac(%rip), %rdi      # 0xf6e4
movb $0x0, %al
callq 0x1090
leaq 0xa7bd(%rip), %rdi      # 0xf803
movb $0x0, %al
callq 0x1090
leaq 0xa7f2(%rip), %rdi      # 0xf846
movb $0x0, %al
callq 0x1090
leaq 0xa7bc(%rip), %rdi      # 0xf81e
movb $0x0, %al
callq 0x1090
leaq 0xa65d(%rip), %rdi      # 0xf6cd
movb $0x0, %al
callq 0x1090
jmp 0x515e
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4f50
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x5170
leaq 0xa63c(%rip), %rdi      # 0xf6d9
movb $0x0, %al
callq 0x1090
leaq 0xa639(%rip), %rdi      # 0xf6e4
movb $0x0, %al
callq 0x1090
leaq 0xa74a(%rip), %rdi      # 0xf803
movb $0x0, %al
callq 0x1090
leaq 0xa78a(%rip), %rdi      # 0xf851
movb $0x0, %al
callq 0x1090
leaq 0xa749(%rip), %rdi      # 0xf81e
movb $0x0, %al
callq 0x1090
leaq 0xa5ea(%rip), %rdi      # 0xf6cd
movb $0x0, %al
callq 0x1090
jmp 0x515e
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4f50
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x5170
leaq 0xa5cc(%rip), %rdi      # 0xf6d9
movb $0x0, %al
callq 0x1090
leaq 0xa5c9(%rip), %rdi      # 0xf6e4
movb $0x0, %al
callq 0x1090
leaq 0xa6da(%rip), %rdi      # 0xf803
movb $0x0, %al
callq 0x1090
leaq 0xa726(%rip), %rdi      # 0xf85d
movb $0x0, %al
callq 0x1090
leaq 0xa6d9(%rip), %rdi      # 0xf81e
movb $0x0, %al
callq 0x1090
leaq 0xa57a(%rip), %rdi      # 0xf6cd
movb $0x0, %al
callq 0x1090
jmp 0x515e
jmp 0x515e
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)