Mupen64 - N64 Emulator running

I managed to make it work. The script has a few errors. In the following block:

echo "------------------------------------------------------------"
echo "--- Building rsp-hle ---"
echo "------------------------------------------------------------"
cd ../../mupen64plus-rsp-hle/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install

… should be…

echo "------------------------------------------------------------"
echo "--- Building rsp-hle ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-rsp-hle/projects/unix
sudo make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install

The relative path was incorrect (it was missing a ../). It was also needed to use sudo on the first make, otherwise it was going to throw a permission error.

I also installed the libsamplerate0-dev and libspeexdsp-dev development libraries because the compiler was whining about not having those when uninstalling de audio plugin (I uninstalled it before downloading and compiling it again from scratch):

apt install libsamplerate0-dev libspeexdsp-dev

The only plugin I could not compile and install was mupen64plus-rsp-cxd4 but I don’t know if it’s actually needed. This is what I get when I tried to compile it:

Makefile:111: Architecture "armv7l" not officially supported.'
    CC  _obj/vu/multiply.o
In file included from ../..//vu/../my_types.h:36:0,
                 from ../..//vu/vu.h:22,
                 from ../..//vu/multiply.h:19,
                 from ../..//vu/multiply.c:16:
../..//vu/../sse2neon/SSE2NEON.h: In function ‘_mm_castps_si128’:
../..//vu/../sse2neon/SSE2NEON.h:934:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  return *(const __m128i *)&a;
  ^~~~~~
../..//vu/../sse2neon/SSE2NEON.h: In function ‘_mm_castsi128_ps’:
../..//vu/../sse2neon/SSE2NEON.h:940:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  return *(const __m128 *)&a;
  ^~~~~~
../..//vu/multiply.c: In function ‘mulf_v_msp’:
../..//vu/multiply.c:118:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:120:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:134:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = negative; /* 2*i16*i16 only fills L/M; VACC_H = 0 or ~0. */
     ^
../..//vu/multiply.c: In function ‘mulu_v_msp’:
../..//vu/multiply.c:180:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:182:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:193:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = negative; /* 2*i16*i16 only fills L/M; VACC_H = 0 or ~0. */
     ^
../..//vu/multiply.c: In function ‘mudl_v_msp’:
../..//vu/multiply.c:223:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = vs;
     ^
../..//vu/multiply.c:224:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = vt;
     ^
../..//vu/multiply.c:225:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = vt;
     ^
../..//vu/multiply.c: In function ‘mudm_v_msp’:
../..//vu/multiply.c:257:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:258:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:261:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = prod_hi;
     ^
../..//vu/multiply.c: In function ‘mudn_v_msp’:
../..//vu/multiply.c:295:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:296:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:298:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = prod_hi;
     ^
../..//vu/multiply.c: In function ‘mudh_v_msp’:
../..//vu/multiply.c:324:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = _mm_setzero_si128();
     ^
../..//vu/multiply.c:325:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = vs; /* acc 31..16 storing (VS*VT)15..0 */
     ^
../..//vu/multiply.c:326:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = prod_high; /* acc 47..32 storing (VS*VT)31..16 */
     ^
../..//vu/multiply.c: In function ‘macf_v_msp’:
../..//vu/multiply.c:373:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:374:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:375:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:378:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:26:5: warning: implicit declaration of function ‘_mm_cmplt_epi16’ [-Wimplicit-function-declaration]
     _mm_cmplt_epi16(                            \
     ^
../..//vu/multiply.c:379:16: note: in expansion of macro ‘_mm_cmplt_epu16’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* a + b < a + 0 ? ~0 : 0 */
                ^~~~~~~~~~~~~~~
../..//vu/multiply.c:379:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* a + b < a + 0 ? ~0 : 0 */
              ^
../..//vu/multiply.c:382:18: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow_new = _mm_cmplt_epu16(acc_md, prod_hi);
                  ^
../..//vu/multiply.c:386:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:391:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘macu_v_msp’:
../..//vu/multiply.c:440:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:441:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:442:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:445:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:446:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* a + b < a + 0 ? ~0 : 0 */
              ^
../..//vu/multiply.c:449:18: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow_new = _mm_cmplt_epu16(acc_md, prod_hi);
                  ^
../..//vu/multiply.c:453:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:458:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c:463:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epi16(acc_md, vs);
              ^
../..//vu/multiply.c: In function ‘madl_v_msp’:
../..//vu/multiply.c:502:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:503:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:504:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:507:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:509:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_hi); /* overflow:  (x + y < y) */
              ^
../..//vu/multiply.c:511:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:520:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘madm_v_msp’:
../..//vu/multiply.c:583:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:584:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:585:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:588:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:590:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* overflow:  (x + y < y) */
              ^
../..//vu/multiply.c:593:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:595:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_md, prod_hi);
              ^
../..//vu/multiply.c:599:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘madn_v_msp’:
../..//vu/multiply.c:644:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:645:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:646:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:649:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:651:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* overflow:  (x + y < y) */
              ^
../..//vu/multiply.c:654:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:656:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_md, prod_hi);
              ^
../..//vu/multiply.c:660:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘madh_v_msp’:
../..//vu/multiply.c:718:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_mid = *(v16 *)VACC_M;
     ^~~~~~~
../..//vu/multiply.c:720:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = vs;
     ^
../..//vu/multiply.c:721:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     vt = *(v16 *)VACC_H;
     ^~
../..//vu/multiply.c:732:8: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     vs = _mm_cmplt_epu16(vs, acc_mid); /* acc.mid + prod.low < acc.mid */
        ^
../..//vu/multiply.c:734:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = vt;
     ^
../..//vu/multiply.c:736:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     vs = *(v16 *)VACC_M;
     ^~
Makefile:327: recipe for target '_obj/vu/multiply.o' failed
make: *** [_obj/vu/multiply.o] Error 1


What I know is that at least in my case the emulation is choppy and laggy as hell, almost unplayable at all. I also detected the screen becomes black if I don’t press any button for a while, even when it shoudn’t because of the plan energy. The only thing I can do when that happens is to reboot.

Here you can see how bad performs this emulator in my case:

It’s clear that I’m missing something or that plugin I couldn’t install is more important that it seems. I tried both with Fbturbo and Lima graphic drivers without any difference at all on the performance.