summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/libntp/tsftomsu.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/libntp/tsftomsu.c')
-rw-r--r--contrib/ntp/libntp/tsftomsu.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/contrib/ntp/libntp/tsftomsu.c b/contrib/ntp/libntp/tsftomsu.c
new file mode 100644
index 0000000..5926aab
--- /dev/null
+++ b/contrib/ntp/libntp/tsftomsu.c
@@ -0,0 +1,38 @@
+/*
+ * tsftomsu - convert from a time stamp fraction to milliseconds
+ */
+#include "ntp_fp.h"
+#include "ntp_stdlib.h"
+
+int
+tsftomsu(
+ u_long tsf,
+ int round
+ )
+{
+ register long val_ui, val_uf;
+ register long tmp_ui, tmp_uf;
+ register int i;
+
+ /*
+ * Essentially, multiply by 10 three times in l_fp form.
+ * The integral part is the milliseconds.
+ */
+ val_ui = 0;
+ val_uf = tsf;
+ for (i = 3; i > 0; i--) {
+ M_LSHIFT(val_ui, val_uf);
+ tmp_ui = val_ui;
+ tmp_uf = val_uf;
+ M_LSHIFT(val_ui, val_uf);
+ M_LSHIFT(val_ui, val_uf);
+ M_ADD(val_ui, val_uf, tmp_ui, tmp_uf);
+ }
+
+ /*
+ * Round the value if need be, then return it.
+ */
+ if (round && (val_uf & 0x80000000))
+ val_ui++;
+ return (int)val_ui;
+}
OpenPOWER on IntegriCloud