bitmask lookup table creation
andre
andre at targon.UUCP
Wed Jun 13 20:08:03 AEST 1990
In article <3948 at jato.Jpl.Nasa.Gov> kaleb at mars.UUCP (Kaleb Keithley) writes:
}Don't like to follow up my own article, but:
}In article I wrote:
}>I want to create the following bitmask lookup table:
}> unsigned short masks[] = {
}> 0x0000, 0x0001, 0x0003, 0x0007,
}> 0x000F, 0x001F, 0x003F, 0x007F,
}> 0x00FF, 0x01FF, 0x03FF, 0x07FF,
}> 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF
}> };
}>
}>in a machine independent way.
}>
}>In /usr/include/values.h, the following are #defined:
}>#define BITS(type) (BITSPERBYTE * (int)sizeof(type)
}>#define HIBITS ((short)(1 << BITS(short) - 1))
}>#define MAXSHORT ((short)~HIBITS)
}>which are 0x8000 and 0x7FFF respectively on my machine, which happens to
}>be a Sun Sparc.
}>It is nearly trivial to do it at run-time, and the above definitely works
^^^^^^^ ^^^^^^^^
}>on my Sun. Does anyone have any neat trick to generate this table at
}>compile time in such a way as to be completely machine independent?
If you re-define run-time to be make-time, you can do this easily.
Add to your project a small program that will generate the c-code
of your correct table and use that to compile the 'big' program.
if you decide to put the table in object table.o,
executable: $(OBJS) table.o
$(CC) -o $@ $(OBJS) table.o
table.c: make_table
make_table > $@
hope this helps,
--
The mail| AAA DDDD It's not the kill, but the thrill of the chase.
demon...| AA AAvv vvDD DD Ketchup is a vegetable.
hits!.@&| AAAAAAAvv vvDD DD {nixbur|nixtor}!adalen.via
--more--| AAA AAAvvvDDDDDD Andre van Dalen, uunet!hp4nl!targon!andre
More information about the Comp.lang.c
mailing list