<!--
{
  "documentType" : "article",
  "framework" : "Accelerate",
  "identifier" : "/documentation/Accelerate/vbasicops",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "vBasicOps"
}
-->

# vBasicOps

Perform basic arithmetic and logical functions on 128-bit vectors.

## Discussion

vBasicOps.h declares a set of basic arithmetic and logical functions on 128-bit vectors, using the integer types from vecLibTypes.h.

The function names begin with “v,” followed by a mnemonic for the type of operation, e.g. “S” or “U” for signed or unsigned, then the width of the operation, then the name of the operation. For example, `vS8Divide` performs division of signed 8-bit values packed into 128-bit vectors.

## Topics

### Shift and Rotate Functions (from vBasicOps.h)

[`func vLL128Shift(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vLL128Shift(_:_:))

128-bit logical left shift.

[`func vLR128Shift(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vLR128Shift(_:_:))

128-bit logical right shift.

[`func vLL64Shift(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vLL64Shift(_:_:))

64-bit logical left shift.

[`func vLL64Shift2(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vLL64Shift2(_:_:))

64-bit logical left shift with two shift factors.

[`func vLR64Shift(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vLR64Shift(_:_:))

64-bit logical right shift.

[`func vLR64Shift2(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vLR64Shift2(_:_:))

64-bit logical right shift with two shift factors.

[`func vA64Shift(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vA64Shift(_:_:))

64-bit arithmetic (signed) shift.

[`func vA64Shift2(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vA64Shift2(_:_:))

64-bit arithmetic (signed) shift with two shift factors.

[`func vA128Shift(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vA128Shift(_:_:))

128-bit arithmetic (signed) shift.

[`func vL64Rotate(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vL64Rotate(_:_:))

64-bit left rotate.

[`func vR64Rotate(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vR64Rotate(_:_:))

64-bit right rotate.

[`func vL64Rotate2(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vL64Rotate2(_:_:))

64-bit left rotate with two rotation factors.

[`func vR64Rotate2(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vR64Rotate2(_:_:))

64-bit right rotate with two rotation factors.

[`func vL128Rotate(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vL128Rotate(_:_:))

128-bit left rotate.

[`func vR128Rotate(vUInt32, vUInt8) -> vUInt32`](/documentation/Accelerate/vR128Rotate(_:_:))

128-bit right rotate.

### Integer Arithmetic Functions (from vBasicOps.h)

[`static vUInt32 vU64Add(vUInt32 __vbasicops_vA, vUInt32 __vbasicops_vB);`](/documentation/Accelerate/vU64Add)

Unsigned 64-bit addition (modular arithmetic).

[`func vU64AddS(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU64AddS(_:_:))

Unsigned 64-bit addition with saturation (clipping).

[`static vUInt32 vS64Add(vSInt32 __vbasicops_vA, vSInt32 __vbasicops_vB);`](/documentation/Accelerate/vS64Add)

Signed 64-bit addition (modular arithmetic).

[`func vS64AddS(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS64AddS(_:_:))

Signed 64-bit addition with saturation (clipping).

[`func vU128Add(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU128Add(_:_:))

Unsigned 128-bit addition (modular arithmetic).

[`func vU128AddS(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU128AddS(_:_:))

Unsigned 128-bit addition with saturation (clipping).

[`func vS128Add(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS128Add(_:_:))

Signed 128-bit addition (modular arithmetic).

[`func vS128AddS(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS128AddS(_:_:))

Signed 128-bit addition with saturation (clipping).

[`static vUInt32 vU64Sub(vUInt32 __vbasicops_vA, vUInt32 __vbasicops_vB);`](/documentation/Accelerate/vU64Sub)

Unsigned 64-bit subtraction (modular arithmetic).

[`func vU64SubS(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU64SubS(_:_:))

Unsigned 64-bit subtraction with saturation (clipping).

[`static vUInt32 vS64Sub(vUInt32 __vbasicops_vA, vUInt32 __vbasicops_vB);`](/documentation/Accelerate/vS64Sub)

Signed 64-bit subtraction (modular arithmetic).

[`func vS64SubS(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS64SubS(_:_:))

Signed 64-bit subtraction with saturation (clipping).

[`func vU128Sub(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU128Sub(_:_:))

Unsigned 128-bit subtraction (modular arithmetic).

[`func vU128SubS(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU128SubS(_:_:))

Unsigned 128-bit subtraction with saturation (clipping).

[`func vS128Sub(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS128Sub(_:_:))

Signed 128-bit subtraction (modular arithmetic).

[`func vS128SubS(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS128SubS(_:_:))

Signed 128-bit subtraction with saturation (clipping).

[`func vU8HalfMultiply(vUInt8, vUInt8) -> vUInt8`](/documentation/Accelerate/vU8HalfMultiply(_:_:))

Unsigned 8-bit multiplication; results are same width as multiplicands.

[`func vS8HalfMultiply(vSInt8, vSInt8) -> vSInt8`](/documentation/Accelerate/vS8HalfMultiply(_:_:))

Signed 8-bit multiplication; results are same width as multiplicands.

[`static vUInt16 vU16HalfMultiply(vUInt16 __vbasicops_vA, vUInt16 __vbasicops_vB);`](/documentation/Accelerate/vU16HalfMultiply)

Unsigned 16-bit multiplication; results are same width as multiplicands.

[`static vSInt16 vS16HalfMultiply(vSInt16 __vbasicops_vA, vSInt16 __vbasicops_vB);`](/documentation/Accelerate/vS16HalfMultiply)

Signed 16-bit multiplication; results are same width as multiplicands.

[`func vU32HalfMultiply(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU32HalfMultiply(_:_:))

Unsigned 32-bit multiplication; results are same width as multiplicands.

[`func vS32HalfMultiply(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS32HalfMultiply(_:_:))

Signed 32-bit multiplication; results are same width as multiplicands.

[`func vU64HalfMultiply(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU64HalfMultiply(_:_:))

Unsigned 64-bit multiplication; results are same width as multiplicands.

[`func vS64HalfMultiply(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS64HalfMultiply(_:_:))

Signed 64-bit multiplication; results are same width as multiplicands.

[`func vU128HalfMultiply(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU128HalfMultiply(_:_:))

Unsigned 128-bit multiplication; results are same width as multiplicands.

[`func vS128HalfMultiply(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS128HalfMultiply(_:_:))

Signed 128-bit multiplication; results are same width as multiplicands.

[`func vU32FullMulEven(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU32FullMulEven(_:_:))

Unsigned 32-bit multiplication; results are twice as wide as multiplicands, even-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vU32FullMulOdd(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU32FullMulOdd(_:_:))

Unsigned 32-bit multiplication; results are twice as wide as multiplicands, odd-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vS32FullMulEven(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS32FullMulEven(_:_:))

Signed 32-bit multiplication; results are twice as wide as multiplicands, even-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vS32FullMulOdd(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS32FullMulOdd(_:_:))

Signed 32-bit multiplication; results are twice as wide as multiplicands, odd-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vU64FullMulEven(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU64FullMulEven(_:_:))

Unsigned 64-bit multiplication; results are twice as wide as multiplicands, even-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vU64FullMulOdd(vUInt32, vUInt32) -> vUInt32`](/documentation/Accelerate/vU64FullMulOdd(_:_:))

Unsigned 64-bit multiplication; results are twice as wide as multiplicands, odd-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vS64FullMulEven(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS64FullMulEven(_:_:))

Signed 64-bit multiplication; results are twice as wide as multiplicands, even-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vS64FullMulOdd(vSInt32, vSInt32) -> vSInt32`](/documentation/Accelerate/vS64FullMulOdd(_:_:))

Signed 64-bit multiplication; results are twice as wide as multiplicands, odd-numbered elements of multiplicand vectors are used.  Note the big-endian convention: the leftmost element is element 0.

[`func vU8Divide(vUInt8, vUInt8, UnsafeMutablePointer<vUInt8>?) -> vUInt8`](/documentation/Accelerate/vU8Divide(_:_:_:))

Unsigned 8-bit division.

[`func vS8Divide(vSInt8, vSInt8, UnsafeMutablePointer<vSInt8>?) -> vSInt8`](/documentation/Accelerate/vS8Divide(_:_:_:))

Signed 8-bit division.

[`func vU16Divide(vUInt16, vUInt16, UnsafeMutablePointer<vUInt16>?) -> vUInt16`](/documentation/Accelerate/vU16Divide(_:_:_:))

Unsigned 16-bit division.

[`func vS16Divide(vSInt16, vSInt16, UnsafeMutablePointer<vSInt16>?) -> vSInt16`](/documentation/Accelerate/vS16Divide(_:_:_:))

Signed 16-bit division.

[`func vU32Divide(vUInt32, vUInt32, UnsafeMutablePointer<vUInt32>?) -> vUInt32`](/documentation/Accelerate/vU32Divide(_:_:_:))

Unsigned 32-bit division.

[`func vS32Divide(vSInt32, vSInt32, UnsafeMutablePointer<vSInt32>?) -> vSInt32`](/documentation/Accelerate/vS32Divide(_:_:_:))

Signed 32-bit division.

[`func vU64Divide(vUInt32, vUInt32, UnsafeMutablePointer<vUInt32>?) -> vUInt32`](/documentation/Accelerate/vU64Divide(_:_:_:))

Unsigned 64-bit division.

[`func vS64Divide(vSInt32, vSInt32, UnsafeMutablePointer<vSInt32>?) -> vSInt32`](/documentation/Accelerate/vS64Divide(_:_:_:))

Signed 64-bit division.

[`func vU128Divide(vUInt32, vUInt32, UnsafeMutablePointer<vUInt32>?) -> vUInt32`](/documentation/Accelerate/vU128Divide(_:_:_:))

Unsigned 128-bit division.

[`func vS128Divide(vSInt32, vSInt32, UnsafeMutablePointer<vSInt32>?) -> vSInt32`](/documentation/Accelerate/vS128Divide(_:_:_:))

Signed 128-bit division.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)