1------------------------------------------------------------------------------ 2-- -- 3-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- 4-- -- 5-- S Y S T E M . B I T _ O P S -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2021, Free Software Foundation, Inc. -- 10-- -- 11-- GNAT is free software; you can redistribute it and/or modify it under -- 12-- terms of the GNU General Public License as published by the Free Soft- -- 13-- ware Foundation; either version 3, or (at your option) any later ver- -- 14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 16-- or FITNESS FOR A PARTICULAR PURPOSE. -- 17-- -- 18-- As a special exception under Section 7 of GPL version 3, you are granted -- 19-- additional permissions described in the GCC Runtime Library Exception, -- 20-- version 3.1, as published by the Free Software Foundation. -- 21-- -- 22-- You should have received a copy of the GNU General Public License and -- 23-- a copy of the GCC Runtime Library Exception along with this program; -- 24-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- 25-- <http://www.gnu.org/licenses/>. -- 26-- -- 27-- GNAT was originally developed by the GNAT team at New York University. -- 28-- Extensive contributions were provided by Ada Core Technologies Inc. -- 29-- -- 30------------------------------------------------------------------------------ 31 32-- Operations on packed bit strings 33 34pragma Compiler_Unit_Warning; 35 36with System; 37 38package System.Bit_Ops is 39 40 -- Note: in all the following routines, the System.Address parameters 41 -- represent the address of the first byte of an array used to represent 42 -- a packed array (of type System.Unsigned_Types.Packed_Bytes{1,2,4}) 43 -- The length in bits is passed as a separate parameter. Note that all 44 -- addresses must be of byte aligned arrays. 45 46 procedure Bit_And 47 (Left : System.Address; 48 Llen : Natural; 49 Right : System.Address; 50 Rlen : Natural; 51 Result : System.Address); 52 -- Bitwise "and" of given bit string with result being placed in Result. 53 -- The and operation is allowed to destroy unused bits in the last byte, 54 -- i.e. to leave them set in an undefined manner. Note that Left, Right 55 -- and Result always have the same length in bits (Len). 56 57 function Bit_Eq 58 (Left : System.Address; 59 Llen : Natural; 60 Right : System.Address; 61 Rlen : Natural) return Boolean; 62 -- Left and Right are the addresses of two bit packed arrays with Llen 63 -- and Rlen being the respective length in bits. The routine compares the 64 -- two bit strings for equality, being careful not to include the unused 65 -- bits in the final byte. Note that the result is always False if Rlen 66 -- is not equal to Llen. 67 68 procedure Bit_Not 69 (Opnd : System.Address; 70 Len : Natural; 71 Result : System.Address); 72 -- Bitwise "not" of given bit string with result being placed in Result. 73 -- The not operation is allowed to destroy unused bits in the last byte, 74 -- i.e. to leave them set in an undefined manner. Note that Result and 75 -- Opnd always have the same length in bits (Len). 76 77 procedure Bit_Or 78 (Left : System.Address; 79 Llen : Natural; 80 Right : System.Address; 81 Rlen : Natural; 82 Result : System.Address); 83 -- Bitwise "or" of given bit string with result being placed in Result. 84 -- The or operation is allowed to destroy unused bits in the last byte, 85 -- i.e. to leave them set in an undefined manner. Note that Left, Right 86 -- and Result always have the same length in bits (Len). 87 88 procedure Bit_Xor 89 (Left : System.Address; 90 Llen : Natural; 91 Right : System.Address; 92 Rlen : Natural; 93 Result : System.Address); 94 -- Bitwise "xor" of given bit string with result being placed in Result. 95 -- The xor operation is allowed to destroy unused bits in the last byte, 96 -- i.e. to leave them set in an undefined manner. Note that Left, Right 97 -- and Result always have the same length in bits (Len). 98 99end System.Bit_Ops; 100