Check for either sign or zero extension for postAdd packing
authorEddie Hung <eddie@fpgeh.com>
Wed, 27 Nov 2019 05:26:53 +0000 (21:26 -0800)
committerEddie Hung <eddie@fpgeh.com>
Wed, 27 Nov 2019 06:51:00 +0000 (22:51 -0800)
passes/pmgen/xilinx_dsp.pmg

index 0ba5290111a48b3f70a342e6f8c7d4e126a4e5dc..5d3b9c2eb1fea820875e98e52cf9b2ee485105e6 100644 (file)
@@ -347,9 +347,9 @@ match postAdd
        index <SigBit> port(postAdd, AB)[0] === sigP[0]
        filter GetSize(port(postAdd, AB)) >= GetSize(sigP)
        filter port(postAdd, AB).extract(0, GetSize(sigP)) == sigP
-       // Check that remainder of AB is a sign-extension
-       define <bool> AB_SIGNED (param(postAdd, AB == \A ? \A_SIGNED : \B_SIGNED).as_bool())
-       filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(AB_SIGNED ? sigP[GetSize(sigP)-1] : State::S0, GetSize(port(postAdd, AB))-GetSize(sigP))
+       // Check that remainder of AB is a sign- or zero-extension
+       filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(sigP[GetSize(sigP)-1], GetSize(port(postAdd, AB))-GetSize(sigP)) || port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(State::S0, GetSize(port(postAdd, AB))-GetSize(sigP))
+
        set postAddAB AB
        optional
 endmatch