drop floating point from the main loop
authorJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 17 May 2021 08:28:08 +0000 (11:28 +0300)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Mon, 17 May 2021 08:28:08 +0000 (11:28 +0300)
.gitignore
GNUmakefile
src/rbench.c
src/util.h
tools/lutgen.c [new file with mode: 0644]

index 9b53620..e1839fe 100644 (file)
@@ -2,3 +2,5 @@
 *.d
 *.swp
 rbench
+sinlut.s
+tools/lutgen
index d2c211c..4c1087e 100644 (file)
@@ -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
index 3d8eace..4a2c232 100644 (file)
@@ -4,6 +4,7 @@
 #include <math.h>
 #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:
index 001aedc..9b04f0d 100644 (file)
@@ -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 (file)
index 0000000..b4f2645
--- /dev/null
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <math.h>
+
+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;
+}