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(); +}