10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsContext.h"
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsScriptC.h"
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix4x4.h"
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix3x3.h"
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMatrix2x2.h"
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsRuntime.h"
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "utils/Timers.h"
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsdCore.h"
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsdBcc.h"
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsdRuntime.h"
2933b0a9fe4f0fc7bd26378420af259d24036caa22Stephen Hines//#include "rsdPath.h"
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsdAllocation.h"
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <time.h>
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android;
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android::renderscript;
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define GET_TLS()  ScriptTLSStruct * tls = \
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    (ScriptTLSStruct *)pthread_getspecific(rsdgThreadTLSKey); \
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    Context * rsc = tls->mContext; \
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ScriptC * sc = (ScriptC *) tls->mScript
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float float2 __attribute__((ext_vector_type(2)));
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float float3 __attribute__((ext_vector_type(3)));
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float float4 __attribute__((ext_vector_type(4)));
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char char2 __attribute__((ext_vector_type(2)));
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char char3 __attribute__((ext_vector_type(3)));
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char char4 __attribute__((ext_vector_type(4)));
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned char uchar2 __attribute__((ext_vector_type(2)));
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned char uchar3 __attribute__((ext_vector_type(3)));
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned char uchar4 __attribute__((ext_vector_type(4)));
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short short2 __attribute__((ext_vector_type(2)));
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short short3 __attribute__((ext_vector_type(3)));
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short short4 __attribute__((ext_vector_type(4)));
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned short ushort2 __attribute__((ext_vector_type(2)));
550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned short ushort3 __attribute__((ext_vector_type(3)));
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned short ushort4 __attribute__((ext_vector_type(4)));
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int32_t int2 __attribute__((ext_vector_type(2)));
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int32_t int3 __attribute__((ext_vector_type(3)));
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int32_t int4 __attribute__((ext_vector_type(4)));
600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint32_t uint2 __attribute__((ext_vector_type(2)));
610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint32_t uint3 __attribute__((ext_vector_type(3)));
620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint32_t uint4 __attribute__((ext_vector_type(4)));
630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long long2 __attribute__((ext_vector_type(2)));
640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long long3 __attribute__((ext_vector_type(3)));
650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long long4 __attribute__((ext_vector_type(4)));
660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned long long ulong2 __attribute__((ext_vector_type(2)));
670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned long long ulong3 __attribute__((ext_vector_type(3)));
680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned long long ulong4 __attribute__((ext_vector_type(4)));
690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Allocation
730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_AllocationSyncAll2(Allocation *a, RsAllocationUsageType source) {
770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrAllocationSyncAll(rsc, sc, a, source);
790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_AllocationSyncAll(Allocation *a) {
820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrAllocationSyncAll(rsc, sc, a, RS_ALLOCATION_USAGE_SCRIPT);
840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_AllocationCopy1DRange(Allocation *dstAlloc,
870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t dstOff,
880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t dstMip,
890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t count,
900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     Allocation *srcAlloc,
910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t srcOff, uint32_t srcMip) {
920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrAllocationCopy1DRange(rsc, dstAlloc, dstOff, dstMip, count,
940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             srcAlloc, srcOff, srcMip);
950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_AllocationCopy2DRange(Allocation *dstAlloc,
980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t dstXoff, uint32_t dstYoff,
990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t dstMip, uint32_t dstFace,
1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t width, uint32_t height,
1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     Allocation *srcAlloc,
1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t srcXoff, uint32_t srcYoff,
1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                     uint32_t srcMip, uint32_t srcFace) {
1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrAllocationCopy2DRange(rsc, dstAlloc,
1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             dstXoff, dstYoff, dstMip, dstFace,
1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             width, height,
1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             srcAlloc,
1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             srcXoff, srcYoff, srcMip, srcFace);
1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//
1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_SetObject(ObjectBase **dst, ObjectBase * src) {
1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrSetObject(rsc, sc, dst, src);
1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_ClearObject(ObjectBase **dst) {
1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrClearObject(rsc, sc, dst);
1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic bool SC_IsObject(const ObjectBase *src) {
1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrIsObject(rsc, sc, src);
1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic const Allocation * SC_GetAllocation(const void *ptr) {
1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsdScriptGetAllocationForPointer(rsc, sc, ptr);
1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_ForEach_SAA(Script *target,
1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            Allocation *in,
1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            Allocation *out) {
1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrForEach(rsc, sc, target, in, out, NULL, 0, NULL);
1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_ForEach_SAAU(Script *target,
1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            Allocation *in,
1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            Allocation *out,
1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            const void *usr) {
1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrForEach(rsc, sc, target, in, out, usr, 0, NULL);
1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_ForEach_SAAUS(Script *target,
1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             Allocation *in,
1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             Allocation *out,
1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             const void *usr,
1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             const RsScriptCall *call) {
1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrForEach(rsc, sc, target, in, out, usr, 0, call);
1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_ForEach_SAAUL(Script *target,
1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             Allocation *in,
1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             Allocation *out,
1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             const void *usr,
1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                             uint32_t usrLen) {
1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrForEach(rsc, sc, target, in, out, usr, usrLen, NULL);
1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_ForEach_SAAULS(Script *target,
1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                              Allocation *in,
1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                              Allocation *out,
1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                              const void *usr,
1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                              uint32_t usrLen,
1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                              const RsScriptCall *call) {
1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsrForEach(rsc, sc, target, in, out, usr, usrLen, call);
1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Time routines
1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic float SC_GetDt() {
1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrGetDt(rsc, sc);
1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestime_t SC_Time(time_t *timer) {
1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrTime(rsc, sc, timer);
1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestm* SC_LocalTime(tm *local, time_t *timer) {
2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrLocalTime(rsc, sc, local, timer);
2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint64_t SC_UptimeMillis() {
2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrUptimeMillis(rsc, sc);
2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint64_t SC_UptimeNanos() {
2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrUptimeNanos(rsc, sc);
2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Message routines
2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_ToClient2(int cmdID, void *data, int len) {
2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrToClient(rsc, sc, cmdID, data, len);
2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_ToClient(int cmdID) {
2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrToClient(rsc, sc, cmdID, NULL, 0);
2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_ToClientBlocking2(int cmdID, void *data, int len) {
2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrToClientBlocking(rsc, sc, cmdID, data, len);
2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic uint32_t SC_ToClientBlocking(int cmdID) {
2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    GET_TLS();
2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return rsrToClientBlocking(rsc, sc, cmdID, NULL, 0);
2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint SC_divsi3(int a, int b) {
2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return a / b;
2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint SC_modsi3(int a, int b) {
2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return a % b;
2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesunsigned int SC_udivsi3(unsigned int a, unsigned int b) {
2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return a / b;
2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesunsigned int SC_umodsi3(unsigned int a, unsigned int b) {
2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return a % b;
2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugF(const char *s, float f) {
2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %f, 0x%08x", s, f, *((int *) (&f)));
2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugFv2(const char *s, float f1, float f2) {
2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f}", s, f1, f2);
2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugFv3(const char *s, float f1, float f2, float f3) {
2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f, %f}", s, f1, f2, f3);
2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugFv4(const char *s, float f1, float f2, float f3, float f4) {
2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f, %f, %f}", s, f1, f2, f3, f4);
2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugF2(const char *s, float2 f) {
2670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f}", s, f.x, f.y);
2680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugF3(const char *s, float3 f) {
2700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f, %f}", s, f.x, f.y, f.z);
2710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugF4(const char *s, float4 f) {
2730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f, %f, %f}", s, f.x, f.y, f.z, f.w);
2740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugD(const char *s, double d) {
2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %f, 0x%08llx", s, d, *((long long *) (&d)));
2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugFM4v4(const char *s, const float *f) {
2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f, %f, %f", s, f[0], f[4], f[8], f[12]);
2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s  %f, %f, %f, %f", s, f[1], f[5], f[9], f[13]);
2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s  %f, %f, %f, %f", s, f[2], f[6], f[10], f[14]);
2820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s  %f, %f, %f, %f}", s, f[3], f[7], f[11], f[15]);
2830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugFM3v3(const char *s, const float *f) {
2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f, %f", s, f[0], f[3], f[6]);
2860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s  %f, %f, %f", s, f[1], f[4], f[7]);
2870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s  %f, %f, %f}",s, f[2], f[5], f[8]);
2880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugFM2v2(const char *s, const float *f) {
2900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%f, %f", s, f[0], f[2]);
2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s  %f, %f}",s, f[1], f[3]);
2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugI8(const char *s, char c) {
2940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %hhd  0x%hhx", s, c, (unsigned char)c);
2950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugC2(const char *s, char2 c) {
2970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hhd, %hhd}  0x%hhx 0x%hhx", s, c.x, c.y, (unsigned char)c.x, (unsigned char)c.y);
2980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
2990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugC3(const char *s, char3 c) {
3000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hhd, %hhd, %hhd}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z);
3010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugC4(const char *s, char4 c) {
3030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hhd, %hhd, %hhd, %hhd}  0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.w, (unsigned char)c.x, (unsigned char)c.y, (unsigned char)c.z, (unsigned char)c.w);
3040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugU8(const char *s, unsigned char c) {
3060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %hhu  0x%hhx", s, c, c);
3070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUC2(const char *s, uchar2 c) {
3090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hhu, %hhu}  0x%hhx 0x%hhx", s, c.x, c.y, c.x, c.y);
3100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUC3(const char *s, uchar3 c) {
3120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.x, c.y, c.z);
3130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUC4(const char *s, uchar4 c) {
3150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hhu, %hhu, %hhu, %hhu}  0x%hhx 0x%hhx 0x%hhx 0x%hhx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w);
3160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugI16(const char *s, short c) {
3180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %hd  0x%hx", s, c, c);
3190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugS2(const char *s, short2 c) {
3210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hd, %hd}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
3220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugS3(const char *s, short3 c) {
3240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hd, %hd, %hd}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z);
3250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugS4(const char *s, short4 c) {
3270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hd, %hd, %hd, %hd}  0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w);
3280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugU16(const char *s, unsigned short c) {
3300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %hu  0x%hx", s, c, c);
3310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUS2(const char *s, ushort2 c) {
3330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hu, %hu}  0x%hx 0x%hx", s, c.x, c.y, c.x, c.y);
3340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUS3(const char *s, ushort3 c) {
3360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hu, %hu, %hu}  0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.x, c.y, c.z);
3370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUS4(const char *s, ushort4 c) {
3390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%hu, %hu, %hu, %hu}  0x%hx 0x%hx 0x%hx 0x%hx", s, c.x, c.y, c.z, c.w, c.x, c.y, c.z, c.w);
3400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugI32(const char *s, int32_t i) {
3420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %d  0x%x", s, i, i);
3430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugI2(const char *s, int2 i) {
3450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%d, %d}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
3460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugI3(const char *s, int3 i) {
3480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%d, %d, %d}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
3490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugI4(const char *s, int4 i) {
3510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%d, %d, %d, %d}  0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x, i.y, i.z, i.w);
3520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugU32(const char *s, uint32_t i) {
3540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %u  0x%x", s, i, i);
3550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUI2(const char *s, uint2 i) {
3570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%u, %u}  0x%x 0x%x", s, i.x, i.y, i.x, i.y);
3580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUI3(const char *s, uint3 i) {
3600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%u, %u, %u}  0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.x, i.y, i.z);
3610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUI4(const char *s, uint4 i) {
3630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%u, %u, %u, %u}  0x%x 0x%x 0x%x 0x%x", s, i.x, i.y, i.z, i.w, i.x, i.y, i.z, i.w);
3640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugLL64(const char *s, long long ll) {
3660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %lld  0x%llx", s, ll, ll);
3670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugL2(const char *s, long2 ll) {
3690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%lld, %lld}  0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y);
3700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugL3(const char *s, long3 ll) {
3720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%lld, %lld, %lld}  0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.x, ll.y, ll.z);
3730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugL4(const char *s, long4 ll) {
3750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%lld, %lld, %lld, %lld}  0x%llx 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.w, ll.x, ll.y, ll.z, ll.w);
3760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugULL64(const char *s, unsigned long long ll) {
3780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %llu  0x%llx", s, ll, ll);
3790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUL2(const char *s, ulong2 ll) {
3810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%llu, %llu}  0x%llx 0x%llx", s, ll.x, ll.y, ll.x, ll.y);
3820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUL3(const char *s, ulong3 ll) {
3840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%llu, %llu, %llu}  0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.x, ll.y, ll.z);
3850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugUL4(const char *s, ulong4 ll) {
3870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s {%llu, %llu, %llu, %llu}  0x%llx 0x%llx 0x%llx 0x%llx", s, ll.x, ll.y, ll.z, ll.w, ll.x, ll.y, ll.z, ll.w);
3880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic void SC_debugP(const char *s, const void *p) {
3900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGD("%s %p", s, p);
3910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
3920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
3950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// Stub implementation
3960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//////////////////////////////////////////////////////////////////////////////
3970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// llvm name mangling ref
3990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//  <builtin-type> ::= v  # void
4000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= b  # bool
4010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= c  # char
4020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= a  # signed char
4030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= h  # unsigned char
4040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= s  # short
4050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= t  # unsigned short
4060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= i  # int
4070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= j  # unsigned int
4080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= l  # long
4090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= m  # unsigned long
4100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= x  # long long, __int64
4110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= y  # unsigned long long, __int64
4120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= f  # float
4130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//                 ::= d  # double
4140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesstatic RsdSymbolTable gSyms[] = {
4160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "memset", (void *)&memset, true },
4170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "memcpy", (void *)&memcpy, true },
4180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // Refcounting
4200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP10rs_elementS_", (void *)&SC_SetObject, true },
4210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP10rs_element", (void *)&SC_ClearObject, true },
4220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject10rs_element", (void *)&SC_IsObject, true },
4230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP7rs_typeS_", (void *)&SC_SetObject, true },
4250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP7rs_type", (void *)&SC_ClearObject, true },
4260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject7rs_type", (void *)&SC_IsObject, true },
4270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP13rs_allocationS_", (void *)&SC_SetObject, true },
4290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP13rs_allocation", (void *)&SC_ClearObject, true },
4300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject13rs_allocation", (void *)&SC_IsObject, true },
4310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP10rs_samplerS_", (void *)&SC_SetObject, true },
4330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP10rs_sampler", (void *)&SC_ClearObject, true },
4340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject10rs_sampler", (void *)&SC_IsObject, true },
4350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP9rs_scriptS_", (void *)&SC_SetObject, true },
4370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP9rs_script", (void *)&SC_ClearObject, true },
4380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject9rs_script", (void *)&SC_IsObject, true },
4390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP7rs_pathS_", (void *)&SC_SetObject, true },
4410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP7rs_path", (void *)&SC_ClearObject, true },
4420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject7rs_path", (void *)&SC_IsObject, true },
4430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP7rs_meshS_", (void *)&SC_SetObject, true },
4450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP7rs_mesh", (void *)&SC_ClearObject, true },
4460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject7rs_mesh", (void *)&SC_IsObject, true },
4470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP19rs_program_fragmentS_", (void *)&SC_SetObject, true },
4490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP19rs_program_fragment", (void *)&SC_ClearObject, true },
4500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject19rs_program_fragment", (void *)&SC_IsObject, true },
4510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP17rs_program_vertexS_", (void *)&SC_SetObject, true },
4530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP17rs_program_vertex", (void *)&SC_ClearObject, true },
4540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject17rs_program_vertex", (void *)&SC_IsObject, true },
4550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP17rs_program_rasterS_", (void *)&SC_SetObject, true },
4570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP17rs_program_raster", (void *)&SC_ClearObject, true },
4580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject17rs_program_raster", (void *)&SC_IsObject, true },
4590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP16rs_program_storeS_", (void *)&SC_SetObject, true },
4610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP16rs_program_store", (void *)&SC_ClearObject, true },
4620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject16rs_program_store", (void *)&SC_IsObject, true },
4630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsSetObjectP7rs_fontS_", (void *)&SC_SetObject, true },
4650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsClearObjectP7rs_font", (void *)&SC_ClearObject, true },
4660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z10rsIsObject7rs_font", (void *)&SC_IsObject, true },
4670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // Allocation ops
4690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z21rsAllocationMarkDirty13rs_allocation", (void *)&SC_AllocationSyncAll, true },
4700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_AllocationSyncAll, false },
4710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z20rsgAllocationSyncAll13rs_allocationj", (void *)&SC_AllocationSyncAll2, false },
4720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z20rsgAllocationSyncAll13rs_allocation24rs_allocation_usage_type", (void *)&SC_AllocationSyncAll2, false },
4730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z15rsGetAllocationPKv", (void *)&SC_GetAllocation, true },
4740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z23rsAllocationCopy1DRange13rs_allocationjjjS_jj", (void *)&SC_AllocationCopy1DRange, false },
4750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z23rsAllocationCopy2DRange13rs_allocationjjj26rs_allocation_cubemap_facejjS_jjjS0_", (void *)&SC_AllocationCopy2DRange, false },
4760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // Messaging
4780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z14rsSendToClienti", (void *)&SC_ToClient, false },
4800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z14rsSendToClientiPKvj", (void *)&SC_ToClient2, false },
4810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z22rsSendToClientBlockingi", (void *)&SC_ToClientBlocking, false },
4820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z22rsSendToClientBlockingiPKvj", (void *)&SC_ToClientBlocking2, false },
4830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_", (void *)&SC_ForEach_SAA, true },
4850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_PKv", (void *)&SC_ForEach_SAAU, true },
4860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvPK16rs_script_call_t", (void *)&SC_ForEach_SAAUS, true },
4870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvj", (void *)&SC_ForEach_SAAUL, true },
4880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z9rsForEach9rs_script13rs_allocationS0_PKvjPK16rs_script_call_t", (void *)&SC_ForEach_SAAULS, true },
4890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // time
4910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z6rsTimePi", (void *)&SC_Time, true },
4920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z11rsLocaltimeP5rs_tmPKi", (void *)&SC_LocalTime, true },
4930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z14rsUptimeMillisv", (void*)&SC_UptimeMillis, true },
4940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z13rsUptimeNanosv", (void*)&SC_UptimeNanos, true },
4950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsGetDtv", (void*)&SC_GetDt, false },
4960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // Debug
4980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcf", (void *)&SC_debugF, true },
4990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcff", (void *)&SC_debugFv2, true },
5000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcfff", (void *)&SC_debugFv3, true },
5010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcffff", (void *)&SC_debugFv4, true },
5020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_f", (void *)&SC_debugF2, true },
5030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_f", (void *)&SC_debugF3, true },
5040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_f", (void *)&SC_debugF4, true },
5050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcd", (void *)&SC_debugD, true },
5060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcPK12rs_matrix4x4", (void *)&SC_debugFM4v4, true },
5070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcPK12rs_matrix3x3", (void *)&SC_debugFM3v3, true },
5080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcPK12rs_matrix2x2", (void *)&SC_debugFM2v2, true },
5090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcc", (void *)&SC_debugI8, true },
5100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_c", (void *)&SC_debugC2, true },
5110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_c", (void *)&SC_debugC3, true },
5120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_c", (void *)&SC_debugC4, true },
5130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKch", (void *)&SC_debugU8, true },
5140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_h", (void *)&SC_debugUC2, true },
5150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_h", (void *)&SC_debugUC3, true },
5160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_h", (void *)&SC_debugUC4, true },
5170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcs", (void *)&SC_debugI16, true },
5180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_s", (void *)&SC_debugS2, true },
5190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_s", (void *)&SC_debugS3, true },
5200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_s", (void *)&SC_debugS4, true },
5210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKct", (void *)&SC_debugU16, true },
5220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_t", (void *)&SC_debugUS2, true },
5230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_t", (void *)&SC_debugUS3, true },
5240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_t", (void *)&SC_debugUS4, true },
5250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKci", (void *)&SC_debugI32, true },
5260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_i", (void *)&SC_debugI2, true },
5270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_i", (void *)&SC_debugI3, true },
5280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_i", (void *)&SC_debugI4, true },
5290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcj", (void *)&SC_debugU32, true },
5300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_j", (void *)&SC_debugUI2, true },
5310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_j", (void *)&SC_debugUI3, true },
5320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_j", (void *)&SC_debugUI4, true },
5330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // Both "long" and "unsigned long" need to be redirected to their
5340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // 64-bit counterparts, since we have hacked Slang to use 64-bit
5350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // for "long" on Arm (to be similar to Java).
5360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcl", (void *)&SC_debugLL64, true },
5370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_l", (void *)&SC_debugL2, true },
5380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_l", (void *)&SC_debugL3, true },
5390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_l", (void *)&SC_debugL4, true },
5400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcm", (void *)&SC_debugULL64, true },
5410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_m", (void *)&SC_debugUL2, true },
5420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_m", (void *)&SC_debugUL3, true },
5430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_m", (void *)&SC_debugUL4, true },
5440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcx", (void *)&SC_debugLL64, true },
5450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_x", (void *)&SC_debugL2, true },
5460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_x", (void *)&SC_debugL3, true },
5470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_x", (void *)&SC_debugL4, true },
5480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcy", (void *)&SC_debugULL64, true },
5490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv2_y", (void *)&SC_debugUL2, true },
5500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv3_y", (void *)&SC_debugUL3, true },
5510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcDv4_y", (void *)&SC_debugUL4, true },
5520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { "_Z7rsDebugPKcPKv", (void *)&SC_debugP, true },
5530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    { NULL, NULL, false }
5550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines};
5560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid* rsdLookupRuntimeStub(void* pContext, char const* name) {
5590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ScriptC *s = (ScriptC *)pContext;
5600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RsdSymbolTable *syms = gSyms;
5610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    const RsdSymbolTable *sym = rsdLookupSymbolMath(name);
5620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    if (!sym) {
5640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        while (syms->mPtr) {
5650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            if (!strcmp(syms->mName, name)) {
5660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                sym = syms;
5670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            }
5680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            syms++;
5690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        }
5700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
5710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    if (sym) {
5730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        s->mHal.info.isThreadable &= sym->threadable;
5740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        return sym->mPtr;
5750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    }
5760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ALOGE("ScriptC sym lookup failed for %s", name);
5770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    return NULL;
5780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
5790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
581