diff options
Diffstat (limited to 'src/llvm_backend_expr.cpp')
| -rw-r--r-- | src/llvm_backend_expr.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index b10b7745a..f6b9934ef 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -182,11 +182,12 @@ gb_internal lbValue lb_emit_unary_arith(lbProcedure *p, TokenKind op, lbValue x, if (op == Token_Xor) { lbValue cmp = {}; cmp.type = x.type; - cmp.value = LLVMBuildNot(p->builder, x.value, ""); if (is_type_bit_set(x.type)) { ExactValue ev_mask = exact_bit_set_all_set_mask(x.type); lbValue mask = lb_const_value(p->module, x.type, ev_mask); - cmp.value = LLVMBuildAnd(p->builder, cmp.value, mask.value, ""); + cmp.value = LLVMBuildXor(p->builder, x.value, mask.value, ""); + } else { + cmp.value = LLVMBuildNot(p->builder, x.value, ""); } return lb_emit_conv(p, cmp, type); } |