Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1186 | savelij | 1 | /* symbolsize.c */ |
2 | /*****************************************************************************/ |
||
3 | /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only */ |
||
4 | /* */ |
||
5 | /* Macro Assembler AS */ |
||
6 | /* */ |
||
7 | /* Definition of a symbol's/instruction's operand type & size */ |
||
8 | /* */ |
||
9 | /*****************************************************************************/ |
||
10 | |||
11 | #include <string.h> |
||
12 | |||
13 | #include "symbolsize.h" |
||
14 | |||
15 | typedef struct |
||
16 | { |
||
17 | tSymbolSize Size; |
||
18 | const char Name[5]; |
||
19 | unsigned Bytes; |
||
20 | } tSizeDescr; |
||
21 | |||
22 | static const tSizeDescr Descrs[] = |
||
23 | { |
||
24 | { eSymbolSizeUnknown , "?" , 0 }, |
||
25 | { eSymbolSize8Bit , "I8" , 1 }, |
||
26 | { eSymbolSize16Bit , "I16" , 2 }, |
||
27 | { eSymbolSize32Bit , "I32" , 4 }, |
||
28 | { eSymbolSize64Bit , "I64" , 8 }, |
||
29 | { eSymbolSize80Bit , "F80" , 10 }, |
||
30 | { eSymbolSizeFloat32Bit , "F32" , 4 }, |
||
31 | { eSymbolSizeFloat64Bit , "F64" , 8 }, |
||
32 | { eSymbolSizeFloat96Bit , "F96" , 12 }, |
||
33 | { eSymbolSize24Bit , "I24" , 3 }, |
||
34 | { eSymbolSizeFloatDec96Bit , "D96" , 12 }, |
||
35 | { eSymbolSize48Bit , "I48" , 6 }, |
||
36 | { eSymbolSizeFloat48Bit , "F48" , 6 }, |
||
37 | { eSymbolSize128Bit , "I128", 16 }, |
||
38 | { eSymbolSizeFloat128Bit , "F128", 16 }, |
||
39 | { eSymbolSizeFloat64Bit_G , "G64" , 8 }, |
||
40 | { eSymbolSizeUnknown , "" , 0 }, |
||
41 | }; |
||
42 | |||
43 | /*!------------------------------------------------------------------------ |
||
44 | * \fn GetSymbolSizeName(tSymbolSize Size) |
||
45 | * \brief retrieve human-readable name of symbol size |
||
46 | * \param Size size to query |
||
47 | * \return name |
||
48 | * ------------------------------------------------------------------------ */ |
||
49 | |||
50 | const char *GetSymbolSizeName(tSymbolSize Size) |
||
51 | { |
||
52 | const tSizeDescr *pDescr; |
||
53 | |||
54 | for (pDescr = Descrs; pDescr->Name[0]; pDescr++) |
||
55 | if (pDescr->Size == Size) |
||
56 | return pDescr->Name; |
||
57 | return "?"; |
||
58 | } |
||
59 | |||
60 | /*!------------------------------------------------------------------------ |
||
61 | * \fn GetSymbolSizeBytes(tSymbolSize Size) |
||
62 | * \brief retrieve # of bytes of symbol size |
||
63 | * \param Size size to query |
||
64 | * \return # of bytes |
||
65 | * ------------------------------------------------------------------------ */ |
||
66 | |||
67 | unsigned GetSymbolSizeBytes(tSymbolSize Size) |
||
68 | { |
||
69 | const tSizeDescr *pDescr; |
||
70 | |||
71 | for (pDescr = Descrs; pDescr->Name[0]; pDescr++) |
||
72 | if (pDescr->Size == Size) |
||
73 | return pDescr->Bytes; |
||
74 | return 0; |
||
75 | } |