Remap registers to avoid clobbering the neon registers q4-q7

According to the calling convention, the registers q4-q7 should be
preserved by functions. The caller (generated by the compiler) could
be using those registers anywhere for any intermediate data.

Functions that use 12 or less of the qX registers can avoid
violating the calling convention by simply using other registers instead
of the callee saved registers q4-q7.

This change only remaps the registers used within functions - therefore
this does not affect performance at all. E.g. in functions using
registers q0-q7, we now use q0-q3 and q8-q11 instead.
Push clobbered neon registers on the stack

According to the calling convention, the registers q4-q7 should be
preserved by functions. The caller (generated by the compiler) could
be using those registers anywhere for any intermediate data.

Functions that use more than 12 of the qX registers must push
the clobbered registers on the stack in order to be able to restore them
afterwards.

In functions that don't use all 16 registers, but clobber some of
the callee saved registers q4-q7, one or more of them are remapped
to reduce the number of registers that have to be saved/restored.

This incurs a very small (around 0.5%) slowdown in the decoder and
encoder.
3Author: ruil2 <ruil2@cisco.com>
 modify the parameter verification for SM_AUTO_SLICE mode -- uiSliceNum
 iis ignored
fix encode crash
Merge pull request #478 from volvet/fix-encode-crash

fix encode crash
fix double free crash in encoder
Merge pull request #479 from volvet/fix-double-free-crash

fix double free crash in encoder
Merge pull request #476 from ruil2/encoder_slice_auto

modify the parameter verification for SM_AUTO_SLICE mode, review at: https://rbcommons.com/s/OpenH264/r/184/
fix idr interval issue
Make arm assembly labels always start from the beginning of the line

A few labels were misformatted.
Merge pull request #481 from mstorsjo/arm-asm-labels

Make arm assembly labels always start from the beginning of the line
Merge pull request #480 from volvet/fix-idr-interval-issue

fix idr interval issue
mv range setting refactor
Merge pull request #482 from sijchen/me_refactor1

mv range setting refactor
use large/medium/similar to define scene change result
add code coverage test.
use lcov & gcov to generate coverage report
use genhtml to generate html pages
on ubuntu: sudo apt-get install lcov will install
these two cmd lines.
remove trailing white spaces
Merge pull request #484 from licaiguo/add-gcov

Add gcov
fix the condition of scene change flag and comments
Merge pull request #463 from mstorsjo/dont-clobber-neon-registers

Avoid clobbering the neon registers q4-q7

Review and verified by zhilwang