summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/arm/vlrt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/arm/vlrt.c')
-rwxr-xr-xsrc/pkg/runtime/arm/vlrt.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/pkg/runtime/arm/vlrt.c b/src/pkg/runtime/arm/vlrt.c
index 276a91f20..8e3aa624c 100755
--- a/src/pkg/runtime/arm/vlrt.c
+++ b/src/pkg/runtime/arm/vlrt.c
@@ -291,9 +291,15 @@ _divv(Vlong *q, Vlong n, Vlong d)
long nneg, dneg;
if(n.hi == (((long)n.lo)>>31) && d.hi == (((long)d.lo)>>31)) {
- q->lo = (long)n.lo / (long)d.lo;
- q->hi = ((long)q->lo) >> 31;
- return;
+ if((long)n.lo == -0x80000000 && (long)d.lo == -1) {
+ // special case: 32-bit -0x80000000 / -1 causes wrong sign
+ q->lo = 0x80000000;
+ q->hi = 0;
+ return;
+ }
+ q->lo = (long)n.lo / (long)d.lo;
+ q->hi = ((long)q->lo) >> 31;
+ return;
}
nneg = n.hi >> 31;
if(nneg)