From 1bd593d94a3492df34d9aaa75b5ad61e4479f2d4 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Mon, 17 May 2021 11:28:08 +0300 Subject: [PATCH] drop floating point from the main loop --- .gitignore | 2 ++ GNUmakefile | 9 ++++++++- src/rbench.c | 8 ++++---- src/util.h | 5 +++++ tools/lutgen.c | 16 ++++++++++++++++ 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 tools/lutgen.c diff --git a/.gitignore b/.gitignore index 9b53620..e1839fe 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ *.d *.swp rbench +sinlut.s +tools/lutgen diff --git a/GNUmakefile b/GNUmakefile index d2c211c..4c1087e 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,5 +1,6 @@ src = $(wildcard src/*.c) $(wildcard src/x11/*.c) -obj = $(src:.c=.o) +ssrc = sinlut.s +obj = $(src:.c=.o) $(ssrc:.s=.o) dep = $(src:.c=.d) bin = rbench @@ -14,6 +15,9 @@ LDFLAGS = -L/usr/X11R6/lib -lX11 -lXext -lm $(bin): $(obj) $(CC) -o $@ $(obj) $(LDFLAGS) +sinlut.s: tools/lutgen + tools/lutgen >$@ + -include $(dep) .PHONY: clean @@ -23,3 +27,6 @@ clean: .PHONY: cleandep cleandep: $(RM) $(dep) + +tools/lutgen: tools/lutgen.c + $(CC) -o $@ $< -lm diff --git a/src/rbench.c b/src/rbench.c index 3d8eace..4a2c232 100644 --- a/src/rbench.c +++ b/src/rbench.c @@ -4,6 +4,7 @@ #include #include "rbench.h" #include "treestor.h" +#include "util.h" #define DEF_WIDTH 640 #define DEF_HEIGHT 480 @@ -45,11 +46,10 @@ void redraw(void) unsigned char *fbptr; uint16_t *fbptr16; uint32_t *fbptr32; - float t = (float)time_msec / 1000.0f; - xoffs = cos(t * 0.5f) * DEF_WIDTH * 2; - yoffs = sin(t) * DEF_HEIGHT; - zoom = (sin(t * 0.75f) * 0.5f + 1.0f) * 1024.0f; + xoffs = COS(time_msec >> 5) * fb_width >> 7; + yoffs = SIN(time_msec >> 4) * fb_height >> 8; + zoom = ((SIN(time_msec >> 4) + 256) << 1) + 512; switch(fb_bpp) { case 15: diff --git a/src/util.h b/src/util.h index 001aedc..9b04f0d 100644 --- a/src/util.h +++ b/src/util.h @@ -1,6 +1,11 @@ #ifndef UTIL_H_ #define UTIL_H_ +extern int sinlut[]; + +#define SIN(x) sinlut[(x) & 0xff] +#define COS(x) sinlut[((x) + 64) & 0xff] + int mask_to_shift(unsigned int mask); #endif /* UTIL_H_ */ diff --git a/tools/lutgen.c b/tools/lutgen.c new file mode 100644 index 0000000..b4f2645 --- /dev/null +++ b/tools/lutgen.c @@ -0,0 +1,16 @@ +#include +#include + +int main(void) +{ + int i; + + puts("\t.data"); + puts("\t.globl sinlut"); + puts("sinlut:"); + for(i=0; i<256; i++) { + float x = sin((float)i / 128.0f * M_PI); + printf("\t.long %d\n", (int)(x * 256.0f)); + } + return 0; +} -- 1.7.10.4