Bash程序  |  60行  |  1.22 KB

# Check if ARM compiler optimize GOT using GOT_PREL as much
# as possible, and turn instruction sequence of SkAlphaMulQ()
#
#	ldr	r3, .L2
#	ldr	r2, .L2+4
#   .LPIC0:
#	add	r3, pc, r3
#	ldr	r3, [r3, r2]
#	ldr	r3, [r3]
#	and	r2, r3, r0, lsr #8
#	....
#   .L2:
#	.word	_GLOBAL_OFFSET_TABLE_-(.LPIC0+8)
#	.word	gMask_00FF00FF(GOT)
#
# into
#
#	ldr	r2, .L2
#   .LPIC1:
#	ldr	r2, [pc, r2]
#	ldr	r3, [r2, #0]
#	and	r2, r3, r0, lsr #8
#	....
#   .L2:
#	.word	gMask_00FF00FF(GOT_PREL)+(.-(.LPIC1+8))
#

fail_panic ()
{
    if [ $? != 0 ] ; then
        echo "ERROR: $@"
        exit 1
    fi
}

for opt do
    optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
    case "$opt" in
    APP_ABI=*)
        APP_ABI=$optarg
        ;;
    esac
done

if [ -z "$APP_ABI" -o "$APP_ABI" = "all" ]; then
    APP_ABI="armeabi,armeabi-v7a"
fi

# Only test for armeabi and armeabi-v7a
if [ "$APP_ABI" != "${APP_ABI%%armeabi*}" ]; then
    APP_ABI=`echo $APP_ABI | tr ',' ' '`
    for ABI in $APP_ABI; do
        $NDK/ndk-build -B APP_ABI=$ABI APP_CFLAGS=-save-temps
        fail_panic "can't compile for APP_ABI=$ABI"
        fgrep -q "(GOT_PREL)" SkAlphaMulQ.s
        fail_panic "Fail to optimize GOT access with GOT_PREL, ABI=$ABI."
    done
fi

rm -rf libs obj SkAlphaMulQ.*