diff options
author | Takamichi Horikawa <takamichiho@gmail.com> | 2017-04-01 14:53:59 +0900 |
---|---|---|
committer | Takamichi Horikawa <takamichiho@gmail.com> | 2017-04-01 14:53:59 +0900 |
commit | 24225349831278c23c6dfc4515e071f4b27b2c41 (patch) | |
tree | 35a853f7f35a53560a5b1bcfd5eda3213990b872 /gtk | |
parent | 5460067b61f86843a0435ebb06a6ebb8223c3dca (diff) |
add sse2/ssse3 simd optimization
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/Makefile.am | 21 | ||||
-rw-r--r-- | gtk/configure.ac | 8 | ||||
-rw-r--r-- | gtk/main.c | 32 |
3 files changed, 51 insertions, 10 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 0a9a95b..5d75f84 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -18,12 +18,29 @@ FMDSP_SRC=../fmdsp/fmdsp.c \ ../fmdsp/font_rom.c \ ../fmdsp/font_fmdsp_small.c +#fmplayer_CFLAGS=$(CFLAGS) +#CFLAGS= +fmplayer_CPPFLAGS=-Wall -Wextra -pedantic \ + -I.. \ + $(GTK3_CFLAGS) $(PORTAUDIO_CFLAGS) +fmplayer_LDADD=$(GTK3_LIBS) $(PORTAUDIO_LIBS) + if ENABLE_NEON LIBOPNA_SRC+=../libopna/opnassg-sinc-neon.s FMDSP_SRC+=../fmdsp/fmdsp-vramlookup-neon.s fmplayer_CCASFLAGS=-march=armv8-a -mfpu=crypto-neon-fp-armv8 endif +if ENABLE_SSE +noinst_LIBRARIES=libsse.a +fmplayer_LDADD+=libsse.a +libsse_a_SOURCES=../libopna/opnassg-sinc-sse2.c \ + ../fmdsp/fmdsp-vramlookup-ssse3.c +libsse_a_CPPFLAGS=$(fmplayer_CPPFLAGS) +#no way to add -O3?? (always overridden by CFLAGS) +libsse_a_CFLAGS=-mssse3 +endif + fmplayer_SOURCES=main.c \ toneview.c \ oscilloview.c \ @@ -34,7 +51,3 @@ fmplayer_SOURCES=main.c \ $(FMDRIVER_SRC) \ $(FMDSP_SRC) -fmplayer_CPPFLAGS=-Wall -Wextra -pedantic \ - -I.. \ - $(GTK3_CFLAGS) $(PORTAUDIO_CFLAGS) -fmplayer_LDADD=$(GTK3_LIBS) $(PORTAUDIO_LIBS) diff --git a/gtk/configure.ac b/gtk/configure.ac index 2727888..f49bd74 100644 --- a/gtk/configure.ac +++ b/gtk/configure.ac @@ -2,6 +2,8 @@ AC_INIT([fmplayer], [0.1.0]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) AM_SILENT_RULES([yes]) AC_PROG_CC_C99 +AC_PROG_RANLIB +AM_PROG_AR AM_PROG_AS dnl AM_PATH_SDL2([2.0.5]) @@ -14,5 +16,11 @@ AS_IF([test "x$enable_neon" = "xyes"], [ AC_DEFINE([ENABLE_NEON]) ]) +AC_CHECK_HEADER([emmintrin.h], [emmintrin_found=yes]) +AM_CONDITIONAL([ENABLE_SSE], [test "x$emmintrin_found" = "xyes"]) +AS_IF([test "x$emmintrin_found" = "xyes"], [ + AC_DEFINE([ENABLE_SSE]) +]) + AC_CONFIG_FILES([Makefile]) AC_OUTPUT @@ -55,7 +55,9 @@ static struct { const char *current_uri; bool oscillo_should_update; struct oscillodata oscillodata_audiothread[LIBOPNA_OSCILLO_TRACK_COUNT]; -} g; +} g = { + .oscillo_should_update = true +}; static void quit(void) { if (g.pastream) { @@ -67,18 +69,26 @@ static void quit(void) { } static void on_destroy(GtkWidget *w, gpointer ptr) { + (void)w; + (void)ptr; quit(); } static void on_menu_quit(GtkMenuItem *menuitem, gpointer ptr) { + (void)menuitem; + (void)ptr; quit(); } static void on_tone_view(GtkMenuItem *menuitem, gpointer ptr) { + (void)menuitem; + (void)ptr; show_toneview(); } static void on_oscillo_view(GtkMenuItem *menuitem, gpointer ptr) { + (void)menuitem; + (void)ptr; show_oscilloview(); } @@ -95,6 +105,9 @@ static int pastream_cb(const void *inptr, void *outptr, unsigned long frames, const PaStreamCallbackTimeInfo *timeinfo, PaStreamCallbackFlags statusFlags, void *userdata) { + (void)inptr; + (void)timeinfo; + (void)statusFlags; struct opna_timer *timer = (struct opna_timer *)userdata; int16_t *buf = (int16_t *)outptr; memset(outptr, 0, sizeof(int16_t)*frames*2); @@ -133,7 +146,8 @@ static void opna_writereg_libopna(struct fmdriver_work *work, unsigned addr, uns } static unsigned opna_readreg_libopna(struct fmdriver_work *work, unsigned addr) { - struct opna_timer *timer = (struct opna_timer *)work->opna; + (void)work; + //struct opna_timer *timer = (struct opna_timer *)work->opna; return opna_readreg(&g.opna, addr); } @@ -280,7 +294,7 @@ static bool openfile(const char *uri) { g.pa_paused = false; { const char *turi = strdup(uri); - free(g.current_uri); + free((void *)g.current_uri); g.current_uri = turi; } return true; @@ -290,6 +304,7 @@ err: } static void on_file_activated(GtkFileChooser *chooser, gpointer ptr) { + (void)ptr; gchar *filename = gtk_file_chooser_get_uri(chooser); if (filename) { openfile(filename); @@ -326,6 +341,8 @@ static GtkWidget *create_menubar() { static gboolean draw_cb(GtkWidget *w, cairo_t *cr, gpointer p) { + (void)w; + (void)p; fmdsp_update(&g.fmdsp, &g.work, &g.opna, g.vram); fmdsp_vrampalette(&g.fmdsp, g.vram, g.vram32, g.vram32_stride); cairo_surface_t *s = cairo_image_surface_create_for_data( @@ -341,6 +358,7 @@ static gboolean draw_cb(GtkWidget *w, static gboolean tick_cb(GtkWidget *w, GdkFrameClock *frame_clock, gpointer p) { + (void)w; (void)frame_clock; gtk_widget_queue_draw(GTK_WIDGET(p)); return G_SOURCE_CONTINUE; @@ -472,6 +490,7 @@ static void drag_data_recv_cb( gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer ptr) { + (void)w; (void)x; (void)y; (void)info; @@ -484,14 +503,15 @@ static void drag_data_recv_cb( gtk_drag_finish(ctx, TRUE, FALSE, time); } -void opna_ssg_sinc_calc_neon(unsigned, const int16_t *, int32_t *); -void fmdsp_vramlookup_neon(uint8_t *, const uint8_t *, const uint8_t *, int); - int main(int argc, char **argv) { #ifdef ENABLE_NEON opna_ssg_sinc_calc_func = opna_ssg_sinc_calc_neon; fmdsp_vramlookup_func = fmdsp_vramlookup_neon; #endif +#ifdef ENABLE_SSE + if (__builtin_cpu_supports("sse2")) opna_ssg_sinc_calc_func = opna_ssg_sinc_calc_sse2; + if (__builtin_cpu_supports("ssse3")) fmdsp_vramlookup_func = fmdsp_vramlookup_ssse3; +#endif load_fontrom(); gtk_init(&argc, &argv); GtkWidget *w = gtk_window_new(GTK_WINDOW_TOPLEVEL); |