// File: /workspace/github_c_makefile_star2_O0/atomlang[P]atomlang/src/pk_compiler.c
// Function: exprBinaryOp
static void exprBinaryOp(Compiler* compiler) {
  TokenType op = compiler->previous.type;
  skipNewLines(compiler);
  parsePrecedence(compiler, (Precedence)(getRule(op)->precedence + 1));

  switch (op) {
    case TK_DOTDOT:  emitOpcode(compiler, OP_RANGE);      break;
    case TK_PERCENT: emitOpcode(compiler, OP_MOD);        break;
    case TK_AMP:     emitOpcode(compiler, OP_BIT_AND);    break;
    case TK_PIPE:    emitOpcode(compiler, OP_BIT_OR);     break;
    case TK_CARET:   emitOpcode(compiler, OP_BIT_XOR);    break;
    case TK_PLUS:    emitOpcode(compiler, OP_ADD);        break;
    case TK_MINUS:   emitOpcode(compiler, OP_SUBTRACT);   break;
    case TK_STAR:    emitOpcode(compiler, OP_MULTIPLY);   break;
    case TK_FSLASH:  emitOpcode(compiler, OP_DIVIDE);     break;
    case TK_GT:      emitOpcode(compiler, OP_GT);         break;
    case TK_LT:      emitOpcode(compiler, OP_LT);         break;
    case TK_EQEQ:    emitOpcode(compiler, OP_EQEQ);       break;
    case TK_NOTEQ:   emitOpcode(compiler, OP_NOTEQ);      break;
    case TK_GTEQ:    emitOpcode(compiler, OP_GTEQ);       break;
    case TK_LTEQ:    emitOpcode(compiler, OP_LTEQ);       break;
    case TK_SRIGHT:  emitOpcode(compiler, OP_BIT_RSHIFT); break;
    case TK_SLEFT:   emitOpcode(compiler, OP_BIT_LSHIFT); break;
    case TK_IN:      emitOpcode(compiler, OP_IN);         break;
    default:
      UNREACHABLE();
  }

  compiler->is_last_call = false;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rax
movl 0x30(%rax), %eax
movl %eax, 0x1c(%rsp)
movq 0x20(%rsp), %rdi
callq 0x15f40
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
movl 0x1c(%rsp), %edi
callq 0x18250
movq 0x8(%rsp), %rdi
movl 0x10(%rax), %esi
incl %esi
callq 0x18190
movl 0x1c(%rsp), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, 0x10(%rsp)
subl $0x33, %eax
ja 0x14826
movq 0x10(%rsp), %rax
leaq 0x16564(%rip), %rcx     # 0x2ac28
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x20(%rsp), %rdi
movl $0x49, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x3d, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x3e, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x3f, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x40, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x39, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x3a, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x3b, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x3c, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x47, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x45, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x43, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x44, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x48, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x46, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x42, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x41, %esi
callq 0x16650
jmp 0x1485b
movq 0x20(%rsp), %rdi
movl $0x4a, %esi
callq 0x16650
jmp 0x1485b
jmp 0x14828
movq 0x1e7c9(%rip), %rax     # 0x32ff8
movq (%rax), %rdi
leaq 0x159a1(%rip), %rsi     # 0x2a1da
leaq 0x16c06(%rip), %rdx     # 0x2b446
leaq 0x16790(%rip), %rcx     # 0x2afd7
movl $0x5bf, %r8d            # imm = 0x5BF
movb $0x0, %al
callq 0x2240
ud2
callq 0x2040
movq 0x20(%rsp), %rax
movb $0x0, 0x38ce(%rax)
addq $0x28, %rsp
retq
nopl (%rax)