summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/formats/fp.isa
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh.poyarekar@gmail.com>2018-02-20 00:32:37 +0530
committerGabe Black <gabeblack@google.com>2018-03-15 23:24:51 +0000
commit9dc44b4173b72d15fa7ee49d1b196c2d11c84d02 (patch)
treea55560518cf4395d1eab583cbeb51d6c06b28dbd /src/arch/arm/isa/formats/fp.isa
parent5a1e52d5a019c128c4c87783f76f4742c5e4455f (diff)
downloadgem5-9dc44b4173b72d15fa7ee49d1b196c2d11c84d02.tar.xz
arm: Fix implicit-fallthrough warnings when building with gcc-7+
gcc 7 onwards have additional heuristics to detect implicit fallthroughs and it fails the build with warnings for ARM as a result. There was one gcc bug[1] that I fixed but the rest are cases that gcc cannot detect due to the point at which it does the fallthrough check. Most of this patch adds __builtin_unreachable() hints in places that throw this warning to indicate to gcc that the fallthrough will never happen. The remaining cases are actually possible fallthroughs due to incorrect code running on the simulator; in which case an Unknown instruction is returned. [1] https://gcc.gnu.org/ml/gcc-patches/2018-02/msg01105.html Change-Id: I1baa9fa0ed15181c10c755c0bd777f88b607c158 Signed-off-by: Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com> Reviewed-on: https://gem5-review.googlesource.com/8541 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
Diffstat (limited to 'src/arch/arm/isa/formats/fp.isa')
-rw-r--r--src/arch/arm/isa/formats/fp.isa12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/arch/arm/isa/formats/fp.isa b/src/arch/arm/isa/formats/fp.isa
index 82d351e6e..009b27c8f 100644
--- a/src/arch/arm/isa/formats/fp.isa
+++ b/src/arch/arm/isa/formats/fp.isa
@@ -130,7 +130,7 @@ let {{
width = 1;
break;
}
- // Fall through on purpose.
+ M5_FALLTHROUGH;
default:
return new Unknown(machInst);
}
@@ -404,6 +404,8 @@ let {{
} else {
return new VbifD<uint64_t>(machInst, vd, vn, vm);
}
+ default:
+ M5_UNREACHABLE;
}
} else {
switch (c) {
@@ -445,6 +447,8 @@ let {{
return new VornD<uint64_t>(
machInst, vd, vn, vm);
}
+ default:
+ M5_UNREACHABLE;
}
}
}
@@ -1550,6 +1554,8 @@ let {{
return decodeNeonSTwoMiscReg<NVnegD, NVnegQ>(
q, size, machInst, vd, vm);
}
+ default:
+ return new Unknown64(machInst);
}
case 0x2:
switch (bits(b, 4, 1)) {
@@ -1859,6 +1865,8 @@ let {{
// If rn == sp, then this is called vpop.
return new VLdmStm(machInst, rn, vd, single,
true, true, true, offset);
+ default:
+ M5_UNREACHABLE;
}
}
case 0x2:
@@ -1870,7 +1878,7 @@ let {{
return new VLdmStm(machInst, rn, vd, single,
false, true, true, offset);
}
- // Fall through on purpose
+ M5_FALLTHROUGH;
case 0x3:
const bool up = (bits(machInst, 23) == 1);
const uint32_t imm = bits(machInst, 7, 0) << 2;