123
456789
10var _BARG : BundleArgumentRegister;111213var _BundleCommitTargetSet : boolean;141516var _BundleConditionSet : boolean;171819var _SystemBlockTerminalPending : boolean;20212223var _BundleSequentialPC : Word;24var _FrameStackReturnTarget : Word;25var _BundleArgument : Word;26var _BundleArgumentKind : bits(3);27var _BundleOperation : BundleOperationDescriptor;28var _BundleDimensions : BundleDimensionSnapshot;29var _BundleDimensionPresent : BundleDimensionPresenceSnapshot;30var _BundleScalarBindings : BundleScalarBindingSnapshot;31var _BundleTileBindings : BundleTileBindingSnapshot;32var _BundleSharedBindings : BundleSharedBindingSnapshot;33var _BundleRangeGroup : BundleRangeGroupState;34var _BundleZeroParticipationSeen : boolean;35var _BundleControlAttributes : BundleControlAttributes;36var _BundleDataAttributes : BundleDataAttributes;37var _BundleDataAttributesPresent : boolean;38var _BundleHint : BundleHintAttributes;39var _BundleFixedPointAttributes : BundleFixedPointAttributes;40var _MemoryCopyTemplate : MemoryCopyTemplateState;41var _FrameTemplate : FrameTemplateState;424344var _LocalGenerations : LocalGenerationSnapshot;454647var _SharedGenerations : SharedGenerationSnapshot;484950var _BundleExecutionDomainToken : integer;51525354var _NextBundleExecutionDomainToken : integer;555657var _TileDataLayoutCapabilities : bits(32);58var _FrameDepth : integer {0..PTO_MODEL_MEMORY_EVENTS};59var _LastFrameBegin : Reg5Selector;60var _LastFrameEnd : Reg5Selector;61var _LastFrameSize : Word;62var _LastQueueLeft : Word;63var _LastQueueRight : Word;64var _LastQueueFlags : bits(4);65var _LastMemoryCommandAddress : Word;66var _LastMemoryCommandSize : Word;67var _LastCrossBlockACR : bits(10);68var _LastCrossBlockID : bits(7);69var _LastBundleHintPayload : Word;70
71readonly func BundleIsActive() => boolean72begin73 return _BundleActive;74end;75
76readonly func BundleBodyIsActive() => boolean77begin78 return _BundleBodyActive;79end;80
81readonly func BundleTileOperationSelected() => boolean82begin83 return _BundleOperation.valid &&84 (_BundleOperation.operation_class == BundleOperation_TileElement ||85 _BundleOperation.operation_class == BundleOperation_TileMemory ||86 _BundleOperation.operation_class == BundleOperation_TileMatrix);87end;88
89readonly func CurrentBundleTileOperationDataTypeCode() => bits(5)90begin91 assert BundleTileOperationSelected() &&92 _BundleOperation.data_type_valid;93 return _BundleOperation.data_type;94end;95
96readonly func CurrentBundleMemoryOrder() => MemoryOrder97begin98 if _BundleControlAttributes.acquire &&99 _BundleControlAttributes.release then100 return MemoryOrder_AcquireRelease;101 elsif _BundleControlAttributes.acquire then102 return MemoryOrder_Acquire;103 elsif _BundleControlAttributes.release then104 return MemoryOrder_Release;105 else106 return MemoryOrder_Relaxed;107 end;108end;109
110readonly func CurrentBundleAtomic() => boolean111begin112 return _BundleControlAttributes.atomic;113end;114
115readonly func CurrentBundleDimensionReduction() => boolean116begin117 return _BundleControlAttributes.dimension_reduction;118end;119
120readonly func CurrentBundlePadValue() => TilePadValue121begin122 if !_BundleDataAttributesPresent then return TilePad_Null; end;123 case _BundleDataAttributes.pad_value[1:0] of124 when '00' => return TilePad_Zero;125 when '01' => return TilePad_Max;126 when '10' => return TilePad_Min;127 when '11' => return TilePad_Null;128 end;129end;130
131pure func TileDataLayoutCodeAccepted(data_layout: bits(5)) => boolean132begin133 let code = UInt(data_layout);134 return code == 0 || code == 1 || code == 3 || code == 4 ||135 code == 6 || code == 8 || code == 9 || code == 17 ||136 code == 18 || code == 20 || (21 <= code && code <= 28) ||137 code == 30;138end;139
140pure func TileDataLayoutOfCode(data_layout: bits(5)) => TileDataLayout141begin142 assert TileDataLayoutCodeAccepted(data_layout);143 let code = UInt(data_layout);144 if code == 1 then return TileDataLayout_ND2DN;145 elsif code == 3 then return TileDataLayout_ND2ZN;146 elsif code == 4 then return TileDataLayout_ND2NZ;147 elsif code == 6 then return TileDataLayout_DN2ND;148 elsif code == 8 then return TileDataLayout_DN2ZN;149 elsif code == 9 then return TileDataLayout_DN2NZ;150 elsif code == 17 then return TileDataLayout_ZN2ND;151 elsif code == 18 then return TileDataLayout_ZN2DN;152 elsif code == 20 then return TileDataLayout_ZN2NZ;153 elsif code == 21 then return TileDataLayout_ND2M32;154 elsif code == 22 then return TileDataLayout_ND2M16;155 elsif code == 23 then return TileDataLayout_ND2N8;156 elsif code == 24 then return TileDataLayout_M322ND;157 elsif code == 25 then return TileDataLayout_M162ND;158 elsif code == 26 then return TileDataLayout_N82ND;159 elsif code == 27 then return TileDataLayout_NZ2ND;160 elsif code == 28 then return TileDataLayout_NZ2DN;161 elsif code == 30 then return TileDataLayout_NZ2ZN;162 else return TileDataLayout_NORM;163 end;164end;165
166pure func TileDataLayoutCodeOf(data_layout: TileDataLayout) => bits(5)167begin168 case data_layout of169 when TileDataLayout_NORM => return Zeros{5};170 when TileDataLayout_ND2DN => return Zeros{5} + 1;171 when TileDataLayout_ND2ZN => return Zeros{5} + 3;172 when TileDataLayout_ND2NZ => return Zeros{5} + 4;173 when TileDataLayout_DN2ND => return Zeros{5} + 6;174 when TileDataLayout_DN2ZN => return Zeros{5} + 8;175 when TileDataLayout_DN2NZ => return Zeros{5} + 9;176 when TileDataLayout_ZN2ND => return Zeros{5} + 17;177 when TileDataLayout_ZN2DN => return Zeros{5} + 18;178 when TileDataLayout_ZN2NZ => return Zeros{5} + 20;179 when TileDataLayout_ND2M32 => return Zeros{5} + 21;180 when TileDataLayout_ND2M16 => return Zeros{5} + 22;181 when TileDataLayout_ND2N8 => return Zeros{5} + 23;182 when TileDataLayout_M322ND => return Zeros{5} + 24;183 when TileDataLayout_M162ND => return Zeros{5} + 25;184 when TileDataLayout_N82ND => return Zeros{5} + 26;185 when TileDataLayout_NZ2ND => return Zeros{5} + 27;186 when TileDataLayout_NZ2DN => return Zeros{5} + 28;187 when TileDataLayout_NZ2ZN => return Zeros{5} + 30;188 end;189end;190
191pure func TileDataLayoutIsCubeConversion(data_layout: bits(5)) => boolean192begin193 let code = UInt(data_layout);194 return 21 <= code && code <= 26;195end;196
197pure func TileDataLayoutConversionIsLoad(data_layout: bits(5)) => boolean198begin199 let code = UInt(data_layout);200 return 21 <= code && code <= 23;201end;202
203pure func TileDataLayoutConversionIsStore(data_layout: bits(5)) => boolean204begin205 let code = UInt(data_layout);206 return 24 <= code && code <= 26;207end;208
209pure func TileDataLayoutCubeLayout(data_layout: bits(5)) => TileLayout210begin211 assert TileDataLayoutIsCubeConversion(data_layout);212 let code = UInt(data_layout);213 if code == 21 || code == 24 then214 return TileLayout_CUBE_M32;215 elsif code == 22 || code == 25 then216 return TileLayout_CUBE_M16;217 else218 return TileLayout_CUBE_N8;219 end;220end;221
222readonly func CurrentBundleDataLayout() => TileDataLayout223begin224 return TileDataLayoutOfCode(_BundleDataAttributes.data_layout);225end;226
227readonly func TileDataLayoutCodeSupported(data_layout: bits(5)) => boolean228begin229 230 231 return TileDataLayoutCodeAccepted(data_layout);232end;233
234pure func TileDataLayoutSourceLayout(data_layout: TileDataLayout) => TileLayout235begin236 case data_layout of237 when TileDataLayout_NORM,238 TileDataLayout_ND2DN,239 TileDataLayout_ND2ZN,240 TileDataLayout_ND2NZ => return TileLayout_RowMajor;241 when TileDataLayout_DN2ND,242 TileDataLayout_DN2ZN,243 TileDataLayout_DN2NZ => return TileLayout_ColumnMajor;244 when TileDataLayout_ZN2ND,245 TileDataLayout_ZN2DN,246 TileDataLayout_ZN2NZ => return TileLayout_ZN;247 when TileDataLayout_NZ2ND,248 TileDataLayout_NZ2DN,249 TileDataLayout_NZ2ZN => return TileLayout_NZ;250 when TileDataLayout_ND2M32,251 TileDataLayout_ND2M16,252 TileDataLayout_ND2N8,253 TileDataLayout_M322ND,254 TileDataLayout_M162ND,255 TileDataLayout_N82ND => unreachable;256 end;257end;258
259pure func TileDataLayoutDestinationLayout(260 data_layout: TileDataLayout) => TileLayout261begin262 case data_layout of263 when TileDataLayout_NORM,264 TileDataLayout_DN2ND,265 TileDataLayout_ZN2ND,266 TileDataLayout_NZ2ND => return TileLayout_RowMajor;267 when TileDataLayout_ND2DN,268 TileDataLayout_ZN2DN,269 TileDataLayout_NZ2DN => return TileLayout_ColumnMajor;270 when TileDataLayout_ND2ZN,271 TileDataLayout_DN2ZN,272 TileDataLayout_NZ2ZN => return TileLayout_ZN;273 when TileDataLayout_ND2NZ,274 TileDataLayout_DN2NZ,275 TileDataLayout_ZN2NZ => return TileLayout_NZ;276 when TileDataLayout_ND2M32,277 TileDataLayout_ND2M16,278 TileDataLayout_ND2N8,279 TileDataLayout_M322ND,280 TileDataLayout_M162ND,281 TileDataLayout_N82ND => unreachable;282 end;283end;284
285readonly func CurrentBundleTileSourceLayout() => TileLayout286begin287 return TileDataLayoutSourceLayout(CurrentBundleDataLayout());288end;289
290readonly func CurrentBundleTileLayout() => TileLayout291begin292 return TileDataLayoutDestinationLayout(CurrentBundleDataLayout());293end;294
295func AdvertiseTileDataLayout(data_layout: bits(5))296begin297 assert TileDataLayoutCodeAccepted(data_layout);298 _TileDataLayoutCapabilities[UInt(data_layout)] = '1';299end;300
301readonly func CurrentBundleDataTypeCode() => bits(5)302begin303 return _BundleDataAttributes.data_type;304end;305
306readonly func CurrentBundleCanonicalize() => boolean307begin308 return _BundleDataAttributes.canonicalize;309end;310
311func SetBundleDataAttributeState(312 data_type: bits(5), data_layout: bits(5), pad_value: bits(2),313 comparison_mode: bits(3), rounding_mode: bits(3), saturating: boolean,314 canonicalize: boolean)315begin316 if !BundleDataTypeFieldValid(data_type) ||317 !TileDataLayoutCodeSupported(data_layout) then318 SetFault(Fault_TileLegality, ReadTPC());319 return;320 end;321 _BundleDataAttributes.data_type_present = TRUE;322 _BundleDataAttributes.data_type = data_type;323 _BundleDataAttributes.data_layout = data_layout;324 _BundleDataAttributes.pad_value = pad_value;325 _BundleDataAttributes.comparison_mode = comparison_mode;326 _BundleDataAttributes.rounding_mode = rounding_mode;327 _BundleDataAttributes.saturating = saturating;328 _BundleDataAttributes.canonicalize = canonicalize;329end;330