Subversion Repositories pentevo

Rev

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

  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.   { eSymbolSizeUnknown       , ""    ,  0 },
  39. };
  40.  
  41. /*!------------------------------------------------------------------------
  42.  * \fn     GetSymbolSizeName(tSymbolSize Size)
  43.  * \brief  retrieve human-readable name of symbol size
  44.  * \param  Size size to query
  45.  * \return name
  46.  * ------------------------------------------------------------------------ */
  47.  
  48. const char *GetSymbolSizeName(tSymbolSize Size)
  49. {
  50.   const tSizeDescr *pDescr;
  51.  
  52.   for (pDescr = Descrs; pDescr->Name[0]; pDescr++)
  53.     if (pDescr->Size == Size)
  54.       return pDescr->Name;
  55.   return "?";
  56. }
  57.  
  58. /*!------------------------------------------------------------------------
  59.  * \fn     GetSymbolSizeBytes(tSymbolSize Size)
  60.  * \brief  retrieve # of bytes of symbol size
  61.  * \param  Size size to query
  62.  * \return # of bytes
  63.  * ------------------------------------------------------------------------ */
  64.  
  65. unsigned GetSymbolSizeBytes(tSymbolSize Size)
  66. {
  67.   const tSizeDescr *pDescr;
  68.  
  69.   for (pDescr = Descrs; pDescr->Name[0]; pDescr++)
  70.     if (pDescr->Size == Size)
  71.       return pDescr->Bytes;
  72.   return 0;
  73. }
  74.