private bool TryGetConstSLV(XILInstr instr, TypeDescriptor rtype, out StdLogicVector constSLV) { switch (instr.Name) { case InstructionCodes.LdConst: { object constValue = instr.Operand; constSLV = StdLogicVector.Serialize(constValue); } break; case InstructionCodes.Ld0: { object sample = rtype.GetSampleInstance(); StdLogicVector slv = StdLogicVector.Serialize(sample); constSLV = StdLogicVector._0s(slv.Size); } break; default: { constSLV = ""; return(false); } } return(true); }
private object Create0(TypeDescriptor type) { var slv = StdLogicVector.Serialize(type.GetSampleInstance()); slv = StdLogicVector._0s(slv.Size); return(StdLogicVector.Deserialize(slv, type.CILType)); }
public override StdLogicVector[] SerializeInstance(object instance) { StdLogicVector plain = StdLogicVector.Serialize(instance); StdLogicVector[] result = new StdLogicVector[Size]; for (int i = 0; i < (int)Size; i++) { int upper = (i + 1) * WordSize - 1; if (upper >= plain.Size) { result[i] = StdLogicVector._0s(upper - plain.Size + 1).Concat(plain[plain.Size - 1, i * WordSize]); } else { result[i] = plain[(i + 1) * WordSize - 1, i *WordSize]; } } return(result); }
private void ImplementLdConst(object value) { var mms = GetDataLayout(value); Unsigned addr = mms.BaseAddress; var addrType = TypeDescriptor.GetTypeOf(addr); int addrSize = addr.Size; var rawWordType = Mapper.MarshalInfo.GetRawWordType(); var stackTypes = new TypeDescriptor[mms.Size + 1]; for (ulong k = 0; k < mms.Size; k++) { Emit(_iset.RdMemFix(Mapper.DefaultRegion, addr).CreateStk(0, rawWordType)); addr = (addr + Unsigned.FromULong(1, 1)).Resize(addrSize); stackTypes[k] = rawWordType; } uint concatSize = (uint)(mms.Size * Mapper.MarshalInfo.WordSize); var concatType = TypeDescriptor.GetTypeOf(StdLogicVector._0s(concatSize)); if (mms.Size > 1) { stackTypes[mms.Size] = concatType; Emit(_iset.Concat().CreateStk(stackTypes.Length, stackTypes)); } var valueType = TypeDescriptor.GetTypeOf(value); var slvValue = StdLogicVector.Serialize(value); var rawValueType = TypeDescriptor.GetTypeOf(slvValue); if (!rawValueType.Equals(concatType)) { Emit(_iset.Convert().CreateStk(1, concatType, rawValueType)); } if (!rawValueType.Equals(valueType)) { Emit(_iset.Convert().CreateStk(1, rawValueType, valueType)); } }
public override StdLogicVector ConvertValueToWireType(object value) { return(StdLogicVector.Serialize(value)); }