APInt
A value implementing arbitrary precision integer arithmetic.
APInt is a functional replacement for common case unsigned integer type
like UInt or UInt64, but also allows non-byte-width
integer sizes and large integer value types such as 3-bits, 15-bits, or more
than 64-bits of precision. APInt provides a variety of arithmetic
operators and methods to manipulate integer values of any bit-width. It
supports both the typical integer arithmetic and comparison operations as
well as bitwise manipulation.
-
The underlying word size.
Declaration
Swift
public typealias Word = UInt64 -
The bitwidth of this integer.
Declaration
Swift
public private(set) var bitWidth: Int { get } -
Declaration
Swift
public func asLLVM() -> LLVMValueRef -
Creates and initializes a new
APIntwith a bitwidth of one and a value of zero.Declaration
Swift
public init() -
Creates and initializes a new
APIntwith a given bit width, value, and signedness.Declaration
Swift
public init(width numBits: Int, value: UInt64, signed: Bool = false)Parameters
numBitsThe bit width of the integer.
valueThe value of the integer.
signedIf
true, treat the most significant bit at the given bit width as a sign bit. Defaults tofalse. -
Creates and initializes a new
APIntwith a given bit width and an array of word values.Declaration
Swift
public init(width numBits: Int, values: [Word])Parameters
numBitsThe bit width of the integer.
valuesAn array of words to form the value of the integer.
-
Declaration
Swift
public static func == (lhs: APInt, rhs: APInt) -> Bool -
Declaration
Swift
public static func < (lhs: APInt, rhs: APInt) -> Bool
-
Declaration
Swift
public typealias Magnitude = APInt -
Declaration
Swift
public typealias IntegerLiteralType = UInt64 -
Declaration
Swift
public init(integerLiteral value: UInt64) -
Declaration
Swift
public init?<T>(exactly source: T) where T : BinaryInteger -
Returns the result of performing a bitwise AND operation on the two given values.
Declaration
Swift
public static func & (lhs: APInt, rhs: APInt) -> APInt -
Stores the result of performing a bitwise AND operation on the two given values in the left-hand-side variable.
Declaration
Swift
public static func &= (lhs: inout APInt, rhs: APInt) -
Returns the result of performing a bitwise OR operation on the two given values.
Declaration
Swift
public static func | (lhs: APInt, rhs: APInt) -> APInt -
Stores the result of performing a bitwise OR operation on the two given values in the left-hand-side variable.
Declaration
Swift
public static func |= (lhs: inout APInt, rhs: APInt) -
Returns the result of performing a bitwise XOR operation on the two given values.
Declaration
Swift
public static func ^ (lhs: APInt, rhs: APInt) -> APInt -
Stores the result of performing a bitwise XOR operation on the two given values in the left-hand-side variable.
Declaration
Swift
public static func ^= (lhs: inout APInt, rhs: APInt) -
Declaration
Swift
public static func + (lhs: APInt, rhs: APInt) -> APInt -
Declaration
Swift
public static func += (lhs: inout APInt, rhs: APInt) -
Declaration
Swift
public static func - (lhs: APInt, rhs: APInt) -> APInt -
Declaration
Swift
public static func -= (lhs: inout APInt, rhs: APInt) -
Declaration
Swift
public var magnitude: APInt { get } -
Declaration
Swift
public static func * (lhs: APInt, rhs: APInt) -> APInt -
Declaration
Swift
public static func *= (lhs: inout APInt, rhs: APInt) -
Returns the result of shifting a value’s binary representation the specified number of digits to the left.
Declaration
Swift
public static func << (lhs: APInt, amount: UInt64) -> APInt -
Stores the result of shifting a value’s binary representation the specified number of digits to the left in the left-hand-side variable.
Declaration
Swift
public static func <<= (lhs: inout APInt, amount: UInt64) -
Logically shift the value right by the given amount.
Declaration
Swift
public func logicallyShiftedRight(by amount: UInt64) -> APIntParameters
amountThe amount to shift right by.
Return Value
An integer of the same bit width that has been logically right shifted.
-
Logically shift the value right by the given amount.
Declaration
Swift
public mutating func logicallyShiftRight(by amount: UInt64)Parameters
amountThe amount to shift right by.
-
Attempts to return the value of this integer as a 64-bit unsigned integer that has been zero-extended. If the value cannot be represented faithfully in 64 bits, the result is
nil.Declaration
Swift
public var zeroExtendedValue: UInt64? { get } -
Attempts to return the value of this integer as a 64-bit signed integer that has been sign-extended. If the value cannot be rerprresented faithfully in 64 bits, the result is
nil.Declaration
Swift
public var signExtendedValue: Int64? { get } -
Returns
trueif the most significant bit of this value is set.Note: This may return
trueeven if you did not explicitly construct a signedAPInt.Declaration
Swift
public var isNegative: Bool { get } -
Returns
trueif all bits are ones.Declaration
Swift
public var areAllBitsSet: Bool { get } -
The number of leading zeros in this value’s binary representation.
Declaration
Swift
public var leadingZeroBitCount: Int { get } -
The number of leading ones in this value’s binary representation.
Declaration
Swift
public var leadingNonZeroBitCount: Int { get } -
The number of trailing zeros in this value’s binary representation.
Declaration
Swift
public var trailingZeroBitCount: Int { get } -
The number of trailing ones in this value’s binary representation.
Declaration
Swift
public var trailingNonZeroBitCount: Int { get } -
The number of bits equal to 1 in this value’s binary representation.
Declaration
Swift
public var nonzeroBitCount: Int { get }
-
Sets all bits to one in this value’s binary representation.
Declaration
Swift
public mutating func setAllBits() -
Sets the bit at the given position to one.
Declaration
Swift
public mutating func setBit(at position: Int)Parameters
positionThe position of the bit to set.
-
Sets the sign bit to one in this value’s binary representation.
Declaration
Swift
public mutating func setSignBit() -
Sets all bits in the given range to one in this value’s binary representation.
Declaration
Swift
public mutating func setBits(_ range: ClosedRange<Int>)Parameters
rangeThe range of bits to flip.
-
Sets all bits in the given range to one in this value’s binary representation.
Declaration
Swift
public mutating func setBits(_ range: Range<Int>)Parameters
rangeThe range of bits to flip.
-
Sets all bits in the given range to one in this value’s binary representation.
Declaration
Swift
public mutating func setBits(_ range: PartialRangeUpTo<Int>)Parameters
rangeThe range of bits to flip.
-
Sets all bits in the given range to one in this value’s binary representation.
Declaration
Swift
public mutating func setBits(_ range: PartialRangeThrough<Int>)Parameters
rangeThe range of bits to flip.
-
Sets all bits in the given range to one in this value’s binary representation.
Declaration
Swift
public mutating func setBits(_ range: PartialRangeFrom<Int>)Parameters
rangeThe range of bits to flip.
-
Clears all bits to one in this value’s binary representation.
Declaration
Swift
public mutating func clearAllBits() -
Sets the bit at the given position to zero.
Declaration
Swift
public mutating func clearBit(_ position: Int)Parameters
positionThe position of the bit to zero.
-
Clears the sign bit in this value’s binary representation.
Declaration
Swift
public mutating func clearSignBit() -
Truncates the integer to a given bit width.
Declaration
Swift
public func truncate(to width: Int) -> APIntParameters
widthThe new width to truncate towards. This width cannot exceed the current width of the integer.
Return Value
An integer of the given bit width that has been truncated.
-
Zero extends the integer to a given bit width.
Declaration
Swift
public func zeroExtend(to width: Int) -> APIntParameters
widthThe width to zero-extend the integer to. This value may not be smaller than the current width of the integer.
Return Value
An integer of the given bit width that has been zero-extended.
-
Sign extends the integer to a given bit width.
Declaration
Swift
public func signExtend(to width: Int) -> APIntParameters
widthThe width to sign-extend the integer to. This value may not be smaller than the current width of the integer.
Return Value
An integer of the given bit width that has been zero-extended.
-
Zero extends or truncates the integer to the given width.
If the given bit width exceeds the current bit width, the value is zero-extended. Else if the given bit width is less than the current bit width, the value is truncated.
If the given bit width matches the current bit width, this operation is a no-op.
Declaration
Swift
public func zeroExtendOrTruncate(to width: Int) -> APIntParameters
widthThe width to zero extend or truncate to.
Return Value
An integer that has been zero extended or truncated to fit the given bit width.
-
Sign extends or truncates the integer to the given width.
If the given bit width exceeds the current bit width, the value is sign-extended. Else if the given bit width is less than the current bit width, the value is truncated.
If the given bit width matches the current bit width, this operation is a no-op.
Declaration
Swift
public func signExtendOrTruncate(to width: Int) -> APIntParameters
widthThe width to sign extend or truncate to.
Return Value
An integer that has been sign extended or truncated to fit the given bit width.
-
Toggle every bit in this integer to its opposite value.
Declaration
Swift
public mutating func flipAll() -
Computes the complement integer value.
Declaration
Swift
public prefix static func ~ (val: APInt) -> APIntParameters
valThe integer value.
Return Value
An integer with the value of the bitwise complement.
APInt Structure Reference