summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorJim Wilson <jim.wilson@linaro.org>2017-03-25 20:32:02 -0700
committerJim Wilson <jim.wilson@linaro.org>2017-03-25 20:32:02 -0700
commitf124168208a5927e9f1b9843094ec2bf2aad2edf (patch)
treeae49c47619cae3ca06b5f7d5dc82c36d29f9a281 /sim
parent7ed687b257a4182771079c582887498d0a98810c (diff)
Fix bug with cmn/adds where C flag was incorrectly set.
sim/aarch64/ * simulator.c (set_flags_for_add32): Cast result to uint32_t in carry flag check. sim/testsuite/sim/aarch64/ * adds.s: Add checks for values -2 and 1, where C is not set.
Diffstat (limited to 'sim')
-rw-r--r--sim/aarch64/ChangeLog5
-rw-r--r--sim/aarch64/simulator.c2
-rw-r--r--sim/testsuite/sim/aarch64/ChangeLog4
-rw-r--r--sim/testsuite/sim/aarch64/adds.s17
4 files changed, 27 insertions, 1 deletions
diff --git a/sim/aarch64/ChangeLog b/sim/aarch64/ChangeLog
index 0bf305af1f..1d97291129 100644
--- a/sim/aarch64/ChangeLog
+++ b/sim/aarch64/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-25 Jim Wilson <jim.wilson@linaro.org>
+
+ * simulator.c (set_flags_for_add32): Cast result to uint32_t in carry
+ flag check.
+
2017-03-03 Jim Wilson <jim.wilson@linaro.org>
* simulator.c (mul64hi): Shift carry left by 32.
diff --git a/sim/aarch64/simulator.c b/sim/aarch64/simulator.c
index 8a8df7a273..f0668ada93 100644
--- a/sim/aarch64/simulator.c
+++ b/sim/aarch64/simulator.c
@@ -1650,7 +1650,7 @@ set_flags_for_add32 (sim_cpu *cpu, int32_t value1, int32_t value2)
if (result & (1 << 31))
flags |= N;
- if (uresult != result)
+ if (uresult != (uint32_t)result)
flags |= C;
if (sresult != result)
diff --git a/sim/testsuite/sim/aarch64/ChangeLog b/sim/testsuite/sim/aarch64/ChangeLog
index 2fcde5d882..094144634a 100644
--- a/sim/testsuite/sim/aarch64/ChangeLog
+++ b/sim/testsuite/sim/aarch64/ChangeLog
@@ -1,3 +1,7 @@
+2017-03-25 Jim Wilson <jim.wilson@linaro.org>
+
+ * adds.s: Add checks for values -2 and 1, where C is not set.
+
2017-03-03 Jim Wilson <jim.wilson@linaro.org>
* sumov.s: Correct compare test values.
diff --git a/sim/testsuite/sim/aarch64/adds.s b/sim/testsuite/sim/aarch64/adds.s
index 2bc240cd62..fdea5a7e19 100644
--- a/sim/testsuite/sim/aarch64/adds.s
+++ b/sim/testsuite/sim/aarch64/adds.s
@@ -3,6 +3,7 @@
# Check the basic integer compare instructions: adds, adds64, subs, subs64.
# For add, check value pairs 1 and -1 (Z), -1 and -1 (N), 2 and -1 (C),
# and MIN_INT and -1 (V),
+# Also check -2 and 1 (not C).
# For sub, negate the second value.
.include "testutils.inc"
@@ -24,6 +25,10 @@
mov w1, #-1
adds w2, w0, w1
bvc .Lfailure
+ mov w0, #-2
+ mov w1, #1
+ adds w2, w0, w1
+ bcs .Lfailure
mov x0, #1
mov x1, #-1
@@ -41,6 +46,10 @@
mov x1, #-1
adds x2, x0, x1
bvc .Lfailure
+ mov x0, #-2
+ mov x1, #1
+ adds x2, x0, x1
+ bcs .Lfailure
mov w0, #1
mov w1, #1
@@ -58,6 +67,10 @@
mov w1, #1
subs w2, w0, w1
bvc .Lfailure
+ mov w0, #-2
+ mov w1, #-1
+ subs w2, w0, w1
+ bcs .Lfailure
mov x0, #1
mov x1, #1
@@ -75,6 +88,10 @@
mov x1, #1
subs x2, x0, x1
bvc .Lfailure
+ mov x0, #-2
+ mov x1, #-1
+ subs x2, x0, x1
+ bcs .Lfailure
pass
.Lfailure: