diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2012-03-19 06:36:09 -0400 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2012-03-19 06:36:09 -0400 |
commit | 72538294fb1eb2e4dcd5d818c78bcdf78b0de491 (patch) | |
tree | ba95d431b41d54c7c25a3b5e84dfca9707a9feb2 /src/arch/arm/isa/templates | |
parent | adb862103138caf11191da50d34eb4c93295633a (diff) | |
download | gem5-72538294fb1eb2e4dcd5d818c78bcdf78b0de491.tar.xz |
gcc: Clean-up of non-C++0x compliant code, first steps
This patch cleans up a number of minor issues aiming to get closer to
compliance with the C++0x standard as interpreted by gcc and clang
(compile with std=c++0x and -pedantic-errors). In particular, the
patch cleans up enums where the last item was succeded by a comma,
namespaces closed by a curcly brace followed by a semi-colon, and the
use of the GNU-extension typeof (replaced by templated functions). It
does not address variable-length arrays, zero-size arrays, anonymous
structs, range expressions in switch statements, and the use of long
long. The generated CPU code also has a large number of issues that
remain to be fixed, mainly related to overflows in implicit constant
conversion (due to shifts).
Diffstat (limited to 'src/arch/arm/isa/templates')
-rw-r--r-- | src/arch/arm/isa/templates/neon.isa | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/arch/arm/isa/templates/neon.isa b/src/arch/arm/isa/templates/neon.isa index fe3a026b8..573d245b8 100644 --- a/src/arch/arm/isa/templates/neon.isa +++ b/src/arch/arm/isa/templates/neon.isa @@ -234,12 +234,16 @@ def template NeonEqualRegExecute {{ }}; output header {{ - uint16_t nextBiggerType(uint8_t); - uint32_t nextBiggerType(uint16_t); - uint64_t nextBiggerType(uint32_t); - int16_t nextBiggerType(int8_t); - int32_t nextBiggerType(int16_t); - int64_t nextBiggerType(int32_t); + template <typename T> + struct bigger_type_t; + + template<> struct bigger_type_t<uint8_t> { typedef uint16_t type; }; + template<> struct bigger_type_t<uint16_t> { typedef uint32_t type; }; + template<> struct bigger_type_t<uint32_t> { typedef uint64_t type; }; + + template<> struct bigger_type_t<int8_t> { typedef int16_t type; }; + template<> struct bigger_type_t<int16_t> { typedef int32_t type; }; + template<> struct bigger_type_t<int32_t> { typedef int64_t type; }; }}; def template NeonUnequalRegExecute {{ @@ -247,7 +251,7 @@ def template NeonUnequalRegExecute {{ Fault %(class_name)s<Element>::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const { - typedef typeof(nextBiggerType((Element)0)) BigElement; + typedef typename bigger_type_t<Element>::type BigElement; Fault fault = NoFault; %(op_decl)s; %(op_rd)s; |