File : fz_shift.ads


   1 ------------------------------------------------------------------------------
   2 ------------------------------------------------------------------------------
   3 -- This file is part of 'Finite Field Arithmetic', aka 'FFA'.               --
   4 --                                                                          --
   5 -- (C) 2017 Stanislav Datskovskiy ( www.loper-os.org )                      --
   6 -- http://wot.deedbot.org/17215D118B7239507FAFED98B98228A001ABFFC7.html     --
   7 --                                                                          --
   8 -- You do not have, nor can you ever acquire the right to use, copy or      --
   9 -- distribute this software ; Should you use this software for any purpose, --
  10 -- or copy and distribute it to anyone or in any manner, you are breaking   --
  11 -- the laws of whatever soi-disant jurisdiction, and you promise to         --
  12 -- continue doing so for the indefinite future. In any case, please         --
  13 -- always : read and understand any software ; verify any PGP signatures    --
  14 -- that you use - for any purpose.                                          --
  15 --                                                                          --
  16 -- See also http://trilema.com/2015/a-new-software-licensing-paradigm .     --
  17 ------------------------------------------------------------------------------
  18 ------------------------------------------------------------------------------
  19 
  20 with Words;   use Words;
  21 with FZ_Type; use FZ_Type;
  22 
  23 
  24 package FZ_Shift is
  25    
  26    pragma Pure;
  27    
  28    --------------------------------------------------------------
  29    -- Shift Right
  30    --------------------------------------------------------------
  31    
  32    -- ShiftedN := N >> Count (with Overflow Input and Output)
  33    procedure FZ_ShiftRight_O_I(N        : in  FZ;
  34                                ShiftedN : out FZ;
  35                                Count    : in  WBit_Index;
  36                                Overflow : out Word;
  37                                OF_in    : in  Word);
  38    pragma Inline_Always(FZ_ShiftRight_O_I);
  39    
  40    -- ShiftedN := N >> Count (with Overflow Output only)
  41    procedure FZ_ShiftRight_O(N        : in  FZ;
  42                              ShiftedN : out FZ;
  43                              Count    : in  WBit_Index;
  44                              Overflow : out Word);
  45    pragma Inline_Always(FZ_ShiftRight_O);
  46    
  47    -- ShiftedN := N >> Count (no Overflow output or input)
  48    procedure FZ_ShiftRight(N        : in  FZ;
  49                            ShiftedN : out FZ;
  50                            Count    : in  WBit_Index);
  51    pragma Inline_Always(FZ_ShiftRight);
  52    
  53    --------------------------------------------------------------
  54    -- Shift Left
  55    --------------------------------------------------------------
  56 
  57    -- ShiftedN := N << Count (with Overflow Input and Output)
  58    procedure FZ_ShiftLeft_O_I(N        : in  FZ;
  59                               ShiftedN : out FZ;
  60                               Count    : in  WBit_Index;
  61                               Overflow : out Word;
  62                               OF_in    : in  Word);
  63    pragma Inline_Always(FZ_ShiftLeft_O_I);
  64    
  65    -- ShiftedN := N << Count (with Overflow Output only)
  66    procedure FZ_ShiftLeft_O(N        : in  FZ;
  67                             ShiftedN : out FZ;
  68                             Count    : in  WBit_Index;
  69                             Overflow : out Word);
  70    pragma Inline_Always(FZ_ShiftLeft_O);
  71    
  72    -- ShiftedN := N << Count (no Overflow output or input)
  73    procedure FZ_ShiftLeft(N        : in  FZ;
  74                           ShiftedN : out FZ;
  75                           Count    : in  WBit_Index);
  76    pragma Inline_Always(FZ_ShiftLeft);
  77    
  78 end FZ_Shift;