Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed

  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. }
  76.