h$      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)Types and Pretty instances for the QBE IL(c) Francesco Gazzetta, 2022 BSD-3-Clause!Francesco Gazzetta None />qbe+Datatypre representing a QBE IL source fileqbeFunction argumentqbe'Comparison operators. Where there's a  ,  means floating point (le, lt, ge, gt ), while  r means integer (sle, ule, slt, ult...)qbeequalityqbe inequalityqbelower or equalqbelower qbegreater or equal qbe'greater Floating point only comparison qbe3ordered (no operand is a NaN) (floating point only) qbe?unordered (at least one operand is a NaN) (floating point only) qbe$Binary arithmetic and bit operationsqbe addqbe subqbediv/udiv.  Div Signed gets translated to div!, so it will work also on floatsqbe mulqberem/uremqbe orqbe xorqbe andqbe sarqbe shrqbe shlqbeInteger representationqbeRepresents the %x =t part of an instruction.qbe Instructionqbe$Binary arithmetic and bit operations qbeneg Memory | storedstoresstorelstorewstoreh/storeb"qbeloadwloadlloads/loadd#qbeloadsw/loaduw$qbeloadsh/loaduh%qbeloadsb/loadub'qbeextsw/extuw(qbeextsh/extuh)qbeextsb/extub*qbeexts. There is only one possible instruction type, so there's only an p instead of a full +qbetruncd. There is only one possible instruction type, so there's only an p instead of a full ,qbestosi/stoui-qbedtosi/dtoui.qbeswtof/uwtof/qbesltof/ultof0qbe cast1qbe copy2qbecall. The fields are: assignment, function name, environment, arguments, variadic arguments3qbevastart&, initializes a variable argument list4qbevaarg9, fetches the next argument from a variable argument list5qbe(Phi instruction argument, associating a ? to a v7qbePhi instruction9qbeJump instructions:qbeUnconditional jump;qbeConditional jump<qbeFunction return=qbeBlock of instructions beginning with a label and ending with a jump?qbe?Value, either an immediate or a global or temporary identifier.Cqbe6Indicates the presence or absence of a variadic markerFqbeFunction parameterKqbeFunction definition. The 'Maybe (Ident 'Temporary)' is the environmentTqbeGlobal object definitionVqbe,A type that can be part of an aggregate typeYqbeAggregate type`qbeMarks the defined item as visible outside the current file's scopeaqbe(Section name, with optional linker flagsbqbeConstant/immediatecqbe64 bit integer. The  is whether to negate.dqbeSingle-precision floateqbeDouble-precision floatfqbe Global symbolgqbeExtended typesiqbe bjqbe hkqbe Base typeslqbe wmqbe lnqbe soqbe dpqbeQBE identifiers. The sigil is represented at the type level, so that mixing incompatible identifiers is impossible.:set -XOverloadedStrings:set -XDataKinds:set -XTypeApplications pretty $ Jmp $ Ident @'Label "a"jmp @a!pretty $ Jmp $ Ident @'Global "a":5:16: error:1 @ Couldn't match type @'Global@ with @'Label@ Expected: Ident 'Label Actual: Ident 'Global @ In the second argument of @($)@, namely @Ident @'Global "a"@ In the second argument of @($)@, namely @Jmp $ Ident @'Global "a"@: In the expression: pretty $ Jmp $ Ident @'Global "a"rqbe6Sigils are used to differentiate the verious types of pifier.sqbe :tqbe $uqbe %vqbe @wqbe;A raw identifier string, with no sigil information attachedxqbeInfix synonym of yqbeC C  Just "..." E C Nothing   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[Z\]^_`abecdfghijkolnmpqrstuvwxywrstuvpqkolnmghijbecdf_`a^]\Y[ZVWXTUPQRSMNOKLHIJFGCDEy?@AB=>9:;<7856 !"#$%&'()*+,-./01234x          !"#$%&'()*+,-./0123344567899:;<=>>?@@ABCDDEFGHIJKLLMNOPPQRSTUVWKXYZ[\]^_]`abcddefghijklmnopqrstuvwxyz{|}~"qbe-1.1.0.0-EZYEeub70O9HPOPs2NDzv1 Language.QBEProgramArg ComparisonEqNeLeLtGeGtOUoBinaryOpAddSubDivMulRemOrXorAndSarShrShlIntReprSignedUnsigned AssignmentInstNegStoreLoadLoadWLoadHLoadBCompareExtWExtHExtBExtSTruncDStoIDtoIWtoFLtoFCastCopyCallVaStartVaArgPhiArgPhiJumpJmpJnzRetBlockValValConst ValTemporary ValGlobalVariadic NoVariadicParamAbiTy AbiBaseTyAbiAggregateTyFuncDefField FieldExtTy FieldZeroDataItemSymbolStringConstDataDefSubTySubExtTySubAggregateTyTypeDefOpaqueAmountSize AlignmentLinkageExportSectionCIntCSingleCDoubleCGlobalExtTyBaseTyByteHalfWordWordLongSingleDoubleIdentSigil AggregateTyGlobal TemporaryLabelRawIdent:=prettyVariadic $fPrettyIdent$fPrettyIdent0$fPrettyIdent1$fPrettyIdent2$fPrettyBaseTy $fPrettyExtTy $fPrettyConst$fPrettyLinkage $fPrettySubTy$fPrettyTypeDef$fPrettyDataItem $fPrettyField$fPrettyDataDef $fPrettyAbiTy $fPrettyParam $fPrettyVal $fPrettyJump$fPrettyPhiArg$fPrettyAssignment $fPrettyPhi$fPrettyIntRepr$fPrettyBinaryOp$fPrettyComparison $fPrettyArg $fPrettyInst $fPrettyBlock$fPrettyFuncDef$fPrettyProgram $fShowProgram $fEqProgram $fShowFuncDef $fEqFuncDef $fShowBlock $fEqBlock $fShowInst$fEqInst $fShowArg$fEqArg$fShowComparison$fEqComparison$fShowBinaryOp $fEqBinaryOp $fShowIntRepr $fEqIntRepr $fShowPhi$fEqPhi$fShowAssignment$fEqAssignment $fShowPhiArg $fEqPhiArg $fShowJump$fEqJump $fShowVal$fEqVal$fShowVariadic $fEqVariadic $fShowParam $fEqParam $fShowAbiTy $fEqAbiTy $fShowDataDef $fEqDataDef $fShowField $fEqField$fShowDataItem $fEqDataItem $fShowTypeDef $fEqTypeDef $fShowSubTy $fEqSubTy $fShowLinkage $fEqLinkage $fShowConst $fEqConst $fShowExtTy $fEqExtTy $fShowBaseTy $fEqBaseTy $fShowIdent $fEqIdent $fOrdIdent$fIsStringIdent $fNFDataIdent$fHashableIdent $fShowSigil $fEqSigilbase GHC.MaybeMaybeNothingJustghc-prim GHC.TypesBool