From 1530dc6c5502bc3b6e2692b93d8658c1ea02502b Mon Sep 17 00:00:00 2001 From: nitrix Date: Thu, 5 Mar 2020 17:13:19 +0100 Subject: [PATCH] sign extend rax into rbx before calling idiv, the replaces the rbx zeroing --- src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java index d75e87f..f8edb42 100644 --- a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java +++ b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java @@ -357,7 +357,7 @@ public class GenASM implements Visitor { if (isFloatOperation) { this.ex.write(" divsd %xmm1, %xmm0\n"); } else { - this.ex.write(" xor %rdx, %rdx\n"); // clear upper part of division + this.ex.write(" cqto\n"); // sign extend rax into rdx since we're dealing with signed values this.ex.write(" idiv %rbx\n"); // %rax/%rbx, quotient now in %rax } return null; @@ -370,7 +370,7 @@ public class GenASM implements Visitor { e.rhs.welcome(this); this.ex.write(" movq %rax, %rbx\n"); this.ex.write(" popq %rax\n"); - this.ex.write(" xor %rdx, %rdx\n"); // clear upper part of division + this.ex.write(" cqto\n"); // sign extend rax into rdx since we're dealing with signed values this.ex.write(" idiv %rbx\n"); // %rax/%rbx, remainder now in %rdx this.ex.write(" movq %rdx, %rax\n"); return null;