Use integer-only rounding division, and add compiler optimisation.

This commit is contained in:
Philip Heron 2012-03-05 20:22:42 +00:00
parent fe8a1a642c
commit d3bc9dca2d
2 changed files with 13 additions and 6 deletions

View File

@ -1,7 +1,7 @@
CC=gcc CC=gcc
CFLAGS=-g -Wall CFLAGS=-g -O3 -Wall
LDFLAGS=-g -lm LDFLAGS=-g
ssdv: main.o ssdv.o rs8.o ssdv.h rs8.h ssdv: main.o ssdv.o rs8.o ssdv.h rs8.h
$(CC) $(LDFLAGS) main.o ssdv.o rs8.o -o ssdv $(CC) $(LDFLAGS) main.o ssdv.o rs8.o -o ssdv

15
ssdv.c
View File

@ -19,7 +19,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <math.h>
#include "ssdv.h" #include "ssdv.h"
#include "rs8.h" #include "rs8.h"
@ -113,9 +112,17 @@ static const uint8_t std_dht11[179] = {
#define DDQT (s->ddqt[s->component ? 1 : 0][1 + s->acpart]) #define DDQT (s->ddqt[s->component ? 1 : 0][1 + s->acpart])
/* Helpers for converting between DQT tables */ /* Helpers for converting between DQT tables */
#define AADJ(i) (SDQT == DDQT ? (i) : round((double) i / DDQT)) #define AADJ(i) (SDQT == DDQT ? (i) : irdiv(i, DDQT))
#define UADJ(i) (SDQT == DDQT ? (i) : round((double) i * SDQT)) #define UADJ(i) (SDQT == DDQT ? (i) : (i * SDQT))
#define BADJ(i) (SDQT == DDQT ? (i) : round((double) i * SDQT / DDQT)) #define BADJ(i) (SDQT == DDQT ? (i) : irdiv(i * SDQT, DDQT))
/* Integer-only division with rounding */
static int irdiv(int i, int div)
{
i = i * 2 / div;
if(i & 1) i += (i > 0 ? 1 : -1);
return(i / 2);
}
/* /*
static char *strbits(uint32_t value, uint8_t bits) static char *strbits(uint32_t value, uint8_t bits)