1 #ifndef _ASMPARS_H 2 #define _ASMPARS_H 3 /* asmpars.h */ 4 /*****************************************************************************/ 5 /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only */ 6 /* */ 7 /* AS-Portierung */ 8 /* */ 9 /* Verwaltung von Symbolen und das ganze Drumherum... */ 10 /* */ 11 /*****************************************************************************/ 12 13 #include <stddef.h> 14 15 #include "symbolsize.h" 16 #include "symflags.h" 17 #include "tempresult.h" 18 #include "lstmacroexp.h" 19 #include "errmsg.h" 20 21 typedef enum 22 { 23 UInt1 , 24 UInt2 , 25 UInt3 , 26 SInt4 , UInt4 , Int4 , 27 SInt5 , UInt5 , Int5 , 28 SInt6 , UInt6 , 29 SInt7 , UInt7 , 30 SInt8 , UInt8 , Int8 , 31 SInt9 , UInt9 , 32 UInt10 , Int10 , 33 UInt11 , 34 UInt12 , Int12 , 35 UInt13 , 36 UInt14 , Int14 , 37 SInt15 , UInt15 , 38 SInt16 , UInt16 , Int16 , 39 UInt17 , 40 UInt18 , 41 UInt19 , 42 SInt20 , UInt20 , Int20 , 43 UInt21 , 44 UInt22 , 45 UInt23 , 46 SInt24 , UInt24 , Int24 , 47 SInt32 , UInt32 , Int32 , 48 #ifdef HAS64 49 SInt64 , UInt64 , Int64 , 50 #endif 51 IntTypeCnt 52 } IntType; 53 54 #ifdef __cplusplus 55 # include "cppops.h" 56 DefCPPOps_Enum(IntType) 57 #endif 58 59 #ifdef HAS64 60 #define LargeWordType UInt64 61 #else 62 #define LargeWordType UInt32 63 #endif 64 65 typedef struct 66 { 67 Word SignAndWidth; 68 LargeWord Mask; 69 LargeInt Min, Max; 70 } tIntTypeDef; 71 72 typedef enum 73 { 74 Float32, 75 Float64, 76 Float80, 77 FloatDec, 78 FloatCo, 79 Float16, 80 FloatTypeCnt 81 } FloatType; 82 83 typedef struct _TFunction 84 { 85 struct _TFunction *Next; 86 Byte ArguCnt; 87 StringPtr Name, Definition; 88 } TFunction, *PFunction; 89 90 typedef struct sEvalResult 91 { 92 Boolean OK; 93 tSymbolFlags Flags; 94 unsigned AddrSpaceMask; /* Welche Adressraeume genutzt ? */ 95 tSymbolSize DataSize; 96 } tEvalResult; 97 98 struct sStrComp; 99 struct sRelocEntry; 100 struct sSymbolEntry; 101 102 extern tIntTypeDef IntTypeDefs[IntTypeCnt]; 103 extern LongInt MomLocHandle; 104 extern LongInt TmpSymCounter, 105 FwdSymCounter, 106 BackSymCounter; 107 extern char TmpSymCounterVal[10]; 108 extern LongInt LocHandleCnt; 109 extern LongInt MomLocHandle; 110 111 112 extern void AsmParsInit(void); 113 114 extern void InitTmpSymbols(void); 115 116 extern Boolean SingleBit(LargeInt Inp, LargeInt *Erg); 117 118 119 extern IntType GetSmallestUIntType(LargeWord MaxValue); 120 121 122 struct sDynString; 123 extern LargeInt DynString2Int(const struct sDynString *pDynString); 124 125 extern Boolean Int2DynString(struct sDynString *pDynString, LargeInt Src); 126 127 extern int TempResultToInt(TempResult *pResult); 128 129 extern Boolean MultiCharToInt(TempResult *pResult, unsigned MaxLen); 130 131 132 extern Boolean RangeCheck(LargeInt Wert, IntType Typ); 133 134 extern Boolean FloatRangeCheck(Double Wert, FloatType Typ); 135 136 137 extern Boolean IdentifySection(const struct sStrComp *pName, LongInt *Erg); 138 139 140 extern Boolean ExpandStrSymbol(char *pDest, size_t DestSize, const struct sStrComp *pSrc); 141 142 extern void ChangeSymbol(struct sSymbolEntry *pEntry, LargeInt Value); 143 144 extern struct sSymbolEntry *EnterIntSymbolWithFlags(const struct sStrComp *pName, LargeInt Wert, Byte Typ, Boolean MayChange, tSymbolFlags Flags); 145 146 #define EnterIntSymbol(pName, Wert, Typ, MayChange) EnterIntSymbolWithFlags(pName, Wert, Typ, MayChange, eSymbolFlag_None) 147 148 extern void EnterExtSymbol(const struct sStrComp *pName, LargeInt Wert, Byte Typ, Boolean MayChange); 149 150 extern struct sSymbolEntry *EnterRelSymbol(const struct sStrComp *pName, LargeInt Wert, Byte Typ, Boolean MayChange); 151 152 extern void EnterFloatSymbol(const struct sStrComp *pName, Double Wert, Boolean MayChange); 153 154 extern void EnterStringSymbol(const struct sStrComp *pName, const char *pValue, Boolean MayChange); 155 156 extern void EnterDynStringSymbolWithFlags(const struct sStrComp *pName, const tDynString *pValue, Boolean MayChange, tSymbolFlags Flags); 157 158 extern void EnterRegSymbol(const struct sStrComp *pName, const tRegDescr *Value, tSymbolSize Size, Boolean MayChange, Boolean AddList); 159 160 #define EnterDynStringSymbol(pName, pValue, MayChange) EnterDynStringSymbolWithFlags(pName, pValue, MayChange, eSymbolFlag_None) 161 162 extern void LookupSymbol(const struct sStrComp *pName, TempResult *pValue, Boolean WantRelocs, TempType ReqType); 163 164 extern void PrintSymbolList(void); 165 166 extern void PrintDebSymbols(FILE *f); 167 168 extern void PrintNoISymbols(FILE *f); 169 170 extern void PrintSymbolTree(void); 171 172 extern void ClearSymbolList(void); 173 174 extern void ResetSymbolDefines(void); 175 176 extern void PrintSymbolDepth(void); 177 178 179 extern void EvalResultClear(tEvalResult *pResult); 180 181 182 extern void SetSymbolOrStructElemSize(const struct sStrComp *pName, tSymbolSize Size); 183 184 extern ShortInt GetSymbolSize(const struct sStrComp *pName); 185 186 extern Boolean IsSymbolDefined(const struct sStrComp *pName); 187 188 extern Boolean IsSymbolUsed(const struct sStrComp *pName); 189 190 extern Boolean IsSymbolChangeable(const struct sStrComp *pName); 191 192 extern Integer GetSymbolType(const struct sStrComp *pName); 193 194 extern void EvalExpression(const char *pExpr, TempResult *Erg); 195 196 extern void EvalStrExpression(const struct sStrComp *pExpr, TempResult *pErg); 197 198 extern LargeInt EvalStrIntExpression(const struct sStrComp *pExpr, IntType Type, Boolean *pResult); 199 extern LargeInt EvalStrIntExpressionWithFlags(const struct sStrComp *pExpr, IntType Type, Boolean *pResult, tSymbolFlags *pFlags); 200 extern LargeInt EvalStrIntExpressionWithResult(const struct sStrComp *pExpr, IntType Type, struct sEvalResult *pResult); 201 extern LargeInt EvalStrIntExpressionOffs(const struct sStrComp *pExpr, int Offset, IntType Type, Boolean *pResult); 202 extern LargeInt EvalStrIntExpressionOffsWithFlags(const struct sStrComp *pExpr, int Offset, IntType Type, Boolean *pResult, tSymbolFlags *pFlags); 203 extern LargeInt EvalStrIntExpressionOffsWithResult(const struct sStrComp *pExpr, int Offset, IntType Type, struct sEvalResult *pResult); 204 205 extern Double EvalStrFloatExpressionWithResult(const struct sStrComp *pExpr, FloatType Typ, struct sEvalResult *pResult); 206 extern Double EvalStrFloatExpression(const struct sStrComp *pExpr, FloatType Typ, Boolean *pResult); 207 208 extern void EvalStrStringExpressionWithResult(const struct sStrComp *pExpr, struct sEvalResult *pResult, char *pEvalResult); 209 extern void EvalStrStringExpression(const struct sStrComp *pExpr, Boolean *pResult, char *pEvalResult); 210 211 extern tErrorNum EvalStrRegExpressionWithResult(const struct sStrComp *pExpr, struct sRegDescr *pResult, struct sEvalResult *pEvalResult); 212 typedef enum { eIsNoReg, eIsReg, eRegAbort } tRegEvalResult; 213 extern tRegEvalResult EvalStrRegExpressionAsOperand(const struct sStrComp *pArg, struct sRegDescr *pResult, struct sEvalResult *pEvalResult, tSymbolSize ReqSize, Boolean MustBeReg); 214 215 extern const char *GetIntelSuffix(unsigned Radix); 216 217 218 extern Boolean PushSymbol(const struct sStrComp *pSymName, const struct sStrComp *pStackName); 219 220 extern Boolean PopSymbol(const struct sStrComp *pSymName, const struct sStrComp *pStackName); 221 222 extern void ClearStacks(void); 223 224 225 extern void EnterFunction(const struct sStrComp *pComp, char *FDefinition, Byte NewCnt); 226 227 extern PFunction FindFunction(const char *Name); 228 229 extern void PrintFunctionList(void); 230 231 extern void ClearFunctionList(void); 232 233 234 extern void AddDefSymbol(char *Name, TempResult *Value); 235 236 extern void RemoveDefSymbol(char *Name); 237 238 extern void CopyDefSymbols(void); 239 240 extern const TempResult *FindDefSymbol(const char *pName); 241 242 extern void PrintCrossList(void); 243 244 extern void ClearCrossList(void); 245 246 247 extern LongInt GetSectionHandle(char *SName_O, Boolean AddEmpt, LongInt Parent); 248 249 extern const char *GetSectionName(LongInt Handle); 250 251 extern void SetMomSection(LongInt Handle); 252 253 extern void AddSectionUsage(LongInt Start, LongInt Length); 254 255 extern void ClearSectionUsage(void); 256 257 extern void PrintSectionList(void); 258 259 extern void PrintDebSections(FILE *f); 260 261 extern void ClearSectionList(void); 262 263 264 extern void SetFlag(Boolean *Flag, const char *Name, Boolean Wert); 265 266 extern LongInt GetLocHandle(void); 267 268 extern void PushLocHandle(LongInt NewLoc); 269 270 extern void PopLocHandle(void); 271 272 extern void ClearLocStack(void); 273 274 275 extern void PrintRegDefs(void); 276 277 278 extern void ClearCodepages(void); 279 280 extern void PrintCodepages(void); 281 282 283 extern void asmpars_init(void); 284 285 #endif /* _ASMPARS_H */ 286