sim: Fix pseudo instruction parameter loading
authorJason Lowe-Power <jason@lowepower.com>
Tue, 18 Feb 2020 18:51:58 +0000 (10:51 -0800)
committerJason Lowe-Power <jason@lowepower.com>
Thu, 20 Feb 2020 02:15:09 +0000 (02:15 +0000)
With the new ABI API the position argument of the pseudo inst ABI was
not updated correctly. The position needs to be incremented (at least)
once per argument.

Note: `position++` must be outside of the function call because of a GCC
complaint:
build/X86/sim/pseudo_inst.hh:80:48: error: cannot bind non-const lvalue
reference of type 'int&' to an rvalue of type 'PseudoInstABI::Position
{aka int}'
         return TheISA::getArgument(tc, position++, sizeof(uint64_t),
false);

Issue: https://gem5.atlassian.net/browse/GEM5-351
Change-Id: Idd890a587a565b8ad819f094147a02dc1519e997
Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/25543
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/sim/pseudo_inst.hh

index 44227aff178122e6dd5060ec0417019432bb3c96..e2d0c612b190aad1453f81a307f65c56b260eb67 100644 (file)
@@ -77,7 +77,10 @@ struct Argument<PseudoInstABI, uint64_t>
     static uint64_t
     get(ThreadContext *tc, PseudoInstABI::Position &position)
     {
-        return TheISA::getArgument(tc, position, sizeof(uint64_t), false);
+        uint64_t result = TheISA::getArgument(tc, position, sizeof(uint64_t),
+                                              false);
+        position++;
+        return result;
     }
 };