Nonworking scalarization patch

Hal Murray hmurray at megapathdsl.net
Wed Jan 4 11:25:36 UTC 2017


l_fp is used 2 places.  One is scattered throughout the code.  That's the 
stuff you are trying to clean up.

The other is on the wire.

The wire is big endian.  Intel is little endian.  On Intel, you need to do an 
8 byte swap rather than 2 4 byte swaps.

I have working code, but I'll let you clean things up and push since the patch you sent doesn't apply to HEAD.

I made a separate type for the on-wire forms.  It's only used in 4 places in the packet and 2 for htonl_fp and ntohl_fp.  The idea is to let the compiler help check things.

typedef struct {
        uint32_t        l_ui;
        uint32_t        l_uf;
} l_fp_w;

static inline l_fp_w htonl_fp(l_fp lfp) {
    l_fp_w lfpw;
    lfpw.l_ui = htonl(lfpuint(lfp));
    lfpw.l_uf = htonl(lfpfrac(lfp));
    return lfpw;
}

static inline l_fp ntohl_fp(l_fp_w lfpw) {
    return lfpinit(ntohl(lfpw.l_ui), ntohl(lfpw.l_uf));
}

I think that will work on a big endian system without any extra ifdefs.  It could be simplified with a few ifdefs.


-- 
These are my opinions.  I hate spam.





More information about the devel mailing list