mem-ruby: add addressOffset util
authorTiago Mück <tiago.muck@arm.com>
Fri, 5 Jun 2020 17:55:42 +0000 (12:55 -0500)
committerTiago Mück <tiago.muck@arm.com>
Tue, 13 Oct 2020 15:25:34 +0000 (15:25 +0000)
Returns the offset of an address with respect to a base address.
Looks unnecessary, but SLICC doesn't support casting and the '-'
operator for Addr types, so the alternative to this would be to add
more some helpers like 'addrToUint64' and 'uint64ToInt'.

Change-Id: I90480cec4c8b2e6bb9706f8b94ed33abe3c93e78
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31270
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/ruby/protocol/RubySlicc_Util.sm
src/mem/ruby/slicc_interface/RubySlicc_Util.hh

index b8b005ab263ce1b711fb1278a715351f881dfe83..70648ec6e167e463ce34425ee44d90517000cd73 100644 (file)
@@ -37,6 +37,7 @@ NodeID intToID(int nodenum);
 int IDToInt(NodeID id);
 int addressToInt(Addr addr);
 Addr intToAddress(int addr);
+int addressOffset(Addr addr, Addr base);
 int max_tokens();
 Addr makeLineAddress(Addr addr);
 int getOffset(Addr addr);
index b51b30c631127920aaac0f57050ca224b0db70fb..b56842520decf7990a75ef09a4fe9e9ef64d0fd8 100644 (file)
@@ -169,6 +169,16 @@ htmCmdToRubyRequestType(const Packet *pkt)
     }
 }
 
+inline int
+addressOffset(Addr addr, Addr base)
+{
+    assert(addr >= base);
+    Addr offset = addr - base;
+    // sanity checks if fits in an int
+    assert(offset < INT_MAX);
+    return offset;
+}
+
 /**
  * This function accepts an address, a data block and a packet. If the address
  * range for the data block contains the address which the packet needs to