aboutsummaryrefslogtreecommitdiff
path: root/softfloat/s_sub192.c
diff options
context:
space:
mode:
Diffstat (limited to 'softfloat/s_sub192.c')
-rwxr-xr-xsoftfloat/s_sub192.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/softfloat/s_sub192.c b/softfloat/s_sub192.c
new file mode 100755
index 0000000..96f21c9
--- /dev/null
+++ b/softfloat/s_sub192.c
@@ -0,0 +1,30 @@
+
+#include <stdint.h>
+#include "platform.h"
+#include "primitives.h"
+
+struct uint192
+ softfloat_sub192(
+ uint64_t a128,
+ uint64_t a64,
+ uint64_t a0,
+ uint64_t b128,
+ uint64_t b64,
+ uint64_t b0
+ )
+{
+ struct uint192 z;
+ unsigned int borrow64, borrow128;
+
+ z.v0 = a0 - b0;
+ borrow64 = ( a0 < b0 );
+ z.v64 = a64 - b64;
+ borrow128 = ( a64 < b64 );
+ z.v128 = a128 - b128;
+ borrow128 += ( z.v64 < borrow64 );
+ z.v64 -= borrow64;
+ z.v128 -= borrow128;
+ return z;
+
+}
+