Merge pull request #4620 from unknownbrackets/ios-minor

Try to workaround iOS crash, tweaks
This commit is contained in:
Henrik Rydgård committed 2013-11-23 14:51:04 -08:00
commit af2e18dcc3
2 files changed
+15 -10

No files matched your search

+12 -9
View File
@@ -29,7 +29,7 @@ u32 QuickTexHashNEON(const void *checkp, u32 size) {
__builtin_prefetch(checkp, 0, 0);
if (((intptr_t)checkp & 0xf) == 0 && (size & 0x3f) == 0) {
#if 0
#ifdef IOS
uint32x4_t cursor = vdupq_n_u32(0);
uint32x4_t cursor2 = vld1q_u32((const u32 *)QuickTexHashInitial);
uint32x4_t update = vdupq_n_u32(0x24552455U);
@@ -48,10 +48,13 @@ u32 QuickTexHashNEON(const void *checkp, u32 size) {
cursor = vaddq_u32(cursor, cursor2);
check = vgetq_lane_u32(cursor, 0) + vgetq_lane_u32(cursor, 1) + vgetq_lane_u32(cursor, 2) + vgetq_lane_u32(cursor, 3);
#else
// TODO: Why does this crash on iOS, but only certain devices?
// It's faster than the above, but I guess it sucks to be using an iPhone.
// d0/d1 (q0) - cursor
// d2/d3 (q1) - cursor2
// d4/d5 (q2) - update
// d6-d13 (q3-q6) - memory transfer
// d16-d23 (q8-q11) - memory transfer
asm volatile (
// Initialize cursor.
"vmov.i32 q0, #0\n"
@@ -81,14 +84,14 @@ u32 QuickTexHashNEON(const void *checkp, u32 size) {
// Okay, do the memory hashing.
"QuickTexHashNEON_next:\n"
"pld [%2, #0xc0]\n"
"vldmia %2!, {d6-d13}\n"
"vmla.i32 q0, q1, q3\n"
"veor.i32 q0, q0, q4\n"
"vmul.i32 q6, q6, q1\n"
"vldmia %2!, {d16-d23}\n"
"vmla.i32 q0, q1, q8\n"
"vmul.i32 q11, q11, q1\n"
"veor.i32 q0, q0, q9\n"
"cmp %2, r0\n"
"vadd.i32 q0, q0, q5\n"
"veor.i32 q0, q0, q6\n"
"vadd.i32 q0, q0, q10\n"
"vadd.i32 q1, q1, q2\n"
"veor.i32 q0, q0, q11\n"
"blo QuickTexHashNEON_next\n"
// Now let's get the result.
@@ -99,7 +102,7 @@ u32 QuickTexHashNEON(const void *checkp, u32 size) {
: "=r"(check)
: "r"(size), "r"(checkp)
: "r0", "r1", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "d10", "d11", "d12", "d13"
: "r0", "r1", "d0", "d1", "d2", "d3", "d4", "d5", "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23", "cc"
);
#endif
} else {
+3 -1
View File
@@ -143,7 +143,9 @@ bool RunAutoTest(HeadlessHost *headlessHost, CoreParameter &coreParameter, bool
time_update();
bool passed = true;
double deadline = time_now() + timeout;
// TODO: We must have some kind of stack overflow or we're not following the ABI right.
// This gets trashed if it's not static.
static double deadline = time_now() + timeout;
coreState = CORE_RUNNING;
while (coreState == CORE_RUNNING)