From 35cca73d2fe67a8ca2914fa56d428b570aff3189 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 21 Mar 2022 11:28:28 +1030 Subject: [PATCH] devtools/fp16: conversion tool for fp16 format. We use this in gossmap to represent htlc max/min approximations. Signed-off-by: Rusty Russell --- devtools/Makefile | 4 +++- devtools/fp16.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 devtools/fp16.c diff --git a/devtools/Makefile b/devtools/Makefile index 90dd7c7b4..181c1eae5 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -1,4 +1,4 @@ -DEVTOOLS := devtools/bolt11-cli devtools/decodemsg devtools/onion devtools/dump-gossipstore devtools/gossipwith devtools/create-gossipstore devtools/mkcommit devtools/mkfunding devtools/mkclose devtools/mkgossip devtools/mkencoded devtools/mkquery devtools/lightning-checkmessage devtools/topology devtools/route devtools/blindedpath devtools/bolt12-cli devtools/encodeaddr devtools/features +DEVTOOLS := devtools/bolt11-cli devtools/decodemsg devtools/onion devtools/dump-gossipstore devtools/gossipwith devtools/create-gossipstore devtools/mkcommit devtools/mkfunding devtools/mkclose devtools/mkgossip devtools/mkencoded devtools/mkquery devtools/lightning-checkmessage devtools/topology devtools/route devtools/blindedpath devtools/bolt12-cli devtools/encodeaddr devtools/features devtools/fp16 ifeq ($(HAVE_SQLITE3),1) DEVTOOLS += devtools/checkchannels endif @@ -49,6 +49,8 @@ DEVTOOLS_COMMON_OBJS := \ devtools/features: $(CCAN_OBJS) common/features.o common/utils.o wire/fromwire.o wire/towire.o devtools/features.o +devtools/fp16: $(CCAN_OBJS) common/fp16.o common/utils.o common/setup.o common/autodata.o devtools/fp16.o + devtools/bolt11-cli: $(DEVTOOLS_COMMON_OBJS) $(JSMN_OBJS) $(CCAN_OBJS) $(BITCOIN_OBJS) wire/fromwire.o wire/towire.o devtools/bolt11-cli.o devtools/encodeaddr: common/utils.o common/bech32.o devtools/encodeaddr.o diff --git a/devtools/fp16.c b/devtools/fp16.c new file mode 100644 index 000000000..4f541e863 --- /dev/null +++ b/devtools/fp16.c @@ -0,0 +1,45 @@ +/* Simple tool to convert to/from our internal fp16 representation */ +#include "config.h" +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + fp16_t fp16val; + u64 u64min, u64max; + char *endp; + + common_setup(argv[0]); + + opt_register_noarg("-h|--help", opt_usage_and_exit, + "[fp16:val|value]\n" + "Converts to/from fp16, indicates ranges", + "Get usage information"); + opt_parse(&argc, argv, opt_log_stderr_exit); + if (argc != 2) + opt_usage_exit_fail("Expect 1 argument"); + + if (strstarts(argv[1], "fp16:")) + fp16val = strtoul(argv[1] + 5, &endp, 0); + else + fp16val = u64_to_fp16(strtoul(argv[1], &endp, 0), false); + + if (*endp) + opt_usage_exit_fail("Expect valid number"); + + u64min = u64max = fp16_to_u64(fp16val); + while (u64_to_fp16(u64min-1, false) == fp16val) + u64min--; + while (u64_to_fp16(u64max+1, false) == fp16val) + u64max++; + printf("fp16:0x%x\n" + "min %"PRIu64"\n" + "max %"PRIu64"\n", + fp16val, u64min, u64max); + common_shutdown(); +}