Subversion Repositories pentevo

Rev

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
}