예제 #1
0
        public override Expression GetStoreBufferLocation()
        {
            if (!AH.IsPrimitiveType(type))
            {
                return(null);
            }

            return(AH.MakeApply1("Armada_StoreBufferLocation_Addressable", address.Val, "Armada_StoreBufferLocation"));
        }
예제 #2
0
        public override string GetStoreBufferLocation()
        {
            if (!AH.IsPrimitiveType(type))
            {
                return(null);
            }

            return($"Armada_StoreBufferLocation_Addressable({address.Val})");
        }
예제 #3
0
        public override Expression GetStoreBufferLocation()
        {
            if (!AH.IsPrimitiveType(type))
            {
                return(null);
            }

            var fields = new List <Expression>();
            var v      = GetStoreBufferLocationInfo(ref fields);

            if (v == null)
            {
                return(null);
            }

            var fields_seq = new SeqDisplayExpr(Token.NoToken, fields);

            return(AH.MakeApply2("Armada_StoreBufferLocation_Unaddressable", v, fields_seq, "Armada_StoreBufferLocation"));
        }
예제 #4
0
        public override string GetStoreBufferLocation()
        {
            if (!AH.IsPrimitiveType(type))
            {
                return(null);
            }

            var fields = new List <string>();
            var v      = GetStoreBufferLocationInfo(ref fields);

            if (v == null)
            {
                return(null);
            }

            var fields_seq = String.Join(", ", fields);

            return($"Armada_StoreBufferLocation_Unaddressable({v}, [{fields_seq}])");
        }
예제 #5
0
        public Expression UpdateTotalStateWithStoreBufferEntry(ResolutionContext context, IConstraintCollector constraintCollector,
                                                               Expression val_new)
        {
            if (NoTSO())
            {
                return(UpdateTotalStateLocationDirectly(context, constraintCollector, val_new));
            }

            if (!AH.IsPrimitiveType(type))
            {
                context.Fail(tok, "Can't do TSO write to non-primitive type; try using ::= instead of :=");
                return(null);
            }

            var entry = GetStoreBufferEntry(val_new);

            if (entry == null)
            {
                context.Fail(tok, "Can't do a TSO write to that location; try using ::= instead of :=");
                return(null);
            }

            return(AH.MakeApply3("Armada_AppendToThreadStoreBuffer", context.GetLValueState(), context.tid, entry, "Armada_TotalState"));
        }
예제 #6
0
        public string UpdateTotalStateWithStoreBufferEntry(ResolutionContext context, IConstraintCollector constraintCollector,
                                                           string val_new, ArmadaPC pc)
        {
            if (NoTSO())
            {
                return(UpdateTotalStateLocationDirectly(context, constraintCollector, val_new));
            }

            if (!AH.IsPrimitiveType(type))
            {
                context.Fail(tok, "Can't do TSO write to non-primitive type; try using ::= instead of :=");
                return(null);
            }

            var entry = GetStoreBufferEntry(val_new, pc);

            if (entry == null)
            {
                context.Fail(tok, "Can't do a TSO write to that location; try using ::= instead of :=");
                return(null);
            }

            return($"Armada_AppendToThreadStoreBuffer({context.GetLValueState()}, {context.tid}, {entry})");
        }