$$% Arcus cosine. \def\acos{\cos^{-1}} % Vector projection. \def\projection#1#2{{proj_{#1}\left(#2\right)}} % Vector rejection. \def\rejection#1#2{{rej_{#1}\left(#2\right)}} % Norm. \def\norm#1{{\left\|#1\right\|}} % Cross product. \def\cross#1#2{\mathit{cross}\left(#1,#2\right)} % Dot product. \def\dot#1#2{{#1 \cdot #2}} % Magnitude. \def\mag#1{{\left|#1\right}} \def\group#1{\left(#1\right)}} \def\sbgrp#1{\left\{#1\right\}}$$

## Ring1_Intrinsic_subtract

Compute the difference of two values detecting numeric overflow.

 Ring1_Result Ring1_Intrinsic_subtract_suffix   (     type *result,     type x,     type y   ) 

The following table denotes the valid combinations of suffix and type

 suffix type u8 uint8_t u16 uint16_t u32 uint32_t u64 uint64_t s8 int8_t s16 int16_t s32 int32_t s64 int64_t sz size_t

### Parameter Variables

x
The first value aka minuend.
y
The second value aka subtrahend.
result
A pointer to a variable. For the assigned value see remarks section.

### Return Values

Ring1_Result_Success on success, Ring1_Result_Failure on failure.

### Post Conditions

If this function fails, then it sets the by-thread status variable.

Below is a list of failure conditions and the status codes indicating them.

Ring1_Status_InvalidArgument
result was NULL.
Ring1_Status_NumericOverflow
a numeric overflow occurred.

### Remarks

For the function variants for uintn_t and size_t, the value assigned to the variable are the lower n bits of the mathematical sum of the minuend and the subtrahend. This means x - y is reduced modulo MAX + 1 where MAX is UINTn_MAX or SIZE_MAX, respectively.

For the function variants for intn_t, the value assigned to the variable are the lower n bits of the 2's complements difference of the minuend and the subtrahend.

Consequently, these functions can be used to perform safe subtraction of signed and unsigned integers.